2012-03-21 72 views

回答

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 
+0

王子燉牛肉,我添加了'e'標誌,但它仍然中止下一個操作(我刪除EOL空間後調用腳本)。 matchstr代碼只檢查當前行而不檢查整個選擇。 – Reman 2012-03-21 11:55:52

+0

我犯了一個錯誤。我再次檢查。它使用'e'標誌正常工作。謝謝。 – Reman 2012-03-21 12:52:13

1

雖然選擇是活動的(可視化模式),簡單地鍵入

:s/\ \+$//g 

在命令行上,這將成爲

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

命中輸入,任務完成。

如果存在尾隨空格,將會拋出錯誤(E486),但這沒有問題。


編輯1:
要確保你只適用於那裏真的是尾隨空白的出現替代,你可以前綴:s通過:g

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

訣竅:g的一個缺點是它僅在與給定模式匹配的那些行上應用給定命令(s/\ \+$//g)。


編輯2:
事情變得更短,as I recently learned

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

取代匹配是的,我知道,但錯誤是問題,因爲它塊其餘的操作。 – Reman 2012-03-21 11:37:23

+0

@Remonn:查看更新的答案。 – eckes 2012-03-21 11:45:20

+0

':s/\\ + $ // ge'不會發出錯誤信息 – kev 2012-03-21 11:45:26

1

的東西,如果你正在尋找刪除所有空格,最短的命令很可能是

:%s/\s*$// 

適用於整個緩衝

小號替代

/\ S * $匹配任何空白,然後結束行

//

相關問題