我经常在列中添加文本,需要更换一些东西,而不需要在同一行中删除类似的东西......下面是一个简单的例子:
假设我使用vim可视化块模式以灰色突出显示文本,并希望将80
替换为81
;但是,我只想在突出显示的视觉块中进行替换。
我已经尝试过 Cntl v : s/80/81/g
;但是,它会替换视觉块内部的文本和外部。 (根据Randy的反馈,这是因为: s
是一个逐行命令。)
我知道我可以在这个特定的实例中使用逐行的视觉块替换( Shift v : s/80\.1/81.1/g
);但是,我试图找到一个通用的解决方案,在非线性视觉块中没有简单的替换方法(这不是视觉块模式应该帮助解决的那种问题吗?)。需要确认的答案如: s/80/81/gc
,不是我要找的。 p>
为了清楚起见,我将重申这个问题:如何使用vim的可视块模式突出显示将80
替换为81
?
答案 0 :(得分:26)
您需要在模式中添加\%V
。来自:help \%V
:
Match inside the Visual area. When Visual mode has already been
stopped match in the area that gv would reselect.
This is a /zero-width match. To make sure the whole pattern is
inside the Visual area put it at the start and end of the pattern.
OP EDIT :显式解决方案是使用: s/\%V8\%V0/81/g
答案 1 :(得分:6)
解决方案显然是\%V正则表达式原子,但请注意,这仍然有点儿错误。
更新:这不是错误。这个thread解释了这种行为。
答案 2 :(得分:5)
视觉选择区should可通过%V识别
:'<,'>s/\%V80/81/g