regex - 仅删除 vim 中的单个尾随空格
问题描述
保存 Markdown 文件时,我想删除行尾的单个尾随空格并将两个或多个尾随空格修剪为两个。
我试过了
:%s/\([^\s]\)\s$/\1/gc
但这仍然匹配两个尾随空格?修剪两个,但似乎有效:
:%s/\s\{2,}$/ /gc
我在这里想念什么?谢谢!
解决方案
在里面[]
,所有字符都按字面意思表示。因此,您实际上是在说“任何字符但\
或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 /\$
推荐阅读
- pandas - 将数据集重新整形为长格式
- angular - 最初为输入提供值时,电话屏蔽不起作用
- python - 使用kali linux在python中遇到问题
- android - 无法在 android 中使用 AsyncTask 从 url 获取内容?
- linux - 使用参数访问 JQ 变量
- sqlite - 烧瓶应用程序中的 SQL Alchemy Query 用于多对多关系
- spring - IllegalStateException:无法将“StandardMultipartHttpServletRequest$StandardMultipartFile”类型的值转换为所需的“java.lang.String”类型
- firebase - 错误:没有为类“对象”定义吸气剂“文档”。- “对象”来自“飞镖:核心”
- c++ - boost::qi 按最后一个顺序项评估结果
- angular - 使用 Angular。当我单击链接时,我想打开新页面来显示,而不是显示在链接下方