我在vim中有以下字符串:
if [ a == 100 ]
我想将其更改为:
if (( a==100 ))
我想用括号替换括号,并保持内容原样, 我尝试:
:%s/if \[ .* \]/if (( .* ))/g
然后我得到了
if (( .* ))
如何获取原始内容? 预先谢谢你们。 :)
答案 0 :(得分:4)
不是要反驳Rafael的回答,而是作为处理周围字符对的另一种也许更通用的解决方案:这就是Tim Pope出色的vim-surround插件的用途。
第2步将您的输入更改为此:
if ( a == 100 )
在第4步之后,它看起来像这样:
if (( a == 100 ))
编辑:@voger的快捷方式
第3步和第4步可以合并为更快的 ysa))。
答案 1 :(得分:3)
您可以使用:
%s/if \[\(.*\)\]/if ((\1))/
这使用反向引用,即捕获元括号之间的内容,并根据捕获顺序使用\<number>
投射捕获的内容。
您真的不需要g
标志,因为shell脚本不太可能在同一行上有多个if
。
答案 2 :(得分:0)
这是一种解决方案(易于阅读),在这种情况下,您不仅必须在某些行中执行更改,而且还需要在数十行中使手动操作变得无聊。
使用宏:
let @a="f[r(f]r)"
f[ ................ jump to the [
r( ................ replace with (
f] ................ jump to ]
r) ................ replace with )
跳到需要更改的行,然后键入@a
使用全局命令:
:g/if \[/normal f[r(f]r)
:g/if \[/normal @a
基本上,我们在宏和全局命令中都使用相同的命令。 请注意,第二个全局变量使用上面定义的'a'宏。