保存Markdown文件时,我想删除行尾的单个尾随空格,并将两个或多个尾随空格修剪为两个。
我尝试过
:%s/\([^\s]\)\s$/\1/gc
但是仍然匹配两个尾随空格吗?修剪两个似乎可以:
:%s/\s\{2,}$/ /gc
我在这里想念什么?谢谢!
答案 0 :(得分:2)
在[]
内,所有字符均按字面意义使用。因此,您实际上是在说“所有空白但都会匹配的\
或s
字符。您想要的是\S
(任何非空白字符)。>
此外,您可以使其更简单。 Vim具有特殊的零宽度修饰符\zs
和\ze
来分别设置比赛的起点或终点。因此,您可以执行以下操作:
:%s/\S\zs\s$//gc
细分:
%s/{pattern}//gc
-用确认确认的空字符串替换整个文件中每次出现的{pattern}
\S
-任何非空白字符\zs
-从此处开始比赛\s
-任何空格字符$
-行尾请参阅以下:help
主题:
:h :s
:h :s_flags
:h pattern-atoms
:h /[]
:h /\zs
:h /\ze
:h /\$
答案 1 :(得分:2)
例如,
%s/\s\+$/\=strlen(submatch(0)) >= 2 ? ' ' : ''/e
也就是说,捕获行尾的所有空格,如果匹配长度大于2,则用两个空格代替。我相信这非常简单。另请参见:h sub-replace-expression
。