Tmux каким-то образом забывает префикс после определенного связывания клавиш

622
Shivam

Я не изменился по умолчанию префикс ИЭ C-b. Я добавил следующую привязку ключей в свой tmux.conf

bind -n C-M-w send-keys M-w\; \ run-shell "tmux save-buffer - | xclip -i -selection clipboard" 

По сути, я хотел, чтобы в режиме копирования C-b [я мог копировать save-bufferи в буфер обмена. Работает хорошо, но только в первый раз. И после того, как он был выполнен один раз, он каким-то волшебным образом освобождает prefixи другие привязки клавиш. Я не уверен, почему это так.

У меня довольно простой конфиг tmux, как показано ниже:

# 0 is too far from ` ;) set -g base-index 1  # Automatically set window title set-window-option -g automatic-rename on set-option -g set-titles on  #set -g default-terminal screen-256color set -g status-keys vi set -g history-limit 10000  setw -g mode-keys emacs setw -g mode-mouse on setw -g monitor-activity on  bind-key v split-window -h bind-key s split-window -v  bind-key J resize-pane -D 5 bind-key K resize-pane -U 5 bind-key H resize-pane -L 5 bind-key L resize-pane -R 5  bind-key M-j resize-pane -D bind-key M-k resize-pane -U bind-key M-h resize-pane -L bind-key M-l resize-pane -R  # Use Alt-vim keys without prefix key to switch panes bind -n M-h select-pane -L bind -n M-j select-pane -D  bind -n M-k select-pane -U bind -n M-l select-pane -R  # Use Alt-arrow keys without prefix key to switch panes bind -n M-Left select-pane -L bind -n M-Right select-pane -R bind -n M-Up select-pane -U bind -n M-Down select-pane -D  # Shift arrow to switch windows bind -n S-Left previous-window bind -n S-Right next-window  bind -n C-M-w send-keys M-w\; \ run-shell "tmux save-buffer - | xclip -i -selection clipboard"\; \ set -g prefix 'C-b'  # No delay for escape key press set -sg escape-time 0  # Reload tmux config bind r source-file ~/.tmux.conf 
1

1 ответ на вопрос

4
Ahed Eid

Just replace

bind -n C-M-w send-keys M-w\; \ run-shell "tmux save-buffer - | xclip -i -selection clipboard"\; \ set -g prefix 'C-b 

with

bind -n C-M-w send-keys M-w\; \ run-shell "tmux save-buffer - | xclip -i -selection clipboard >> /dev/null "\; \ set -g prefix 'C-b 

After playing around this issue Thanks to Severyn Kozak who suggest using /dev/null

I think the problem in some commands that don't return output or exit status like xclip so redirecting the output to /dev/null will be enough for copying from paste buffer to clipboard.

I couldn't get why you use Send keys and set prefix commands ,but for tmux 1.8+ you should use copy-pipe command instead to copy selected text to paste buffer and clipboard

Copy and paste method using emacs-mode from this answer:

bind-key -n -t emacs-copy M-w copy-pipe "xclip -i -sel p -f | xclip -i -sel c " bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer" 

Using vi mode "prefix C-[ to enter copy mode >> v to highlight text >> y to copy text to both paste buffer and clipboard >> prefix p to paste ":

set -g mode-keys vi bind -t vi-copy 'v' begin-selection bind -t vi-copy 'y' copy-pipe "xclip -i -sel clip" bind p paste-buffer