首页 > 解决方案 > 仅删除 vim 中的单个尾随空格

问题描述

保存 Markdown 文件时,我想删除行尾的单个尾随空格并将两个或多个尾随空格修剪为两个。

我试过了

:%s/\([^\s]\)\s$/\1/gc

但这仍然匹配两个尾随空格?修剪两个,但似乎有效:

:%s/\s\{2,}$/  /gc

我在这里想念什么?谢谢!

标签: regexvim

解决方案


在里面[],所有字符都按字面意思表示。因此,您实际上是在说“任何字符但\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 /\$

推荐阅读