我目前正在.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 复制模式下也适用于我