搜索

首页  >  问答  >  正文

vim下怎么把一大段代python码往前移动一个tab?

在vim下粘贴了一大段python代码,但是从某一行开始全部都多后退了一个tab,有100多行,我一个个手动调整好了,累个半死。

请问有没有办法更省事点?

伊谢尔伦伊谢尔伦2742 天前1667

全部回复(11)我来回复

  • 漂亮男人

    漂亮男人2017-05-16 16:43:40

    在vim里,粘贴代码之前最好进入粘贴模式,这样就会关闭自动缩进

    set paste
    

    将代码粘贴进去之后再关闭粘贴模式

    set nopaste
    

    缩进单行代码是两个大于号'>>'
    回缩就是两个小于号'<<'
    如果想要缩进很多行代码的话就按照下面做

    1 //在这里按下'v'进入选择模式
    1
    1
    1
    1
    1
    1//光标移动到这里,再按一次大于号'>'缩进一次,按'6>'缩进六次,按'<'回缩。以下同理
    
    function helo{//将光标移动到'{',在按下'%',光标将会移动到匹配的括号
    
    //这里省略1000行
    
    }//光标会移动到这里,再按一次大于号'>'就可以缩进
    

    回复
    0
  • phpcn_u1582

    phpcn_u15822017-05-16 16:43:40

    :10,100>
    第10行至第100行缩进
    :20,80<
    第20行至第80行反缩进

    回复
    0
  • 滿天的星座

    滿天的星座2017-05-16 16:43:40

    normal模式下,光标在需要处理的起始行,然后:100>>

    回复
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 16:43:40

    1,^V 在需要缩进的行前面;
    2,I;
    3,tab

    回复
    0
  • 世界只因有你

    世界只因有你2017-05-16 16:43:40

    1 按Esc到命令行模式
    2 移动光标到需要处理的开始行
    3 按v到视图模式,选中所有需要处理的行
    4 按Ctrl+<就可以了

    回复
    0
  • PHP中文网

    PHP中文网2017-05-16 16:43:40

    在 Vim 中粘贴要注意,如果 Vim 无法知道你是在粘贴(非 GUI 版本,终端中没有打开鼠标支持或者终端本身不支持鼠标,因为 Vim 没有 X 剪贴板支持而绕过 Vim、使用带 Shift 键的方式让终端直接粘贴(如往 ssh 中的 Vim 粘贴时通常 Vim 不能访问本地剪贴板,所以只能让终端去「打字」)),那么你需要在粘贴前设置 'paste' 选项。该选项会在插入模式禁用自动缩进、映射等。详见 :h 'paste'

    回复
    0
  • ringa_lee

    ringa_lee2017-05-16 16:43:40

    可以这么玩:
    假如你是第10行到第100行需要删除一个tab,那么可以这么写
    :10,100s/^t//
    就ok了!

    回复
    0
  • 天蓬老师

    天蓬老师2017-05-16 16:43:40

    在 vimrc 里面定义好python的各种 tab,例如:

    autocmd FileType python set ts=4 | set sw=4 | set expandtab    
    

    然后在 normal 模式,直接输入=nj
    n 是要求自动对齐的行数,不管缩进是怎么样的乱,都会自动对齐

    回复
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 16:43:40

    在下以为 vim 提供的命令都很灵活,但都太底层了。目前所有答主的答案都是硬敲的,难记忆也没有效率,建议设置成快捷键吧。
    比如个人习惯用tab,选中目标区域然后按快捷键即可。

    vimlvnoremap <tab> >gv
    vnoremap <s-tab> <gv
    

    以题主的问题为例。

    1. 移动到目标区域的首行
    2. 输入 v 进入选择模式
    3. 输入 100j 往下移动 100 行,此时已经选取了 100 行目标区域
    4. 输入 < tab > 键。

    完~

    回复
    0
  • 漂亮男人

    漂亮男人2017-05-16 16:43:40

    提供另一个方法,不用进 V 模式。

    1. 移动到需要处理的首行,ma

    2. 移动到需要处理的末行,<'a

    回复
    0
  • 取消回复