Проблема привязки ключей Tmux

8

Я перешел от использования экрана некоторое время назад к использованию tmux. У меня есть конфиг tmux, который использует Ctrl+ экранную aпоследовательность вместо стандартного Ctrl+ для tmux b.

Однако одна проблема, которую я обнаружил, заключается в том, что если я нажму ctrl-a, а затем нажму p для предыдущего экрана или n для следующего экрана, не отпуская клавишу ctrl, tmux игнорирует последовательность клавиш. Если я нажму Ctrl+ a, отпустите Ctrl, а затем нажмите nили p, все работает нормально.

Есть мысли о том, что может быть не так? Мой конфиг выглядит следующим образом:

# $Id: t-williams.conf,v 1.1 2009/11/02 18:59:28 nicm Exp $
#
# ~/.tmux.conf - tmux terminal multiplexer config
# Thayer Williams (http://cinderwick.ca)
# "Feel free to do whatever you like with it."

# set prefix key to ctrl+a
unbind C-b
set -g prefix C-a

# send the prefix to client inside window (ala nested sessions)
bind-key a send-prefix

# toggle last window like screen
bind-key C-a last-window

# confirm before killing a window or the server
bind-key k confirm kill-window
bind-key K confirm kill-server

# toggle statusbar
bind-key b set-option status

# ctrl+left/right cycles thru windows
bind-key -n C-right next
bind-key -n C-left prev

# open a man page in new window
bind / command-prompt "split-window 'exec man %%'"

# switch split window keys
unbind %
bind | split-window -h
bind - split-window -v

# quick view of processes
bind '~' split-window "exec htop"

# scrollback buffer n lines
set -g history-limit 10000

# listen for activity on all windows
#set -g bell-action any
setw -g monitor-activity off
set -g visual-activity off

# on-screen time for display-panes in ms
set -g display-panes-time 2000

# start window indexing at one instead of zero
set -g base-index 1

# enable wm window titles
set -g set-titles on

# Automatically set window title
setw -g automatic-rename

# statusbar --------------------------------------------------------------

set -g display-time 2000

# default statusbar colors
set -g status-fg white
set -g status-bg cyan
set -g status-attr default

# default window title colors
set-window-option -g window-status-fg black
set-window-option -g window-status-bg cyan
set-window-option -g window-status-attr default

# active window title colors
set-window-option -g window-status-current-fg white
set-window-option -g window-status-current-bg black
set-window-option -g window-status-current-attr bright

# command/message line colors
set -g message-fg blue
set -g message-bg white
set -g message-attr dim

# center align the window list
set -g status-justify centre

# show some useful 
set -g status-left "[#[fg=black]#H#(uptime | cut -d ',' -f 3- | sed -e 's/ load average: //' | sed -e 's/  / /g')#[default]]"
set -g status-left-length 50
set -g status-right "[#[fg=black]%a %Y-%m-%d %H:%M#[default]]"
set -g status-right-length 50

set -g default-terminal "screen"
Морган Блэкторн
источник

Ответы:

7

Я нашел решение, чтобы имитировать оригинальное поведение под экраном (только включая соответствующие части конфигурации, так как остальное - просто оформление витрин):

# set prefix key to ctrl+a until I have time to adapt
unbind C-b
set -g prefix C-a

# send the prefix to client inside window (ala nested sessions)
bind-key a send-prefix

# toggle last window like screen
bind-key C-a last-window

# navigate through windows like screen
bind-key C-a-n next
bind-key C-a-p prev

Объединение последовательности ключей напрямую было решением. Я не осознавал, что на самом деле вы могли бы это сделать, но он работает отлично, и я все еще могу сохранить опцию send-prefix (что, как мне показалось, было частью проблемы).

Морган Блэкторн
источник
Я думаю, что вы можете пометить свой ответ как решение, которое поможет другим людям.
Гитаарик
Как только я использую привязки клавиш по умолчанию, я устанавливаю свои немного по-другому: bind-key C-nи bind-key C-p. это позволяет мне продолжать нажимать Ctrl.
SergioAraujo
2

Tmux считает, что любые нажатия клавиш, выполняемые при нажатой клавише ctrl, относятся к C-форме. Вы можете просто добавить bind C-p prevи bind C-n nextполучить тот же эффект, хотя.

Алекс Л.
источник
Спасибо, Алекс, это поставило меня на правильный путь. Я не хотел делать Ctrl-P и Ctrl-N, хотя; Я до сих пор администрирую некоторые машины, на которых нет tmux, и время от времени использую screen, поэтому я искал что-то, что немного приближалось к первоначальному поведению экрана. Но ваш комментарий подтолкнул меня к тому, что я мог сделать, чтобы это исправить.
Морган Блэкторн