在VIM中围绕代码包装代码块

时间:2013-06-24 17:36:51

标签: vim

是否可以在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;
        }
    }
}

4 个答案:

答案 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


当然,其他人推荐的插件有更多功能,所以你也应该看看它们。