我可以让 Tmux 在窗格失去焦点时通知 Vim 吗?

我可以让 Tmux 在窗格失去焦点时通知 Vim 吗?

我在 Tmux 中并行使用 Vim 和 Bash。我将 Vim 配置为在文件之间切换时自动保存文件,但我真的希望它在切换到 Bash 窗格时自动保存。

有没有办法让 Tmux 在窗格失去焦点时向 Vim 发送某种代码?

答案1

这可能最好使用 的vim客户端-服务器模型来完成。关于在 中使用它有一些很好的指导:help remote.txt

首先,您需要一个vim使用该选项编译的客户端+clientserver。如果您的发行版不以这种方式打包,请获取源代码(通过apt-get sourceabs、 等)并添加该选项。

完成后,您需要重新绑定键,tmux以便在更改窗口时它也会向活动窗口发送如下所示的内容:

vim --servername foo --remote-send '<C-\><C-N>:w<CR>'  

类似以下内容应该有效(未经测试):

bind-key 0 run-shell "vim --servername foo --remote-send '<C-\><C-N>:w<CR>'" \; select-window -t :0

答案2

其他人已经在 vim 插件中为你完成了这项工作 -https://github.com/sjl/vitality.vim

来自自述文件:

(Vit)ality 是一个插件,可以让 (V)im 与 (i)Term 2 和 (t)mux 很好地配合。

如果您同时使用 vim 和 tmux,您可能还会对维多克斯插入。

默认情况下,当你调用 RunVimTmuxCommand 时,vimux 会在当前 tmux 窗格下创建一个 20% 高的水平窗格,并在其中执行命令,而不会失去 vim 的焦点。一旦该窗格存在,每当您再次调用 RunVimTmuxCommand 时,该命令都会在该窗格中执行。

考虑经常重新运行测试。

相关内容