Могу ли я заставить Tmux оставаться в «режиме префикса», пока я не нажму escape?

4

Как и в режимах Vim, я бы хотел, чтобы Tmux оставался в «режиме префикса» (как вы это называете?) До тех пор, пока я не нажму Escape, чтобы я мог делать что-то вроде

Prefix h j + +

вместо

Prefix h Prefix j Prefix + Prefix +

и не нужно беспокоиться о таймерах или чрезмерной записи.

Jakob
источник

Ответы:

2

Я отправил это как проблему и получил этот ответ:

Вы можете перепривязать все свои ключи, чтобы добавить switch-client -Tprefixв конец каждой последовательности команд, но не существует автоматического способа сделать это.

Проблема здесь в том, что она не будет работать, если команда выдает ошибку, но вы можете обойти ее, используя

Да, ошибка отменит последовательность команд, которую вы можете обойти, используя run-shell, например

run "tmux mycmd; tmux switch-client -Tprefix"

Но это может скрыть ошибку от отображения.

Мой текущий конфиг выглядит так:

bind c new-window \; switch-client -T prefix
bind . command-prompt \; switch-client -T prefix
bind , copy-mode \; switch-client -T prefix

# Vim style splits
bind s split-window -v \; switch-client -T prefix
bind v split-window -h \; switch-client -T prefix

# Double tab to cycle panes
bind C-a select-pane -t :.+ \; switch-client -T prefix

Из того, что я понял, tmux использует разные контексты для разных привязок. Чтобы указать, в каком контексте использовать привязку, вы используете bind <key> -T <context>, где префикс по умолчанию. Вы можете переключать контекст с помощью switch-client -T <context>, поэтому мы повторно применяем префикс после каждой команды.

Недостатки этого метода:

  • вам придется делать это явно на каждой привязке
  • он вернется в нормальный режим, если что-то приведет к ошибке (например, попытка перейти к следующему сеансу, когда запущен только один сеанс)
  • он выйдет на любом свободном ключе, а не только на Esc.

Бонус! Вы можете добавить забавный индикатор, который очень полезен, когда вы находитесь в режиме префикса в течение более длительного времени, используя что-то вроде

set -g status-right "#{?client_prefix,#[reverse]● #[noreverse],#[reverse]○ #[noreverse]}"

Jakob
источник