我经常在列中有文本,需要替换一些内容而不破坏同一行上的类似内容......一个简单的例子如下:
假设我已经使用 vim 可视块模式以灰色突出显示文本,并且想要替换 80
与 81
;但是,我只希望在突出显示的视觉块中进行替换。
我已经试过cntlv : s/80/81/g
;但是,这会替换视觉块内部和外部的文本。 (基于 Randy 的反馈,这是因为 : s
是一个逐行命令)。
我知道我可以在这个特定实例中使用逐行视觉块替换( Shiftv : s/80\.1/81.1/g
);但是,我正在尝试为在非逐行视觉块中无法轻松替换的问题找到通用解决方案(这不是视觉块模式应该帮助解决的那种问题吗?)。需要确认的答案,如 : s/80/81/gc
,不是我要找的。
为了清楚起见,我将重申这个问题:如何替换 80
与 81
通过使用 vim 的视觉块模式突出显示?
最佳答案
您需要添加 \%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 编辑:明确的解决方案是使用
: s/\%V8\%V0/81/g
关于search - vim 搜索和替换仅限于视觉 block 模式下的突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6230494/