【发布时间】:2012-03-21 11:20:10
【问题描述】:
如何检查所选内容是否有 EOL 空格并仅在有时才将其删除?
我需要删除所选内容的 EOL 空格才能执行其他操作。
我想检查一下是否有,但不知道怎么做。
【问题讨论】:
如何检查所选内容是否有 EOL 空格并仅在有时才将其删除?
我需要删除所选内容的 EOL 空格才能执行其他操作。
我想检查一下是否有,但不知道怎么做。
【问题讨论】:
您可以使用e 标志抑制:substitute 命令中的错误。
所以 eckes 的建议会变成:
:'<,'>s/\ \+$//ge
然后忽略任何错误,并且脚本不会中断。请参阅:help s_flags 了解更多信息。
如果你真的想检查是否有尾随空格,你可以尝试使用类似的东西
if matchstr(getline("."),'\s\+$') == ""
" there is no trailing whitespace
else
" there is some trailing whitespace
endif
【讨论】:
e 标志,但它仍然中止下一个操作(我在删除 EOL 空格后调用脚本)。 matchstr 代码只检查当前行而不是整个选择。
e 标志。谢谢。
虽然选择是活动的(可视模式),但只需输入
: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 标志解决了它,但您的解决方案也很好。
如果您要删除所有空格,最短的命令可能是
:%s/\s*$//
% 适用于整个缓冲区
s 替代
/\s*$ 匹配任何空格,后跟行尾
// 用空替换匹配项
【讨论】: