1

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

我需要删除选择的 EOL 空间才能执行其他操作。
我想检查是否有但不知道该怎么做。

4

3 回答 3

1

在选择活动(视觉模式)时,只需键入

:s/\ \+$//g

在命令行上,这将成为

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

命中Enter,任务完成。

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


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

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

诀窍:g在于它s/\ \+$//g仅在与给定模式匹配的那些行上应用给定命令 ()。


编辑 2:
事情变得更短,正如我最近了解到的那样

:g/\s\+$/s///g
于 2012-03-21T11:25:11.010 回答
1

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

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

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

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

if matchstr(getline("."),'\s\+$') == ""
    " there is no trailing whitespace
else
    " there is some trailing whitespace
endif
于 2012-03-21T11:43:19.417 回答
1

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

:%s/\s*$//

%适用于整个缓冲区

s代替

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

//用空替换匹配项

于 2012-03-21T14:26:32.807 回答