87

Экран идет с Ctrl+A. С другой стороны, tmux - как разработано на экране - использует Ctrl+B. Однако оба нажатия клавиш также используются в редакторах, оболочках и т.д. Таким образом, выбор одного из них ухудшает пользовательский опыт и функциональность этих инструментов при использовании в tmux или на экране.

Какой префикс меньше всего конфликтует с сочетаниями клавиш других программ и оболочек?

20 ответов20

46

Я думаю, что ^\ (иначе ^|) - лучший вариант, если он удобно расположен на вашей раскладке клавиатуры. Его использование в других программах довольно редко:

  • отправка SIGQUIT процессу
  • прерывание циклов for или while в оболочке при перехвате ^C
  • toggle-input-method в emacs

Я не знаю других применений. Будьте осторожны, чтобы случайно не убить процессы вне tmux или screen после привыкания к нему. Это случилось со мной только один раз за несколько лет.

~/.tmux.conf

unbind-key C-b
set -g prefix 'C-\'
bind-key 'C-\' send-prefix

~/.screenrc

escape ^|^|
45

Для людей, которые хотят использовать backtick как выход в tmux, вы можете добавить:

unbind C-b
set -g prefix `
bind-key ` send-prefix

Это последнее важно, иначе вы не можете набрать обратный трюк для других целей :-)

20

Также известно, что Ctrl+A вызывает проблемы с Emacs, включая Bash в режиме Emacs. Похоже, это не проблема для вас.

Ctrl+O - другой вариант, который я видел. Очевидно, это значение по умолчанию в RatPoison (это X Window Manager, которому не нужна мышь). Я использовал Ctrl+O при использовании вложенных экранов: Ctrl+O для внешнего и Ctrl+A для внутренних. Работало хорошо, но как бы напугало моих коллег. :-)

Я просто подумал, и если вы используете vi, а не Emacs, есть несколько альтернатив. Например, Ctrl+G используется не часто.

12

У меня есть CAPS-LOCK глобально сопоставленный с ESC . Затем я использую M-Space (т.е. CAPS-LOCK+ Space) для моего префикса.

12

Я использую сложную систему для экрана. Мое экранирование по умолчанию установлено в \140 \140, что является backtick. Ctrl-A усложняет редактирование Emacs и командной строки для меня в Zsh, и мне не нравится Ctrl-O (две ручные операции для большинства действий на экране).

Я перепривязываю 's' к экрану 1, чтобы новые сессии создавались слева направо на клавиатуре, начиная с 1. Это позволяет мне зарезервировать экран 0 для того, что я считаю постоянными или справочными окнами. Это очень быстрый жест одной рукой для (backtick)1, (backtick)2, (backtick)3 для переключения между окнами.

Проблема с использованием backtick в среде unix заключается в попытке вырезать и вставлять код сценария shell/perl. По этой причине я нажимаю клавишу F11/F12, чтобы переключаться между моим escape-символом.

bindkey -d -k F1        escape ^O^O # bound to F11
bindkey -d -k F2        escape \140\140 # bound to F12

Это переключит escape на Ctrl-O, когда я выполняю операции вырезания и вставки. Я обнаружил, что двойная отметка проста и является хорошим компромиссом для большинства операций на экране.

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

## command characters
escape \140\140                 # default is `

## sets caption and escape toggle
bindkey -d -k F2 process a     # bound to F12

## initial caption
caption always '%{= kW}%?%F%{+b KW}%:%{= kK}%? %= %?%F%{-b .c}>>>%{-}%? | %-w%{mW}%n* %t%? @%u%?%{-}%+w '

## registers to toggle bindkeys
register a "\140:eval 'bindkey -d -k F2 process b' 'process c' 'escape \\017\\017'^M"
register b "\017:eval 'bindkey -d -k F2 process a' 'process d' 'escape \\140\\140'^M"

## registers to change captions
register c "\140:caption string '%{= kW}%?%F%{+b mW}%:%{= kK}%? %= %?%F%{.c}ALT%{-}%? | %-w%{KW}%n* %t%? @%u%?%{-}%+w '^M"
register d "\017:caption string '%{= kW}%?%F%{+b KW}%:%{= kK}%? %= %?%F%{.c}>>>%{-}%? | %-w%{mW}%n* %t%? @%u%?%{-}%+w '^M"
11

Я использую Ctrl-Q в tmux и до сих пор он работал хорошо. Однако я должен упомянуть, что это противоречит управлению потоком оболочки. По умолчанию Ctrl-Q используется для повторного включения вывода после его остановки с помощью Ctrl-S . Несколько раз удивившись застрявшей оболочке после случайного нажатия Ctrl-S , я научился не нажимать Ctrl-S .

(Можно также полностью отключить управление потоком с помощью stty -ixon или связать разные ключи для stty start и stty stop .)

# tmux.conf
unbind C-b
set -g prefix C-q
6

Мне нравится резервировать ^Space для очень специальных / общих операций, потому что я считаю, что это самый простой префикс для ввода, но сейчас я пытаюсь отобразить его как prefix в tmux.

Это оставляет ваши пальцы свободными, чтобы мгновенно перейти к команде, которую вы хотите набрать. Попробуйте.

6

Запоздалое предложение: ctrl-s . ctrl-s имеет ряд преимуществ:

  1. На домашнем ряду.
  2. Все еще близко к ctrl-a (фактически, для большинства печатных машин он использует те же два пальца, что и для ctrl-a), поэтому переключение мышечной памяти с ctrl-a на ctrl-s тривиально - для меня это стало вторая натура в течение часа после первого попытки.
  3. Освобождает ctrl-a для операций "назад к началу строки" в стиле emacs или "приращения числа" в стиле vim. Или, эй, для запуска экрана внутри панели tmux, не беспокоясь о экранировании префиксных символов для управления экземпляром встроенного экрана. (Я часто делаю это, используя локальный tmux с панелями, содержащими сессии ssh на удаленных серверах, на которых я запускаю screen)
  4. Не переопределяет и не добавляет escape-требования к любым другим часто используемым функциям терминала. ничто, что подавляющее большинство людей использует сегодня, не находится на Ctrl-S

Конечно, причина того, что на ctrl-s ничего нет, заключается в том, что в терминале он традиционно используется для управления потоками, начиная с нескольких дней до того, как стали популярными такие инструменты подкачки, как more и less . Я уверен, что в некоторых терминальных программах с графическим интерфейсом пользователя эта функция управления потоками включена по умолчанию, но я на самом деле не сталкивался с ней; Все программы на графическом терминале, которые я пробовал, по умолчанию полностью игнорируют его, что делает эту удобную комбинацию клавиш доступной для более продуктивного использования.

Так что, если вы на самом деле не используете screen/tmux из (например) терминала Linux, а скорее из терминала на основе графического интерфейса, то я рекомендую попробовать ctrl-s ; Это сделано для того, чтобы перемещаться по tmux и показывать мне намного более удобный экран.

4

Я слышал об использовании `(backtick), и тогда вам просто нужно набрать его дважды для фактического backtick. Может быть лучше для пользователей vi, которые привыкли к действию (если только вы не заблокируете Caps).

4

Я рекомендую C-j , который не сильно мешает vi или emacs. По сути, я согласен с комментарием Сусама Пала, который, похоже, заслуживает того, чтобы его можно было найти в качестве ответа, поскольку у всех остальных, по-моему, есть значительные конфликты с моей точки зрения.

Я использую Cj в качестве префиксного ключа, поскольку Cj является синонимом j или в Vim, и никто не использует Cj для перемещения на одну строку вниз в Vim. У меня есть это в моем ~/.tmux.conf:

set -g prefix2 C-j; bind-key C-j send-prefix -2

3

Я думаю, что лучшее решение - ^ C. Emacs использует ^ C в качестве префиксного ключа, и я обнаружил, что когда мне нужно набрать ^ C в оболочке, я почти всегда в любом случае набираю два. :-)

unbind-key C-b
set -g prefix C-c
bind-key C-c send-prefix
3

Ключом без конфликта может быть Cz, так как он обычно используется для отправки программы в фоновый режим, чтобы продолжить работу в оболочке, которая ее запустила. Я не делаю этого, когда у меня есть Tmux.

3

Для раскладки клавиатуры Программиста Дворжака довольно удобно использовать клавишу «минус» (тире) в качестве префикса, то есть ctrl+- .
Клавиша минус находится в позиции с одинарной кавычкой в макете qwerty. Также у меня есть функция блокировки клавиш в виде клавиши ctrl. Далее следует tmux conf, чтобы установить его в качестве префикса:

unbind C-b
set -g prefix C-_
bind C-_ send-prefix
bind - last-window

Вы можете задаться вопросом, почему подчеркивание используется вместо минус? Обратитесь к Tmux: как мне связать с C- (контроль-минус)?
Для qwerty вы можете применить Как связать префиксный ключ tmux с C- '? решение, чтобы сохранить тот же ярлык.

Я бы сказал, что это идеальный префикс, если вы используете Vim/Neovim. Поскольку префиксы, такие как ctrl+a или ctrl+b , выполняют теневую (перекрывающуюся) функциональность Vim в любом случае.

2

Лично для меня b слишком далеко от Ctrl . Когда я использую tmux, я всегда изменяю привязку с Cb на Ca. Основной конфликт с Ca - это select all, но я не нашел в этом проблемы с программами, с которыми я использую tmux.

2

Как пользователь GNU emacs, zsh и MS Windows, я использую Control-T. (например, в .screenrc:)

бежать "^ T ^ T"

Да, Control-T имеет что-то связанное с этим, например выпадающее меню в aptitude Ubuntu или транспонирование символа в Emacs.

Я проигнорировал Ко, потому что это требует двух рук для меня.

2

Я использую Caps Lock, и в OSX вам нужно сделать что-то особенное, чтобы заставить его работать.

https://gist.github.com/burtlo/3788048

1

Вы можете использовать backtick. Некоторые старые версии tmux не поддерживают backtick, так что вы можете сделать следующее, чтобы обойти это (хотя это добавило бы C-`, C- @ и C-space в качестве вашей мета одновременно):

# meta prefix - @ - backtick
unbind C-b
set -g prefix C-@
bind C-@ send-prefix
bind C-@ last-window

Я обычно переназначаю свой CapsLock на Ctrl, так что это имеет еще больший смысл с помощью backtick.

1

Большинство ответов здесь используют Ctrl как часть комбинации клавиш.
Когда я использовал Ctrl, мой палец мизинца начал болеть, потому что я всегда собираюсь раздвинуть его до Ctrl.
Я использую Alt-j который набираю левым и правым указательным пальцами, и это очень удобно. Я также не нашел никаких столкновений с какой-либо другой программой.

unbind C-b set-option -g prefix M-j

0

Мне нравится предложение связывать ctrl-\ в качестве префикса, но чтобы заставить его работать на Linux Mint 12, мне пришлось избежать места привязки внизу. В противном случае это не займет. Смотрите мой .tmux.conf здесь: Использование tmux с emacs и vim

0

Я думаю, что пользователи Mac найдут § более удобным, чем обратный удар.

О не Mac клавиатуры, то кавычка расположена примерно в том же ключе, что и § на Mac клавиатурах. Таким образом, чтобы испытать те же удобства, что и люди, которые предлагают использовать backtick, используйте знак абзаца на клавиатуре Mac.

Использовать обратную клавиатуру на клавиатурах Mac сложно, так как она расположена очень близко к левому (⇧) смещению, (⌃) элементу управления и (⌥) alt-клавишам. На MacBook даже рядом с левой клавишей fn .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .