我在http://rayninfo.co.uk/vimtips.html的这个页面上发生了充满超级有用且相当神秘的vim提示。我已经尝试了其中的一些,我理解发生了什么,足以能够在我脑海中正确地解析它,以便我以后可以重新创建它。一个我很难让我的头部缠绕,但是以下两个命令从每行的末尾删除所有空格
:%s= *$== : delete end of line blanks
:%s= \+$== : Same thing
我正在将%s
解释为文件中每一行的字符串替换,但在此之后我迷失了看起来像s和regex的一些粗略变化。我习惯于看到和使用:s / regex / replacement。但上述情况令人困惑。
上述命令在英语中逐步表示什么?
答案 0 :(得分:12)
正则表达式分隔符不必是斜杠,也可以是其他字符。如果您的搜索或替换字符串包含斜杠,这很方便。在这种情况下,我不知道为什么他们使用等号而不是斜线,但你可以假装等于是斜线:
:%s/ *$//
:%s/ \+$//
这有意义吗?第一个搜索空格,后跟零个或多个空格,第二个搜索一个或多个空格。每个都锚定在$
行的末尾。然后替换字符串为空,因此删除空格。
:help :s
,你必须向下滚动几页才能找到这个注释:
* E146 *
而不是围绕模式和替换字符串的
'/'
可以使用任何其他字符,但不能使用字母数字字符'\'
,'"'
或'|'
。如果要在搜索模式中包含'/'
,则此选项非常有用 替换字符串。例如::s+/+//+
答案 1 :(得分:3)
我不知道vim
语法,但我认为这些是sed
- 样式替换运算符。在sed
中,/
(在s/REGEX/REPLACEMENT/
中)可以统一替换为任何其他单个字符。这里似乎是=
。因此,如果您在心理上将=
替换为/
,您将获得
:%s/ *$//
:%s/ \+$//
这应该对你更有意义。