我在 Tmux 中并行使用 Vim 和 Bash。我将 Vim 配置为在文件之间切换时自动保存文件,但我真的希望它在切换到 Bash 窗格时自动保存。
有没有办法让 Tmux 在窗格失去焦点时向 Vim 发送某种代码?
答案1
这可能最好使用 的vim
客户端-服务器模型来完成。关于在 中使用它有一些很好的指导:help remote.txt
。
首先,您需要一个vim
使用该选项编译的客户端+clientserver
。如果您的发行版不以这种方式打包,请获取源代码(通过apt-get source
、abs
、 等)并添加该选项。
完成后,您需要重新绑定键,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 时,该命令都会在该窗格中执行。
考虑经常重新运行测试。