如何阅读此命令以删除行尾的所有空格

时间:2010-06-17 03:18:32

标签: regex vim

我在http://rayninfo.co.uk/vimtips.html的这个页面上发生了充满超级有用且相当神秘的vim提示。我已经尝试了其中的一些,我理解发生了什么,足以能够在我脑海中正确地解析它,以便我以后可以重新创建它。一个我很难让我的头部缠绕,但是以下两个命令从每行的末尾删除所有空格

:%s=  *$==                  : delete end of line blanks
:%s= \+$==                  : Same thing

我正在将%s解释为文件中每一行的字符串替换,但在此之后我迷失了看起来像s和regex的一些粗略变化。我习惯于看到和使用:s / regex / replacement。但上述情况令人困惑。

上述命令在英语中逐步表示什么?

2 个答案:

答案 0 :(得分:12)

正则表达式分隔符不必是斜杠,也可以是其他字符。如果您的搜索或替换字符串包含斜杠,这很方便。在这种情况下,我不知道为什么他们使用等号而不是斜线,但你可以假装等于是斜线:

:%s/  *$//     
:%s/ \+$//     

这有意义吗?第一个搜索空格,后跟零个或多个空格,第二个搜索一个或多个空格。每个都锚定在$行的末尾。然后替换字符串为空,因此删除空格。

实际上,我理解你的困惑。如果你看:help :s,你必须向下滚动几页才能找到这个注释:

  

* E146 *

     

而不是围绕模式和替换字符串的'/'   可以使用任何其他字符,但不能使用字母数字字符'\''"'或   '|'。如果要在搜索模式中包含'/',则此选项非常有用   替换字符串。例如:

:s+/+//+

答案 1 :(得分:3)

我不知道vim语法,但我认为这些是sed - 样式替换运算符。在sed中,/(在s/REGEX/REPLACEMENT/中)可以统一替换为任何其他单个字符。这里似乎是=。因此,如果您在心理上将=替换为/,您将获得

:%s/  *$//
:%s/ \+$//

这应该对你更有意义。