【问题标题】:Remove EOL spaces of selection only if there are仅在存在时删除 EOL 选择空间
【发布时间】:2012-03-21 11:20:10
【问题描述】:

如何检查所选内容是否有 EOL 空格并仅在有时才将其删除?

我需要删除所选内容的 EOL 空格才能执行其他操作。
我想检查一下是否有,但不知道怎么做。

【问题讨论】:

    标签: vim space eol


    【解决方案1】:

    您可以使用e 标志抑制:substitute 命令中的错误。 所以 eckes 的建议会变成:

    :'<,'>s/\ \+$//ge
    

    然后忽略任何错误,并且脚本不会中断。请参阅:help s_flags 了解更多信息。

    如果你真的想检查是否有尾随空格,你可以尝试使用类似的东西

    if matchstr(getline("."),'\s\+$') == ""
        " there is no trailing whitespace
    else
        " there is some trailing whitespace
    endif
    

    【讨论】:

    • Prince Goulash,我添加了 e 标志,但它仍然中止下一个操作(我在删除 EOL 空格后调用脚本)。 matchstr 代码只检查当前行而不是整个选择。
    • 我犯了一个错误。我又检查了一遍。它适用于 e 标志。谢谢。
    【解决方案2】:

    虽然选择是活动的(可视模式),但只需输入

    :s/\ \+$//g
    

    在命令行上会变成

    '<,'>s/\ \+$//g
    

    点击Enter,任务完成。

    如果有没有尾随空格,则会抛出错误(E486),但这没问题。


    编辑 1:
    为确保仅在确实出现尾随空格的情况下应用替换,您可以在 :s 前加上 :g

    :g/\ \+$/s/\ \+$//g
    

    :g 的技巧在于它仅将给定命令 (s/\ \+$//g) 应用于与给定模式匹配的行。


    编辑 2:
    事情变得更短了,as I recently learned

    :g/\s\+$/s///g
    

    【讨论】:

    • 是的,我知道,但错误是问题所在,因为它阻止了其余的操作。
    • 谢谢埃克斯。我通过添加 e 标志解决了它,但您的解决方案也很好。
    【解决方案3】:

    如果您要删除所有空格,最短的命令可能是

    :%s/\s*$//
    

    % 适用于整个缓冲区

    s 替代

    /\s*$ 匹配任何空格,后跟行尾

    // 用空替换匹配项

    【讨论】:

      猜你喜欢
      • 2022-08-13
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 2018-08-05
      • 2013-08-11
      • 2015-05-06
      • 1970-01-01
      相关资源
      最近更新 更多