替换某些列之间的所有不匹配字符

时间:2012-04-10 10:56:34

标签: regex search vim pattern-matching substitution

我试图在某些列之间(搜索之后)在一行中替换所有不匹配的字符。

示例 的:
搜索可以是一切 在下面的示例中,search = test
非匹配字符的替换字符:空格。

我想在第10列和第30列之间替换“test的所有字符
第10列和第30列用|

表示
before:  djd<aj.testjal.kjetestjaja testlala ratesttsuvtesta !<-a-
                  |                   |   
after:   djd<aj.test       test     testlala ratesttsuvtesta !<-a-

我怎么能意识到这一点?

2 个答案:

答案 0 :(得分:3)

在该行上使用以下替换命令。

:s/\(test\)\zs\|\%>9v\%<31v./\=submatch(1)!=''?'':' '/g

如果使用视觉选择指定了列范围,请运行

:'<,'>s/\(test\)\zs\|\%V./\=submatch(1)!=''?'':' '/g

答案 1 :(得分:1)

一种方法可能是使用可视模式(control + v)

选择合适的列范围

选择后,可以使用(see this question

完成搜索和替换
 %s/\%Vfoo/bar/g

可以在此处找到非测试的正则表达式:Regular expression to match a line that doesn't contain a word?