2

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

4 回答 4

6

Vim 没有内置的周边系统。我建议你看看 Tim Pope 出色的环绕声插件。然后假设你被定位在if你可以这样做:

Vj%SBIwhile (a > 10)
  • 选择Vj%块+条件。
  • SB{用,包围选定的文本}(用块读取包围)
  • 在新插入块的开头插入循环文本。

你不需要环绕来做到这一点。你可以用普通的香草vim来做。

Vj%>`]o}<esc>g;g;Owhile (a > 10)<cr>{<esc>

但是我更喜欢使用环绕,因为它是一个非常方便的插件。

如需更多帮助,请参阅:

:h %
:h g;
:h `]
于 2013-06-24T19:20:16.120 回答
1

您可以使用 vim 插件环绕.vim 。它允许您将线或片段包装在块中(并更改包装对)。

于 2013-06-24T19:16:26.803 回答
0

检查像 Snipmate 这样的东西,他们可能有能力用 snippit 围绕视觉选择的代码。

http://www.vim.org/scripts/script.php?script_id=2540

snipMate-visual-selection-support有一个特殊的占位符,叫做 {VISUAL}。如果您直观地选择文本,则按 Vim 切换到插入模式。您将展开的下一个片段将 {VISUAL} 替换为之前选择的文本

于 2013-06-24T17:45:30.157 回答
0

您可以在 vanilla Vim 中进行映射以执行此操作,例如:

:imap <S-F2> <Esc>j>>j>%%o<C-D>}

键入周围代码的左大括号后使用映射键。不用说,您应该更改<S-F2>为您喜欢的键盘映射。


按键顺序分解:

Esc: 进入普通模式

j>>:将光标移动到下一行(在您的示例中为该if行)并缩进。

j>%:将光标移动到左大括号的行if,从那里缩进到匹配的大括号(光标将跳回左大括号)

%转到右括号if

o在右大括号后添加一个新行,然后进入插入模式。

CTRL+ D: unindent (撤销 smartindent 的效果)

}为环绕代码添加右大括号(在您的示例中,while


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

于 2013-06-24T19:49:59.740 回答