vim - 在 VIM 中执行 autocmd 时不要替换选定的文本

标签 vim macvim

我的 .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/

上一篇:PHP 兼容性问题

下一篇:PHP mail() 错误 500

相关文章:

java - 使用java库

vim - 如何使用VIM将编辑文件复制到相同位置但名称不同

fonts - MacVim 中的 Inconsolata 斜体

vim - 终端 session 恢复后没有语法高亮显示

ruby-on-rails - 将 vim 与 ruby​​/ruby on rails 结合使用的提示和技巧

vim - 是否可以在 Vim 中重新映射 Ex 命令(重新映射 :Ack to :ack)?

vim - 如何 "rewrite"现有的 vim 键绑定(bind)?

vim - 在外部编辑器中编辑IPython单元

c++ - 在vim中分屏执行C

Vim 文件内命令