在VIM中执行autocmd时,请勿替换所选文本

时间:2012-03-11 21:22:15

标签: vim macvim

我的autocmd中有以下.vimrc

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

此命令的目的是从我的缓冲区中删除所有尾随空格,同时将光标保持在当前位置。

问题是,当调用命令并选择一些文本时,文本将被ma替换。如何修改我的autocmd声明以便:

  • 选择某些文字时仍然有用
  • 保持文字完整
  • 如果选择了某些文字,请保留选择
  • 如果未选择任何文字,请保持光标位置

注意:我正在使用MacVim。

1 个答案:

答案 0 :(得分: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)