【问题标题】:Pass commands from Tmux to Vim将命令从 Tmux 传递到 Vim
【发布时间】:2019-01-07 05:08:34
【问题描述】:

我正在使用 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

【问题讨论】:

  • 如果 tmux 提供了一种本地方式来做到这一点,那就太好了。我用于此类事情的一个技巧是定义单独的键表并根据需要适当地启用/禁用它们。也就是说,使vi 成为一个包装器,它会更改 tmux 密钥表,然后打开文件,并在退出时重置密钥表。或者您可以在 vim 启动/关闭脚本中更改 keytable。
  • 那太好了..也许可以尝试贡献一些东西。

标签: vim tmux


【解决方案1】:
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"

Chris Toomey's Vim-tmux-navigator中所见

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

【讨论】:

  • 是的,效果很好,我不得不在 .vimrc 中禁用我的 vim 映射,将 C-j 映射到 C-W-j 等。
猜你喜欢
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 2013-04-19
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多