我是vim的新手,在发现大量有趣的东西的过程中,人们可以使用这个强大的编辑器。
我需要经常做的一件事是将文本中的一对括号更改为方括号(例如将( (a+b+c) )
更改为[ (a+b+c) ]
)或反之亦然。我现在通过手动将两个字符(
和)
更改为[
和]
来执行此操作。
但是,当括号之间有大量文本时,可能很难找到一对开括号和右括号,特别是因为在将第一个(
更改为[
后,{ {1}}命令将无法再找到相应的%
。
我想知道是否有更好更快的方式进行此类更改?
答案 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
以便我有一个真正的删除},这一切都会好得多em>并且可以这样做:
di(\c%[]<Esc>P
或者这个:
yi(\ca([]<Esc>P
两者都非常接近我想做的事情,思考过程给了我$MYVIMRC
中最有价值的一句话:
noremap <leader>c "_c