tmux 在复制模式下使用 vim 键绑定跨面板移动

tmux move across panels with vim key bindings while in copy mode

我目前正在 .tmux.conf

上使用它
bind -n C-h if "[ $(tmux display -p '#{pane_current_command}') = vim ]" "send-keys C-h" "select-pane -L"
bind -n C-j if "[ $(tmux display -p '#{pane_current_command}') = vim ]" "send-keys C-j" "select-pane -D"
bind -n C-k if "[ $(tmux display -p '#{pane_current_command}') = vim ]" "send-keys C-k" "select-pane -U"
bind -n C-l if "[ $(tmux display -p '#{pane_current_command}') = vim ]" "send-keys C-l" "select-pane -R"

这让我只需按:ctrl + [hjkl] 就可以像 vim 那样移动(左、下、上、右),但是在 tmux 中进入复制模式:

ctrl + b + [

我的绑定停止工作,如果我想移动我需要使用箭头键:

ctrl + b + 方向键

知道如何让 vim 绑定在复制模式下工作或使它们在任何使用模式下永久有效吗?

我想在复制模式下跨面板移动,不要将此与尝试复制文本 vim 混淆。

这部分内置于 tmux 中,通过几个键绑定,您可以获得大部分 vim 个键。

# turn on vi key mode
setw -g mode-keys vi

# bind v, y, Escape keys in vi-copy mode
bind -t vi-copy v begin-selection
bind -t vi-copy y copy-selection
bind -t vi-copy Escape cancel

# bind <prefix> + p to "paste"
unbind p
bind p paste-buffer

现在当您进入复制模式时,您可以使用 vim 键移动光标并使 selection/copy 生效。

h,j,k,l - movement of cursor
C-b     - page up
C-f     - page down
0,$     - start or end of current line
v       - enter select mode
V       - enter line-based select mode
y       - yank current selection into copy buffer
Escape  - cancel copy mode

此外,一旦退出复制模式,上面的 <prefix + p 绑定将允许您使用 <prefix> + p 粘贴复制缓冲区。

我正在使用插件在窗格之间导航:

https://github.com/christoomey/vim-tmux-navigator

此插件的作者在 ~/.tmux.conf

中使用了此代码段
# Smart pane switching with awareness of Vim splits.
# See: https://github.com/christoomey/vim-tmux-navigator
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"
bind-key -n C-\ if-shell "$is_vim" "send-keys C-\" "select-pane -l"

它在 tmux 复制模式下也适用于我

我遇到了同样的问题。这似乎是 tmux 2.4 的问题。您可以在之前的回复 (https://github.com/christoomey/vim-tmux-navigator/issues/159) 中提到的插件上查看此问题。

简而言之,只需将此添加到您的 .tmux.conf

bind-key -T copy-mode-vi C-h select-pane -L
bind-key -T copy-mode-vi C-j select-pane -D
bind-key -T copy-mode-vi C-k select-pane -U
bind-key -T copy-mode-vi C-l select-pane -R
bind-key -T copy-mode-vi C-\ select-pane -l