将命令从Tmux传递到Vim

将命令从Tmux传递到Vim,vim,tmux,Vim,Tmux,我正在使用Ctrl-[vim移动键]在Tmux中更改窗格(C-j移动到下面的窗格,等等)。我经常有一个Vim窗口打开,有几个裂口。tmux是否有办法识别窗格中打开的vim,并用C-j传递“选择下一个vim拆分”?也许它看起来像这样: bind -t C-j if in vim C-W-J # move to next vim split down else select-pane -D # move to next tmux pane down

我正在使用Ctrl-[vim移动键]在Tmux中更改窗格(C-j移动到下面的窗格,等等)。我经常有一个Vim窗口打开,有几个裂口。tmux是否有办法识别窗格中打开的vim,并用C-j传递“选择下一个vim拆分”?也许它看起来像这样:

bind -t C-j
    if in vim
        C-W-J # move to next vim split down
    else
        select-pane -D # move to next tmux pane down
如图所示


显然,您需要更改发送键,以匹配通过vim窗格移动的任何内容。

如果tmux提供了一种本地方式,那就太好了。我使用的一种技巧是定义单独的键表,并根据需要适当地启用/禁用它们。也就是说,制作
vi
一个包装器来更改tmux密钥表,然后打开文件,并在退出时重置密钥表。或者您可以在vim启动/关闭脚本中更改keytable。。也许有什么可以贡献的。是的,效果很好,我不得不在。vimrc中禁用我的vim映射,它将C-j映射到C-W-j等等。
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
    | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"

bind-key -n C-h if-shell "$is_vim" "send-keys C-h"  "select-pane -L"
bind-key -n C-j if-shell "$is_vim" "send-keys C-j"  "select-pane -D"
bind-key -n C-k if-shell "$is_vim" "send-keys C-k"  "select-pane -U"
bind-key -n C-l if-shell "$is_vim" "send-keys C-l"  "select-pane -R"