默认的VIM缩进命令由shiftwidth space缩进
e.g。
>> Indent line by shiftwidth spaces
<< De-indent line by shiftwidth spaces
有没有办法缩进一个或n个(其中n!= shiftwidth)空格?
执行此操作的一种方法是使用Ctrl+V
垂直选择块中的列,然后I
垂直插入,然后键入space
和<Esc>
。但是有更好的方法吗?
答案 0 :(得分:37)
我不确定有更好的方法。但是,有一些很少的方式你可以做到(我能想到的)...
您的视觉阻止解决方案
就像你说的那样:按Ctl-V
选择你想要的行,按I
进行插入,然后输入空格数。
搜索强>
与上述相似但更灵活一点 - 您可以使用“选择段落”vip
命令或任何范围:按v
或vip
或者有什么您可以选择范围,类型: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
,并且每个方向使用>>
和<<
。 ..
制作功能
好的,所以仍然不够简短,无论出于何种原因,你需要做很多事情,而且你不能恪守sw
,et
和ts
设置。没问题,只需编写一个快速函数并给它一个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中的代码块缩进三个空格:
选择要缩进的代码块。在正常模式下使用 Ctrl + V 并向下箭头选择文本。选中它时,输入“:”命令给所选文本块。
以下内容将出现在命令行中::'<,'>
要将缩进设置为3个空格,请键入le 3
并按Enter键。出现的内容如下::'<,'>le 3
所选文本会立即缩进为3个空格。
使用Visual Line模式将vi中的代码块缩进三个空格:
处于正常模式时,请按以下键:
Vjjjj:le 3
解释您所做的事情:
V
表示开始选择文字。
jjjj
箭头向下4行,突出显示4行。
:
告诉vi您将输入突出显示文本的说明。
le 3
表示缩进突出显示的文本3行。
答案 2 :(得分:14)
答案 3 :(得分:6)
如果我理解正确,你可以使用:
ctrl + V,jj然后是':le n',其中n是要缩进的空格数。
答案 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}}。