是否可以在VIM中围绕一段代码包装代码块?例如,如果我想在下面包含一个while循环,我怎么能这样做而不必滚动到代码的底部来添加右括号:
if(z > y)
{
switch(x)
{
case 1:
addPoint();
break;
case 2:
addValue();
break;
}
}
这是以后代码的样子:
while (a > 10)
{
if(z > y)
{
switch(x)
{
case 1:
addPoint();
break;
case 2:
addValue();
break;
}
}
}
答案 0 :(得分:4)
Vim没有内置的周围系统。我想你看看Tim Pope的优秀surround插件。然后假设您位于if
,您可以执行此操作:
Vj%SBIwhile (a > 10)
Vj%
选择块+条件。SB
使用{
,}
围绕选定的文字(使用块读取环绕声)你不需要环绕声来做这件事。你可以用普通的香草vim来做。
Vj%>`]o}<esc>g;g;Owhile (a > 10)<cr>{<esc>
但是我更喜欢使用环绕声,因为它是一个非常方便的插件。
如需更多帮助,请参阅:
:h %
:h g;
:h `]
答案 1 :(得分:1)
您可以使用vim插件surround.vim。它允许您在块中包裹行或片段(并更改包装对)。
答案 2 :(得分:0)
检查像Snipmate这样的东西,他们有可能用snippit围绕视觉选择的代码。
http://www.vim.org/scripts/script.php?script_id=2540
snipMate-visual-selection-support 有一个名为{VISUAL}的特殊占位符。如果您在视觉上选择了文本,请按Vim 切换到插入模式。您要扩展的下一个代码段将被替换 {VISUAL}以前选择的文字
答案 3 :(得分:0)
您可以在vanilla Vim中进行映射,例如:
:imap <S-F2> <Esc>j>>j>%%o<C-D>}
在为周围代码键入左括号后使用映射键。不言而喻,您应该将<S-F2>
更改为您喜欢的键盘图。
按键顺序细分:
Esc :进入普通模式
j &gt; &gt; :将光标移动到下一行(在您的示例中为if
行)并缩进
j &gt; %:将光标移动到if
左括号的行,从那里缩进到匹配的大括号(光标将跳回到左括号)
%转到if
的右大括号
o 在右括号后添加一个新行,然后进入插入模式。
CTRL + D :unindent(撤消smartindent的效果)
} 为环绕声代码添加右括号(在您的示例中为while
)
当然,其他人推荐的插件有更多功能,所以你也应该看看它们。