2015-03-03 48 views
0

我希望VIM刪除所有尾隨空格自動保持在其當前位置的光標,所以我用下面的自動命令在我的vimrc與光標保持其位置VIM替代

autocmd BufWritePre * 
\ exec "%s/\\s\\+$//e" | exec 'normal ``' 

它運作良好,正常。但如果自上次寫入以來沒有任何更改,則在執行最後一次寫入時,'w'命令將導致光標移動到最後一個位置。如果我希望光標無條件地保持其位置,我該怎麼做。

BR,若塵

回答

1

您可以使用命令silent!,以免影響您的命令的休息造成失敗的匹配錯誤:

exec "silent! %s/\\s\\+$//e" | exec 'normal ``' 

:help silent

1

可以手動先設置標記通過:normal! m',但它更好地保存整個視圖,如跳回到痕剛恢復光標位置,但不一定是窗口中的整個視圖(如果滾動發生)。

autocmd BufWritePre * 
\ let g:saveview = winsaveview() | 
\ %s/\s\+$/e" | 
\ call winrestview(g:saveview) 

這仍重挫您的搜索模式(其包裝在:function可以修復)受到影響。

我會建議使用經過測試且更易於配置的插件。巧合的是,我已經開發了DeleteTrailingWhitespace plugin,可以通過下面的配置做自動的,無條件的刪除:

let g:DeleteTrailingWhitespace = 1 
let g:DeleteTrailingWhitespace_Action = 'delete' 
0

可避免或者使用:update命令來執行寫入書面文件,如果文件沒有改變, ,或者檢查autocmd中的「修改」選項,如autocmd BufWritePre * if &modified | ... | endif