vim搜索和替换仅限于可视块模式中的突出显示

时间:2011-06-03 17:24:30

标签: search vim replace

我经常在列中添加文本,需要更换一些东西,而不需要在同一行中删除类似的东西......下面是一个简单的例子:

vim visual block-mode screenshot

假设我使用vim可视化块模式以灰色突出显示文本,并希望将80替换为81;但是,我只想在突出显示的视觉块中进行替换。

我已经尝试过 Cntl v : s/80/81/g;但是,它会替换视觉块内部的文本和外部。 (根据Randy的反馈,这是因为: s是一个逐行命令。)

我知道我可以在这个特定的实例中使用逐行的视觉块替换( Shift v : s/80\.1/81.1/g);但是,我试图找到一个通用的解决方案,在非线性视觉块中没有简单的替换方法(这不是视觉块模式应该帮助解决的那种问题吗?)。需要确认的答案如: s/80/81/gc,不是我要找的。

为了清楚起见,我将重申这个问题:如何使用vim的可视块模式突出显示将80替换为81

3 个答案:

答案 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