代码之家  ›  专栏  ›  技术社区  ›  whaley

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

  •  6
  • whaley  · 技术社区  · 14 年前

    我在这一页上偶然发现了很多非常有用而且相当神秘的VIM提示 http://rayninfo.co.uk/vimtips.html . 我已经尝试了其中的一些方法,并且我了解正在发生的事情,以便能够在我的头脑中正确地解析它,以便稍后可以重新创建它。其中一个是我很难让我的头绕起来,不过下面两个命令可以删除每行末尾的所有空格

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

    我正在翻译 %s 作为文件中每一行的字符串替换,但在那之后,我将迷失在看起来像是:s和regex的一些粗糙变化中。我习惯于使用:s/regex/replacement。但是上面的内容非常混乱。

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

    2 回复  |  直到 7 年前
        1
  •  12
  •   John Kugelman Michael Hodel    14 年前

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

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

    这有道理吗?第一个搜索的是后面跟零个或多个空格的空格,第二个搜索的是一个或多个空格。每一个锚定在线的末端, $ . 然后替换字符串是空的,所以空格被删除。

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

    *E146*

    而不是 '/' 它包围了模式和替换字符串, 可以使用任何其他字符,但不能使用字母数字字符, '\' , '"' '|' . 如果您想包括 “/” 在搜索模式中或 替换字符串。例子:

    :s+/+//+
    
        2
  •  3
  •   David Z    14 年前

    我不知道 vim 语法,但在我看来 sed -样式替换运算符。在 塞德 , the / s/REGEX/REPLACEMENT/ )可以统一替换为任何其他单个字符。好像在这儿 = . 所以如果你在精神上取代 = 具有 / 你会得到

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

    这对你更有意义。