【问题标题】:Vim: Combining autocmd?Vim:结合 autocmd?
【发布时间】:2009-08-21 17:14:45
【问题描述】:

我需要在 vim 中执行两个 autocmd 事件的逻辑与。基本上,当 FileType 为 tex 时,该命令必须在 InsertLeave 上运行。看起来这应该可以工作(在 .vimrc 中):

autocmd FileType tex :autocmd InsertLeave :w

但事实并非如此。嵌套选项似乎也没有帮助,即使手册表明它应该这样做。

很容易做一个逻辑或:

autocmd BufEnter,BufLeave ...

进行逻辑与一定不会太难。

【问题讨论】:

  • 你应该以ZyX的解决方案为答案,因为它解决了Eevee的本地缓冲区问题。
  • 完成了,但我相信你的话。我似乎记得本地缓冲区的问题,但是我已经好几年没有写过latex了,并且在2年前切换到了emacs。

标签: vim autocmd


【解决方案1】:

我对@Eevee 的回答进行了更正:要使自动命令仅适用于一个缓冲区,您应该使用

augroup TexAutoWrite
    autocmd FileType tex :autocmd! TexAutoWrite InsertLeave <buffer> :update
augroup END

,参见`:h autocmd-buflocal。

【讨论】:

  • 这太棒了。现在我可以在切换到浏览器时重新渲染 asciidoc 文档。
  • 哎哟。问题:每次切换到 tex 文件时,第二个自动命令都会累加。离开插入模式后,vim 开始连续保存很多次。
  • 哇,这么容易预防吗?好的……
【解决方案2】:

InsertLeave 仍然需要一个参数。

这对我有用:

autocmd FileType tex :autocmd InsertLeave * :w

请注意,如果您稍后在同一缓冲区中编辑非tex 文件,此行为仍将保留。我不确定在编辑任何内容时是否有一种简单的方法可以删除它某种类型的文件。

【讨论】:

  • 冒号并不是真正需要的。例如au FileType go au VimLeave * call system("killall gocode")
【解决方案3】:

您可以使用自动命令的模式选项。

autocmd InsertLeave *.tex w

【讨论】:

  • 这在文件扩展名与文件类型不匹配或不存在时不起作用。当您进行比较备份/临时文件之类的操作时,或者文件的位置决定了它的类型时,就会发生这种情况,例如系统配置文件。
猜你喜欢
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
相关资源
最近更新 更多