我的 .vimrc
中有以下 autocmd
:
autocmd FocusLost,BufLeave,BufWritePre *.py :exe "normal! ma" | :%s/\s\+$//e | :exe "normal `a"
此命令的目的是从缓冲区中删除所有尾随空格,同时将光标保持在当前位置。
问题在于,当调用命令并选择某些文本时,该文本会被 ma
替换。如何修改我的 autocmd
声明以便:
- 选择某些文本后仍然有效
- 保持文本完整
- 如果选择了某些文本,则保留选择
- 如果未选择任何文本,则保持光标位置
注意:我使用的是 MacVim。
最佳答案
您可以使用 winsaveview()
保存光标位置(以及整个窗口“ View ”) 。可以使用 winrestview()
恢复保存的位置(和 View ) .
以下代码使用缓冲区局部变量b:spacestrip_view
来存储 View (而不是覆盖标记a
):
autocmd FocusLost,BufLeave,BufWrite *.py let b:spacestrip_view=winsaveview()|%s/\s\+$//e|call winrestview(b:spacestrip_view)
关于vim - 在 VIM 中执行 autocmd 时不要替换选定的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9659005/