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


96

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

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


6
"какая из них меньше всего конфликтует с другими программами?" не имеет ничего общего с мнением.
иконоборчество

После изменения ~/.tmux.confне забудьте перезапустить сервер tmux, чтобы изменения вступили в силу ( superuser.com/q/188491/105108 ).
ks1322

Альтернатива использованию префикса: некоторые терминалы теперь предлагают интеграцию с tmux через "tmux -CC" (т.е. iTerm2 для macOS). Таким образом, окна tmux выглядят как вкладки в терминале. Затем вы можете использовать привязки клавиш для управления вкладками, которые не конфликтуют с какой-либо терминальной программой, то есть с помощью клавиши cmd (также называемой супер-ключом, клавишей Windows).
cjay

Ответы:


48

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

  • отправка 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-`. Can I escape the символа `как-нибудь?
Джейсон

2
Просто, чтобы кто-то еще знал, вы должны написать 'C-\'вместо `C- \` в конфигурации tmux.
gns-ank

2
Не забудьте «tmux source-file /path/to/tmux.conf» когда закончите, чтобы опробовать новые настройки
user72923

12
но тогда я получаю в привычке этой команды, и когда я забываю я в экране, я начинаю случайно отправка SIGQUITs ...
кача

3
«если он находится в удобной позиции на вашей раскладке клавиатуры», по умолчанию это не так, вы подразумеваете, что есть какая-то популярная перестановка, которую вы используете, что делает C- \ удобным?
storypixel

53

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

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

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


Backtick кажется хорошей идеей, пока вы не вставите немного SQL ...
Synchro

3
@Synchro на tmux 1.8 больше не проблема благодаря опции предположить-вставить-время, которая включена по умолчанию (установлена ​​на 1 мс). Смотрите здесь: sourceforge.net/p/tmux/tmux-code/ci/…
sickill

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

4
В .tmux.conf у меня тоже есть bind-key C-a set-option -g prefix C-a. Всякий раз, когда мне нужно использовать обратные пометки, я нажимаю, `-Ctrl-aкоторый устанавливает мой префикс C-a. И у меня есть, bind-key C-b set-option -g prefix `так что я могу ударить, C-a-C-bчтобы вернуться
Борис

Что если вы пишете уценку? Как вы избегаете префикса?
OJFord

21

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

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

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


8
Для пользователей Emacs Ctrl + O кажется лучшим выбором: в emacs это только «открыть новую строку в курсоре» и в bash «повторить последовательность команд».
Поток

2
+1, если вы в порядке с правыми ctrl-операциями, это выглядит как хорошая резервная копия. Я сам левша ;-)
DaveParillo

9
Я думаю, что Ctrl + O нарушает vim
Mu Qiao

14
Я согласен с @MuQiao. Ctrl-o используется в Vim для перехода к более старой позиции курсора (эквивалент кнопки «Назад» во многих IDE), функция, которую я очень часто использую при просмотре кода в Vim. Ctrl-b является синонимом PageUp в Vim. Я вообще не использую Ctrl-b в Vim. Таким образом, для таких пользователей Vim, как я, Ctrl-b по-прежнему лучше, чем Ctrl-o. Я использую Cj в качестве префиксного ключа, поскольку Cj является синонимом j или <Down> в Vim, и никто не использует Cj для перемещения на одну строку вниз в Vim. У меня есть это в моем ~ / .tmux.conf:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susam Pal

C-jконфликтует с CtrlP. Перемещение вверх и вниз списка буферов использует C-kи C-jсоответственно
blockloop

14

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


Я пытаюсь это сделать, но если я удерживаю CAPS-LOCK(думая о своей следующей команде или чем-то еще) tmux - или iTerm, не уверенный, что является причиной этого, - получаю ESCкоманду, неоднократно вызывающую, M-Spaceчтобы потом не работать. Есть ли способ отключить эту повторяющуюся проблему с ключом? Например, это работает, когда я быстро нажимаю CAPS-LOCK + Space, но не, если я удерживаю в CAPS-LOCKтечение секунды или около того, а затем нажимаю, Spaceэто не регистрирует M-Spaceаккорд ...
Бруно Эли

12

Я использую сложную систему для экрана. Мое экранирование по умолчанию установлено в \ 140 \ 140, что является обратным трюком. 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"

Креативное решение. Я впечатлен.
staticsan

bind-key -n F11 установить -g префикс `bind-key -n F12 установить -g префикс Co Обновления для tmux на случай, если другие захотят это изменить.
молочница

1
Есть ли способ установить какой-то минимальный тайм-аут для комбо prefix + other_key в tmux, чтобы при вставке кода не запускалась какая-либо команда, но при вводе клавиши backtick + с клавиатуры это происходит, потому что пауза между backtick и другой клавишей была длиннее ?
лазил

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

Я принял эту привязку и считаю ее очень удобной. Спасибо!
aymericbeaumet

Мой фаворит также, так как я всегда отключаю поток управления терминалом.
Джек О'Коннор

2
Используется в Emacs для quote-inserted. Пример использования (в emacs): если я хочу найти следующий символ табуляции<Ctrl-s>+<Ctrl-q>+<TAB>
nhed

6

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

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


3
Это продолжалось недолго - я вернулся к ^ j. ^ Пробел слишком похож на команды, которые я использую для вызова приложений уровня OSX (Spotlight, QuickSilver, DTerm).
терраса

Я тоже использую Cj. Это то, что я использую в своем ~ / .tmux.conf:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susam Pal

1
Я также использую C-Space, он почти нигде не используется.
Махдикс

1
C-space идеально подходит для меня, так как я на Chromebook: D
Эрик Нгуен

6

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

  1. На домашнем ряду.
  2. Тем не менее близко к ctrl-a(на самом деле, для большинства TYPERS он будет использовать те же два пальца , которые они использовали для 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
Ctrl-s - это прямой поиск, когда я ухожу далеко с помощью Ctrl-r :)
Джек О'Коннор

Ctrl-S обычно используется для остановки вывода на консоль (он же «замораживает»). Это укусило меня, когда я попытался переназначить это.
Дэйв

5

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


Единственная проблема, с которой я столкнулся при использовании Cz, заключается в том, что большинство других людей используют Cb, поэтому у меня отключается мышечная память, когда парное программирование на чужой машине. В итоге мне fgприходится много бегать после ошибочного набора Cz.
Стив Йоргенсен

Смысл Cz в том, что если вы не хотите использовать Ca, он очень близок к левой клавише Ctrl, которая является единственной клавишей управления на большинстве клавиатур ноутбуков в наши дни. Также близко к Caps Lock, если у вас это сопоставлено с Ctrl. Я сопоставляю свой Caps Lock с Esc, поскольку я часто использую клавиатуру Kinesis Freestyle Solo с клавишей Esc в неудобном месте.
Стив Йоргенсен

4

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


Как вы можете определить backtick для tmux?
Александр Низу

Что-то вроде: отвяжите Cb; установить префикс -g ' '; bind '' send-prefix; см. ответ Даррена Холла выше.
Блюхавана

Я с backtick в течение года, и я никогда не вернусь к префиксу с двумя ключами / комбо. Попробуйте.
лазурь

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


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

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.


действительно, я использую значение по умолчанию (на экране, никогда не пробовал tmux) и пока не нашел необходимости его изменить.
Квик-кихот

2

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

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

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

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


2

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

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


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.


Я тоже этим пользуюсь. C-Space довольно легко печатать.
kzh

Задний ход довольно хорош. Однако, как оказалось, он не очень дружелюбный. Вы определенно не ошибетесь с xterm в linux, но у таких терминалов, как putty и iTerm2 (macos), есть проблемы, правильно имитирующие его. К счастью, в iTerm2 вы можете обойти это в конфигурации. Я не часто использую windows / putty, поэтому ctrl-space кажется приемлемым решением. :)
Алекс

1

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

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

1

Для экрана GNU, отображающего обратную галочку для выхода, у меня работает следующее в ~ / .screenrc.

escape ``

0

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


Пожалуйста, не называйте ответы «выше» и «ниже», так как порядок может измениться. Ссылка вместо ответа. Спасибо за ваш ответ :)
Flow

0

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

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

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


Определите клавиатуру Mac ;-)
Арджан

Хорошо, у вас есть точка зрения, я имел в виду раскладку клавиатуры Apple Mac US, хотя независимо от полностью расширенной или клавиатуры MacBook.
Великолепно
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.