我希望VIM刪除所有尾隨空格自動保持在其當前位置的光標,所以我用下面的自動命令在我的vimrc與光標保持其位置VIM替代
autocmd BufWritePre *
\ exec "%s/\\s\\+$//e" | exec 'normal ``'
它運作良好,正常。但如果自上次寫入以來沒有任何更改,則在執行最後一次寫入時,'w'命令將導致光標移動到最後一個位置。如果我希望光標無條件地保持其位置,我該怎麼做。
BR,若塵
我希望VIM刪除所有尾隨空格自動保持在其當前位置的光標,所以我用下面的自動命令在我的vimrc與光標保持其位置VIM替代
autocmd BufWritePre *
\ exec "%s/\\s\\+$//e" | exec 'normal ``'
它運作良好,正常。但如果自上次寫入以來沒有任何更改,則在執行最後一次寫入時,'w'命令將導致光標移動到最後一個位置。如果我希望光標無條件地保持其位置,我該怎麼做。
BR,若塵
您可以使用命令silent!
,以免影響您的命令的休息造成失敗的匹配錯誤:
exec "silent! %s/\\s\\+$//e" | exec 'normal ``'
見:help silent
。
可以手動先設置標記通過: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'
可避免或者使用:update
命令來執行寫入書面文件,如果文件沒有改變, ,或者檢查autocmd中的「修改」選項,如autocmd BufWritePre * if &modified | ... | endif
。