2012-03-11 26 views
1

自動命令時,我有以下的autocmd所選文本我.vimrc不要更換執行在VIM

autocmd FocusLost,BufLeave,BufWritePre *.py :exe "normal! ma" | :%s/\s\+$//e | :exe "normal `a" 

此命令的目的,同時保持光標在從我的緩存中刪除所有尾隨空白當前位置。

問題是,當命令被調用並且選擇了一些文本時,文本被替換爲ma。如何修改我的autocmd聲明,以便:

  • 當一些文本被選中
  • 保持文本完整
  • 保持選擇,如果一些文字被選中
  • 保持光標位置是否仍然有效沒有文字被選中

注意:我使用MacVim。

回答

2

您可以使用winsaveview()保存光標位置(和整體窗口「視圖」)。保存的位置(和視圖)可以使用winrestview()進行恢復。

下面的代碼使用緩衝區局部變量b:spacestrip_view存儲視圖(而不是覆蓋標記a):

autocmd FocusLost,BufLeave,BufWrite *.py let b:spacestrip_view=winsaveview()|%s/\s\+$//e|call winrestview(b:spacestrip_view) 
+0

完美的作品......不知道贏(保存|休息)查看()。謝謝! – GaretJax 2012-03-13 10:37:20