Какой наименее противоречивый префикс / escape-последовательность для экрана или tmux?

58083
Flow

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

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

86
"какая из них меньше всего конфликтует с другими программами?" не имеет ничего общего с мнением. iconoclast 8 лет назад 4
После изменения `~ / .tmux.conf` не забудьте перезапустить tmux-сервер, чтобы изменения вступили в силу (http://superuser.com/q/188491/105108). ks1322 8 лет назад 0

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

46
cjay

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

  • отправка SIGQUITв процесс
  • прерывание для или во время цикла в оболочке, когда ^Cперехватывается
  • toggle-input-method в Emacs

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

~/.tmux.conf

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

~/.screenrc

escape ^|^| 
Я пробовал это, но tmux жалуется на использование `C- \`. Можно ли как-нибудь избежать символа `\`? Jason 11 лет назад 0
`set -g prefix C - \\` был необходим для 1.8 Elijah Lynn 10 лет назад 0
Просто, чтобы кто-то еще знал, вы должны написать `'C - \'` вместо `C- \` в конфигурации tmux. gns-ank 10 лет назад 1
Не забудьте «tmux source-file /path/to/tmux.conf» когда закончите, чтобы опробовать новые настройки user72923 9 лет назад 1
но потом я привык к этой команде, и когда я забываю, что я на экране, я начинаю случайно посылать SIGQUITs ... Kache 9 лет назад 10
"if it's in a convenient position on your keyboard layout" by default it's not, are you implying that there is some popular remapping that you're using which makes C-\ convenient? storypixel 7 лет назад 2
@storypixel Я думаю, что это больше не значит, что люди используют. В настоящее время некоторые люди (например, я) запускают кастомные прошивки на своих клавиатурах. henrebotha 5 лет назад 0
`'C - \'` - ужасный префиксный ключ, поскольку наращивание мышечной памяти вокруг него приведет к непреднамеренной отправке `SIGQUIT`, когда вы используете tmux, которые не настроены таким образом. Если мы собираемся скрыть комбинацию клавиш управления процессом, то `Cz` - гораздо более благоприятный вариант. aparkerlue 5 лет назад 0
43
Ned Ruggeri

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

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

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

Backtick кажется хорошей идеей, пока вы не вставите немного SQL ... Synchro 11 лет назад 0
@Synchro на tmux 1.8 больше не проблема благодаря опции предположить-вставить-время, которая включена по умолчанию (установлена ​​на 1 мс). Смотрите здесь: http://sourceforge.net/p/tmux/tmux-code/ci/5fe0576dcbf47954957007296839e43471b088f9/tree/tmux.1#l2134 sickill 11 лет назад 2
Я нашел этот вопрос, ища альтернативы backtick, поскольку он начал вызывать проблемы после того, как я привык использовать backtick вместо `$ ()` в оболочках. Также это становится болью, когда вы начинаете писать много разметки. Я пользуюсь им уже несколько лет, но, к сожалению, мне придется изменить это сейчас. kirelagin 9 лет назад 0
В .tmux.conf у меня также есть `bind-key Ca set-option -g prefix Ca`. Всякий раз, когда мне нужно использовать обратные пометки, я нажимаю `\` -Ctrl-a`, который устанавливает мой префикс на `Ca`. И у меня есть `bind-key Cb set-option -g prefix \` `, поэтому я могу нажать` CaCb`, чтобы вернуться Boris 9 лет назад 2
What if you're writing markdown? How do you escape the prefix? OJFord 8 лет назад 0
Ah, you double-tap it. Nice, might give it a shot. OJFord 8 лет назад 0
А что, если когда-нибудь написать Bash? `f_len = \` cat file | wc -l \ ``? dylnmc 8 лет назад 0
вместо использования `\` `в bash, вы должны попытаться использовать более современную и более читаемую альтернативу:` $ (`and`) ` iconoclast 8 лет назад 0
Не используйте кавычки так часто, так что я не против дважды нажать на него. Это моя любимая, безусловно. Vik 7 лет назад 0
На немецкой раскладке клавиатуры вместо этого вы должны использовать символ ^. Olaf Dietsche 5 лет назад 0
20
staticsan

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

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

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

Для пользователей Emacs Ctrl + O кажется лучшим выбором: в emacs это только «открыть новую строку в курсоре» и в bash «повторить последовательность команд». Flow 14 лет назад 6
+1, если вы в порядке с правыми ctrl-операциями, это выглядит как хорошая резервная копия. Я сам левша ;-) DaveParillo 14 лет назад 1
Я думаю, что Ctrl + O ломает Vim Mu Qiao 10 лет назад 8
Я согласен с @MuQiao. Ctrl-o используется в Vim для перехода к более старой позиции курсора (что эквивалентно кнопке «назад» во многих IDE) - функция, которую я очень часто использую при просмотре кода в Vim. Ctrl-b является синонимом PageUp в Vim. Я вообще не использую Ctrl-b в Vim. Так что для пользователей Vim, таких как я, Ctrl-b по-прежнему лучше, чем Ctrl-o. Я использую Cj в качестве префиксного ключа, поскольку Cj является синонимом j илив Vim, и никто не использует Cj для перемещения на одну строку вниз в Vim. У меня есть это в моем ~ / .tmux.conf: `set -g prefix2 Cj; связующий ключ Cj send-prefix -2` Susam Pal 10 лет назад 12
`Cj` конфликтует с CtrlP. Перемещение вверх и вниз по списку буферов использует `Ck` и` Cj` соответственно blockloop 6 лет назад 0
12
Darren Hall

Я использую сложную систему для экрана. Мое экранирование по умолчанию установлено в \ 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%%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%%n* %t%? @%u%?%{-}%+w '^M" register d "\017:caption string '%{= kW}%?%F%{+b KW}%:%{= kK}%? %= %?%F%{.c}>>>%{-}%? | %-w%%n* %t%? @%u%?%{-}%+w '^M" 
Креативное решение. Я впечатлен. staticsan 14 лет назад 0
bind-key -n F11 установить -g префикс `bind-key -n F12 установить -g префикс Co Обновления для tmux на случай, если другие захотят это изменить. milkypostman 12 лет назад 0
Есть ли способ установить какой-то минимальный тайм-аут для комбо-префикса + other_key в tmux, чтобы при вставке кода он не вызывал никаких команд, но при наборе клавиши backtick + с клавиатуры это происходит потому, что пауза между backtick и другой клавишей была длиннее ? sickill 11 лет назад 1
12
Nathan Speed

I've got CAPS-LOCK globally mapped to ESC. Then, I use M-Space (ie. CAPS-LOCK+ Space) for my prefix.

Очень хорошая идея, спасибо, что поделились. AhHatem 10 лет назад 0
11
simonair

Я использую 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 
Я принял эту привязку и считаю ее очень удобной. Спасибо! aymericbeaumet 10 лет назад 0
Мой любимый, так как я всегда отключаю поток управления терминалом. Jack O'Connor 10 лет назад 0
Используется в emacs для `цитата-вставлена`. Пример использования (в emacs): если я хочу найти следующий символ табуляции - `++` nhed 10 лет назад 2
6
terrace

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

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

Это продолжалось недолго - я вернулся к ^ j. ^ Пробел слишком похож на команды, которые я использую для вызова приложений уровня OSX (Spotlight, QuickSilver, DTerm). terrace 13 лет назад 3
Я тоже использую Cj. Вот что я использую в моем ~ / .tmux.conf: `set -g prefix2 Cj; связующий ключ Cj send-prefix -2` Susam Pal 10 лет назад 0
Я также использую C-Space, он почти нигде не используется. mahdix 7 лет назад 1
C-space идеально подходит для меня, так как я на Chromebook: D Eric Nguyen 7 лет назад 1
6
Trevor Powell

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

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

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

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

Ctrl-s - прямой поиск, когда я ухожу далеко с помощью Ctrl-r :) Jack O'Connor 10 лет назад 4
Ctrl-S is common for stopping console output (aka "freezing" it). This bit me when I tried remapping it. Dave 7 лет назад 0
4
bluehavana

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

Как вы можете определить backtick для tmux? Alexandre Nizoux 13 лет назад 0
Что-то вроде: отвяжите Cb; установить префикс -g '`'; bind '`' send-prefix; см. ответ Даррена Холла выше. bluehavana 13 лет назад 0
Я с backtick в течение года, и я никогда не вернусь к префиксу с двумя ключами / комбо. Попробуйте. sickill 11 лет назад 0
4
nealmcb

I recommend C-j, which doesn't interfere much with vi or emacs. Essentially, I agree with a comment by Susam Pal, which seems worthy of showing up as an answer, since the others all seem to have significant conflicts from my perspective.

I use C-j as my prefix key since C-j is synonymous to j or in Vim and nobody uses C-j to move one line down in Vim. I have this in my ~/.tmux.conf:

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

Исходя из вашей рекомендации, я уже некоторое время использую Cj, и единственный конфликт, который я обнаружил, связан с плагином CtrlP vim. Cj и Ck используются для перемещения вниз и вверх по опциям соответственно. blockloop 6 лет назад 1