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