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

Regex 如何读取此命令以删除行尾的所有空格,regex,vim,Regex,Vim,我碰巧看到了这一页,里面有很多非常有用而且相当神秘的vim技巧。我已经尝试了其中的一些,我了解正在发生的事情,能够在我的头脑中正确地解析它,以便以后可以重新创建它。不过,下面两个命令很难让我的头脑清醒过来,它们可以删除每行末尾的所有空格 :%s= *$== : delete end of line blanks :%s= \+$== : Same thing 我将%s解释为文件中每一行的字符串替换,但在这之后,我开始迷失在:

我碰巧看到了这一页,里面有很多非常有用而且相当神秘的vim技巧。我已经尝试了其中的一些,我了解正在发生的事情,能够在我的头脑中正确地解析它,以便以后可以重新创建它。不过,下面两个命令很难让我的头脑清醒过来,它们可以删除每行末尾的所有空格

:%s=  *$==                  : delete end of line blanks
:%s= \+$==                  : Same thing
我将
%s
解释为文件中每一行的字符串替换,但在这之后,我开始迷失在:s和regex的一些粗糙变体中。我习惯于看到和使用:s/regex/replacement。但上述情况令人非常困惑


以上这些命令在英语中是什么意思,一步一步?

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

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

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

*E146* 与围绕模式和替换字符串的
'/'
不同,您可以 可以使用任何其他字符,但不能使用字母数字字符、
“\”
“”
'''
。如果您想在搜索模式中包含
“/”
或 替换字符串。示例:

:s+/+//+

我不知道
vim
语法,但在我看来,这些是
sed
样式的替换运算符可以统一替换为任何其他单个字符。在这里它似乎是
=
。因此,如果你在心里用
/
替换
=
,你会得到

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

这对你来说应该更有意义。

谢谢!这就解释了这一点,而且非常有用。我完全不知道除了/之外,你还可以用什么来界定你的正则表达式替换项。如果可以接受这两个答案,我会的。谢谢!