我在 tmux 会话中使用 Vim,最近我注意到当我切换到另一个 tmux 窗口时,Vim 在几秒钟后发出警报。移动窗口后,Vim 中没有发生任何事情 - 通常我会进行一些编辑并使用 写入文件,:w
然后移动到 tmux 中。几秒钟后,Vim 发出警报,tmux 闪烁,表明 Vim 需要注意。
为什么 Vim 如此需要帮助?我怎样才能防止这种情况发生?
更新 #1
:au FocusLost
根据要求输出:
:au FocusLost
--- Auto-Commands ---
Press ENTER or type command to continue
链接至.vimrc
和.tmux.conf
:
更新#2
使用版本 Vim 7.3 和 tmux 1.6。这整件事发生在 tmux 运行的 SSH 会话中。我Ctrl+A
Ctrl+N
按照 tmuxconf使用 tmux 键从 Vim 窗口切换出来。
答案1
自动命令和焦点
检查是否有任何与失去焦点相关的自动命令(:au
或)。:autocmd
这些是您可以运行的命令vim
:
:autocmd FocusGained
--- Auto-Commands ---
fugitive_status FocusGained
* call fugitive#reload_status()
:au FocusLost
--- Auto-Commands ---
Press ENTER or type command to continue
上面显示了如何检查这一点。第一个示例使用命令的全名:autocmd
.第二个显示了命令的缩写形式 ( :au
)。您可以为其中任何一个提供组名称,以显示自动命令列表的子集。
也许您需要活力?
我对此不太熟悉,但我确实遇到过这个名为:Vitality 的插件,它看起来可以帮助解决iTerm2
和 问题tmux
。我并不完全清楚这修复了什么,但可能值得一看。
摘自网页
例如:在 iTerm 2 中运行 Vim 时,它甚至可以通过 tmux 恢复 FocusGained 和 FocusLost 自动命令!
参考
答案2
该vim-gitgutter
插件导致了意外的 Vim 警报。以下行添加到我的.vimrc
修复中:
let g:gitgutter_realtime = 0
以下对来源的评论给了我解决方案: https://github.com/airblade/vim-gitgutter/issues/105#issuecomment-23055765
感谢@slm 指出正确的方向:)