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

时间:2017-02-13 11:25:56

标签: vim tmux

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

这部分内置于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粘贴复制缓冲区。

答案 2 :(得分:0)

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

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复制模式