Vim:替换所有点,但最后一行替换

时间:2012-06-03 12:58:48

标签: vim

我正在寻找一种方法来替换除最后一行之外的所有点。

示例:

Blah - whatever - foo.bar.baz.avi应该成为
Blah - whatever - foo bar bar.avi

由于我在文件中有多行,并且每行中的点数不同,我正在寻找通用解决方案而不是像“替换前X匹配”那样,X是常量。< / p>

3 个答案:

答案 0 :(得分:11)

这似乎可以解决问题:

%s/\.\(.*\.\)\@=/ /g

\@=lookahead。如果有任何后续句号,它只匹配一个句号。

请参阅:help zero-width

答案 1 :(得分:6)

作为第一个答案的变体,您可能更喜欢这种语法:

%s/\.\ze.*\./ /g

让你把断言在搜索运算符之后有一个完整的句号。

答案 2 :(得分:0)

另一种可能有用的学习方法(取代内部视觉选择)将是:
 :g/^/normal $F.hv0:s/\%V\./ /g ^M
使用 CTRL-V 输入^M输入

这意味着:对于每一行(g/^/)类型$F.(转到最后一个点),从视觉上选择从左边的字符到行的开头(hv0),然后仅在视觉选择(:s/\./ /g^M)内替换点(\%V)。