我想用2替换3个whitte空格,也就是说将text1更改为text2。
的text1
test1
test2
test3
text2的
test1
test2
test3
我的意思是:第一组是三个白色空白,它将匹配并替换为两个白色空白;第二组保持不变。
可能是%s///g
。
1.什么是正确的正则表达式?
%s/^\(\s\{3\}\)\w\+/\1 /g
2.为什么\s\{2\}
或\s\{2}
不能代表两个白色空白?
答案 0 :(得分:1)
您实际上可以使用
%s/^\s\{3}\(\w\+\)/ \1/g
或使用" lookahead":
%s/^\s\{3}\(\w\+\)\@=/ /g
请注意,\s\{2}
实际上匹配2个空格,如果在正则表达式模式部分中使用的话。它不能用于替换模式(/g
之前的模式),因为它需要文字和反向引用(如\1
)。
此外,没有必要逃避限制量词}
中的结束\{3}
,因为Vim足够聪明地理解}
属于量词构造,而不是文字}
。
更新:如果要将空格与行上的任何非空白字符匹配,请使用\S
速记字符类而不是\w
赢得'匹配.
或,
:
%s/^\s\{3}\(\S\+\)/ \1/g
答案 1 :(得分:1)
对不起,我无法发表评论。我更喜欢这里的负面预测:
%s/^ \{3\} \@!/ /g
我也不确定,如果你只想匹配空白或任何类型的白色空白。
%s/^\s\{3\} \@!/ /g