在Vim中突出显示的文本周围添加括号


14

Vim中是否有功能允许在突出显示的文本周围添加括号?

例如,如果我n = getchar()在中突出显示 if (n = getchar() == '\n'),我想在其周围加上括号。

Answers:


18

您需要一个很棒且必备的插件Surround。然后,如果您选择文本并键入Sb(大括号)或S)(请注意大写的S!),它将很乐意地执行您想要的操作。

实际上,它可以做很多事情:各种引号,标签等。它允许您将光标放在双引号中,并通过键入以下内容将双引号更改为单引号:cs"'(change-surround "to ')。或者,您可以通过键入ds"(delete-surround ")完全删除引号。

通过链接阅读文档,这真的很棒!


1
但是,您没有说明如何使用选择。我被带到这里是因为它并不立即显而易见。
JackHasaKeyboard

@JackHasaKeyboard,这是什么意思,我没有说明如何通过选择进行操作?我的答案中的第二个句子说:>然后,如果您选择文本并输入sb(大括号)或,它将很乐意地执行您想要的操作s)
德米特里·弗兰克

1
原来如此 但是,对我不起作用,单击s只会删除选择并进入插入模式。
JackHasaKeyboard 2013年

1
这意味着我在答案中提到的“ surround”插件未正确安装。
德米特里·弗兰克

确实很棒。我已经使用了一段时间,可以打赌。
biocyberman

20

除了Dmitry对Surround 插件的建议之外,可以使用以下命令在高亮显示的文本周围添加括号:

xi()<Esc>P

您可以使用(例如)\s通过在~/.vimrc文件中添加以下内容,以可视模式设置地图:

xnoremap <leader>s xi()<Esc>P

1
这看起来像一个不错的简单解决方案。如果以后找不到任何与此相关的问题,相对于其他插件,我会更喜欢。谢谢!
Zelphir Kaltstahl '16

3
这是一个很好的解决方案,但是还不如使用Surround插件完整,因为如果您选择整行(使用V而不是v),它将无法正常工作。在这种情况下,它只是将线条粘贴在您的括号下方。
罗汉·奥顿

1

lh-brackets可以简单地绑定(以用括号包围选择。与环绕它不遵循VIM通常键绑定的理念一样。而是需要更少的键。

否则,有许多方法可以进行。如果您不介意弄乱未命名的寄存器,也可以使用s(^R")<esc>^RCTRL-R


0

在dotancohens答案的基础上,我在以下内容中添加了以下内容.vimrc

xnoremap <leader>( <ESC>`>a)<ESC>`<i(<ESC>

您可以轻松地为[],{}等进行类似的映射。它可以通过跳到结束可视模式后隐式设置的开始和结束标记来工作。这样,选择整行将在第一行/最后一行的开始/结束处添加括号。它不会覆盖您的yank寄存器;它将光标留在打开括号之前。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.