Vim:缩进一个空格(不是shiftwidth空格)

时间:2012-02-15 04:16:21

标签: vim

默认的VIM缩进命令由shiftwidth space缩进

e.g。

>>   Indent line by shiftwidth spaces
<<   De-indent line by shiftwidth spaces

有没有办法缩进一个或n个(其中n!= shiftwidth)空格?

执行此操作的一种方法是使用Ctrl+V垂直选择块中的列,然后I垂直插入,然后键入space<Esc>。但是有更好的方法吗?

6 个答案:

答案 0 :(得分:37)

我不确定有更好的方法。但是,有一些很少的方式你可以做到(我能想到的)...

您的视觉阻止解决方案

就像你说的那样:按Ctl-V选择你想要的行,按I进行插入,然后输入空格数。

搜索

与上述相似但更灵活一点 - 您可以使用“选择段落”vip命令或任何范围:按vvip或者有什么您可以选择范围,类型:s/^/{n spaces},其中{n spaces}是您要插入的空格数。

它有点冗长,但几乎可以在任何范围内使用。哎呀,如果你想做整个文件你可以做Ctl-A或你有什么(依赖于操作系统)并缩进整个文件(或者只是跳过整个可视模式的东西,只需要执行命令模式......在:1,$s/^/{n spaces}

请注意,您不必在s ///中包含第三个斜杠,因为您没有在末尾添加任何标记。

<强>全球

也许您只想缩进与某些模式匹配的行。说...所有包含foo的行。没问题:输入:g/foo/s/^/{n spaces}

如果它的多线部分具有相似的模式,那么全球尤其方便。你可以逃到正常模式的土地并选择你想要的行并相应地缩进::g/foo/norm Vjj:s/^/{n spaces}Ctl-V{Enter}。最后加上Ctl-V{Enter}更为复杂,但在某些情况下有用。

使用tabstop和shiftwidth

是的,如果你做了很多 - 我会做:set ts=2:set et以及:set sw=2,并且每个方向使用>><<。 ..

制作功能

好的,所以仍然不够简短,无论出于何种原因,你需要做很多事情,而且你不能恪守swetts设置。没问题,只需编写一个快速函数并给它一个localleader映射:

function! AddSpace(num) range
  let s:counter = 0
  let s:spaces = ''
  while s:counter < a:num
    let s:spaces .= ' '
    let s:counter = s:counter + 1
  endwhile
    execute a:firstline .','. a:lastline .'s/^/'. s:spaces
endfunction

:map <LocalLeader>i :call AddSpace(3)Ctl-V{enter}

也许只知道不止一种方法做到这一点比仅知道一种更好?毕竟,有时最好的解决方案取决于问题:)

答案 1 :(得分:25)

使用Visual Block模式将vi中的代码块缩进三个空格:

  1. 选择要缩进的代码块。在正常模式下使用 Ctrl + V 并向下箭头选择文本。选中它时,输入“:”命令给所选文本块。

  2. 以下内容将出现在命令行中::'<,'>

  3. 要将缩进设置为3个空格,请键入le 3并按Enter键。出现的内容如下::'<,'>le 3

  4. 所选文本会立即缩进为3个空格。

  5. 使用Visual Line模式将vi中的代码块缩进三个空格:

    1. 在VI中打开文件。
    2. 将光标放在某些代码上
    3. 处于正常模式时,请按以下键:

      Vjjjj:le 3
      
    4. 解释您所做的事情:

      V表示开始选择文字。

      jjjj箭头向下4行,突出显示4行。

      :告诉vi您将输入突出显示文本的说明。

      le 3表示缩进突出显示的文本3行。

答案 2 :(得分:14)

要更改为缩进插入的空格字符数,请使用shiftwidth选项:

:set shiftwidth = <number>

请点击此处了解更多details

您也可以将其添加到.vimrc文件中。

答案 3 :(得分:6)

如果我理解正确,你可以使用:

ctrl + V,jj然后是':le n',其中n是要缩进的空格数。

http://vim.wikia.com/wiki/Shifting_blocks_visually

答案 4 :(得分:4)

在您要缩进的代码之间放置标记(&#39; a&#39;&#39;&#39;):

<position cursor at top of block>
m a
<position cursor at bottom of block>
m b

执行替换命令,使得标记之间的每个换行符都替换为所需的空格数(在本例中为2个空格):

:'a,'bs/^/  /g

答案 5 :(得分:0)

我不得不在vim脚本中使用给定数量的空格amount。这很有效:

    let sw_setting = &shiftwidth
    set shiftwidth=1
    exe "normal v" . amount . "<"
    let &shiftwidth = sw_setting

副作用是它重置最后一个视觉模式选择。相反,您可能希望编辑exe...行,以便它执行&#34;&lt;&lt;&#34;在正常模式下重复amount次。即:normal v3<代替normal <<<<<<,如果amount为3,则设为{{1}}。