在vim中将一对括号更改为括号的最快方法

时间:2014-08-20 12:44:25

标签: vim matching parentheses

我是vim的新手,在发现大量有趣的东西的过程中,人们可以使用这个强大的编辑器。

我需要经常做的一件事是将文本中的一对括号更改为方括号(例如将( (a+b+c) )更改为[ (a+b+c) ])或反之亦然。我现在通过手动将两个字符()更改为[]来执行此操作。

但是,当括号之间有大量文本时,可能很难找到一对开括号和右括号,特别是因为在将第一个(更改为[后,{ {1}}命令将无法再找到相应的%

我想知道是否有更好更快的方式进行此类更改?

6 个答案:

答案 0 :(得分:29)

我个人使用https://github.com/tpope/vim-surround,因为它提供了我所需要的一切,通过阅读源代码,您可以看到解决方案非常重要。

一个典型的例子:

Hello("World")

将光标放在()之间,你可以输入 c s [在正常模式下得到:

Hello["World"]

surround.vim很容易安装Pathogen或Vundle,我个人更喜欢vundle。 https://github.com/VundleVim/Vundle.vim

答案 1 :(得分:9)

我会这样做:%r]^or[

以下是解释:

  • f( - 将光标放在您想要更改的第一个括号上(如果它尚未存在)。
  • % - 跳转到匹配的括号。
  • r] - 用括号替换括号。
  • CTRL-O - 跳回第一个括号。
  • r[ - 用括号替换括号。

答案 2 :(得分:5)

surround.vim https://github.com/tpope/vim-surround

使用此插件,您可以(光标在(上或cs([内),{{1}}来实现您的目标。

答案 3 :(得分:5)

使用lh-brackets,我会使用<m-b>(将任何一对类似括号的字符(光标位于该对的第一个/最后一个字符上)更改为一对括号。 <m-b>{ - &gt;大括号等等。

对于好奇的人来说,这是how它有效 - 请参阅s:ChangeTo()。在内部,我做%r]``r[,我对引号字符有专门的处理。

答案 4 :(得分:1)

没有任何插件,可以通过删除括号内的内容和新括号中的yanking(从括号内的任何位置)来完成:

di(a[]<esc>P%2X

显然更关键的是使用surround但不是那么多; - )

注意

无需记住键的顺序,只需从删除括号内部开始。然后它就是普通的vim fu。

答案 5 :(得分:0)

基于这个问题的一些问题(参见我在@ mb14回答here中的评论),我正在考虑记忆这样的事情:

di(a<bkspace><bkspace>[]<Esc>P

但我真正希望做的是:

di(c%[]<Esc>P

您会看到不能这样做,因为c会将()括号放入您的0注册表中,因此您实际上需要这样做:

di("_c%[]<Esc>P

或(我也尝试了'笨拙'的方法并提出来):

yi(ca([]<Esc>"0P

好吧,两者都不是太糟糕,但是我发现,如果我将<leader>c映射到"_c以便我有一个真正的删除并且可以这样做:

di(\c%[]<Esc>P

或者这个:

yi(\ca([]<Esc>P

两者都非常接近我想做的事情,思考过程给了我$MYVIMRC中最有价值的一句话:

noremap <leader>c "_c