仅删除 vim 中的单个尾随空格
Remove only single trailing spaces in vim
保存 Markdown 文件时,我想删除行尾的单个尾随空格,trim将两个或多个尾随空格删除为两个。
我试过了
:%s/\([^\s]\)\s$//gc
但这仍然匹配两个尾随空格?修剪两个,但似乎有效:
:%s/\s\{2,}$/ /gc
我在这里错过了什么?谢谢!
里面[]
,所有的字符都是按字面意思来的。因此,您实际上是在说“除 \
或 s
之外的任何字符”,全白 space 将匹配。您想要的是 \S
(任何 non-white space 个字符)。
此外,您可以简化此操作。 Vim 有特殊的 zero-width 修饰符 \zs
和 \ze
分别设置匹配的起点或终点。因此,您可以执行以下操作:
:%s/\S\zs\s$//gc
细分:
%s/{pattern}//gc
- 用空字符串替换整个文件中每个出现的 {pattern}
,并确认
\S
- 任意 non-whitespace 字符
\zs
- 从这里开始比赛
\s
- 任何白色space字符
$
- 行尾
查看以下 :help
个主题:
:h :s
:h :s_flags
:h pattern-atoms
:h /[]
:h /\zs
:h /\ze
:h /$
例如,
%s/\s\+$/\=strlen(submatch(0)) >= 2 ? ' ' : ''/e
也就是说,捕获行尾的所有空格,如果匹配长度大于 2,则将其替换为两个空格。我认为非常简单。另见 :h sub-replace-expression
。
保存 Markdown 文件时,我想删除行尾的单个尾随空格,trim将两个或多个尾随空格删除为两个。
我试过了
:%s/\([^\s]\)\s$//gc
但这仍然匹配两个尾随空格?修剪两个,但似乎有效:
:%s/\s\{2,}$/ /gc
我在这里错过了什么?谢谢!
里面[]
,所有的字符都是按字面意思来的。因此,您实际上是在说“除 \
或 s
之外的任何字符”,全白 space 将匹配。您想要的是 \S
(任何 non-white space 个字符)。
此外,您可以简化此操作。 Vim 有特殊的 zero-width 修饰符 \zs
和 \ze
分别设置匹配的起点或终点。因此,您可以执行以下操作:
:%s/\S\zs\s$//gc
细分:
%s/{pattern}//gc
- 用空字符串替换整个文件中每个出现的{pattern}
,并确认\S
- 任意 non-whitespace 字符\zs
- 从这里开始比赛\s
- 任何白色space字符$
- 行尾
查看以下 :help
个主题:
:h :s
:h :s_flags
:h pattern-atoms
:h /[]
:h /\zs
:h /\ze
:h /$
例如,
%s/\s\+$/\=strlen(submatch(0)) >= 2 ? ' ' : ''/e
也就是说,捕获行尾的所有空格,如果匹配长度大于 2,则将其替换为两个空格。我认为非常简单。另见 :h sub-replace-expression
。