如何仅替换选定的可视块而不是Vim中的行

时间:2018-01-08 07:07:12

标签: vim

我们假设我有文字。

1 2 3 4 5 6 7 8 9

然后我从5到9中选择visual block

        |-------| Select visual block          
1 2 3 4 5 6 7 8 9

运行替换命令:'<,'>s/ /, /g

我期待以下。

1 2 3 4 5, 6, 7, 8, 9

然而,真正的结果是

1, 2, 3, 4, 5, 6, 7, 8, 9

替换命令似乎适用于选择visual block的整行,而不仅仅是块。

是否有任何方法可以将replace命令仅应用于选定的visual block

2 个答案:

答案 0 :(得分:5)

在我看来,这种行为是vim中的一个错误。你可以像这样解决它:

:'<,'>s/\%V \%V/, /g

\%V仅在当前视觉区域内匹配。

答案 1 :(得分:2)

只是为了澄清一件事:other命令是 linewise ,这意味着它将在范围内的上执行替换。

顺便说一句,单引号后跟位置符号如:s表示可视块的起始'<表示您使用'a命令标记的

如果要引用精确位置(列),则需要在位置符号前使用`而不是ma。例如,您可以通过“&lt;”移动到最近选择的可视块的起始位置(实际列),其中'只能移动到该行的开头。但这在'<命令中不起作用,如上所述,替换命令是linewise。