繁体   English   中英

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

[英]Quickest way to change a pair of parenthesis to brackets in vim

我是 vim 的新手,正在使用这个强大的编辑器发现大量有趣的东西。

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

但是,当括号之间有很多文本时,可能很难找到一对左括号和右括号,特别是因为在更改第一个([那么%命令将不再能够找到相应的) .

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

我个人使用https://github.com/tpope/vim-surround,因为它提供了我可能需要的一切,通读源代码您会发现解决方案并不简单。

一个典型的例子:

Hello("World")

将光标置于()之间,您可以键入c s ( [在正常模式下获得:

Hello["World"]

surround.vim很容易与任何病原体或Vundle安装,我个人更喜欢vundle。 https://github.com/VundleVim/Vundle.vim

添加重要的评论点:

cs([ adds spaces in the block, this should be cs)]

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

这是一个解释:

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

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

使用此插件,您可以(将光标放在( ), cs([上或在( ) 中,以实现您的目标。

使用lh-brackets ,我将使用<mb>(将任何一对类似括号的字符(该对的第一个/最后一个字符上的光标)更改为一对括号。 <mb>{ -> 大括号,以及很快。

对于那些好奇,这是如何它的工作原理-见s:ChangeTo() 在内部,我做了一个%r]``r[ ,并且我对引号字符进行了专门的处理。

在没有任何插件的情况下,可以通过删除括号内的内容并猛拉新括号(从括号内的任何位置)来完成:

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

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

笔记

无需记住键的顺序,只需从删除括号内部开始即可。 那么它只是普通的vim fu。

基于围绕这一问题的几个的SO的(见我的评论在@ MB14答案在这里),我想的是肌肉记忆是这样的:

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

但我真正想做的是:

di(c%[]<Esc>P

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

di("_c%[]<Esc>P

或者(我也在尝试一种“猛拉”方法并想出了)这个:

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

好吧,都不是太糟糕,但我"_c想到,如果我将<leader>c映射到"_c以便我有一个真正的删除并且可以做到这一点,这一切都会好得多:

di(\c%[]<Esc>P

或这个:

yi(\ca([]<Esc>P

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

noremap <leader>c "_c

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM