TMUX 在复制模式下使用 VIM 键绑定在面板上移动



我目前正在.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 + [

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

+ b + 箭头键

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

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

我遇到了同样的问题。这似乎是 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

这部分内置在 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 键移动光标并使选择/复制工作。

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 复制模式下也适用于我

最新更新