Який найменш конфліктний префікс / послідовність втечі для екрана чи 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 ...
Kache,

3
"якщо він знаходиться в зручному положенні на розкладці вашої клавіатури", за замовчуванням це не так, ви маєте на увазі, що є якийсь популярний перескладання, який ви використовуєте, що робить C- \ зручним?
сюжетний піксель

53

Для людей, які хочуть використовувати backtick як біг у tmux, вам потрібно додати:

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

Цей останній важливий, інакше ви не можете вводити backtick для інших цілей :-)


Backtick здається гарною ідеєю, поки ви не вставите якийсь SQL ...
Synchro

3
@Synchro на tmux 1.8, це вже не проблема, завдяки параметру часу припущення-вставки, який увімкнено за замовчуванням (встановлено на 1 мс). Дивіться тут: sourceforge.net/p/tmux/tmux-code/ci/…
srpill

Я знайшов це питання, шукаючи альтернативи backtick, оскільки він почав створювати проблеми після того, як я звик використовувати backticks замість $()оболонок. Крім того, це стає болем, коли ви починаєте писати багато Markdown. Я використовую його вже кілька років, але, на жаль, мені доведеться зараз його змінити.
kirelagin

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, який не потребує миші). Я використовував 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відповідно,
блокблок

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 (2 операції вручну для більшості екранних дій).

Я перев’язую 's' на екран 1 так, щоб нові сеанси створювалися зліва направо на клавіатурі, починаючи з 1. Це дозволяє мені зарезервувати екран 0 для того, що я вважаю стійким або довідковим вікном. Дуже швидко одним жестом вручну (backtick) 1, (backtick) 2, (backtick) 3 поміняти місцями між вікнами.

Проблема з використанням backtick в unix-середовищі полягає в спробі вирізати та вставити код скрипту оболонки / perl. З цієї причини я пов'язую клавішу F11 / F12 для переключення між моїми символами втечі.

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

Це дозволить поміняти підхід до 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"

Творче рішення. Я вражений.
статистика

bind-key -n F11 set -g префікс `bind-key -n F12 set -g префікс Co Оновлення для tmux у випадку, якщо інші хочуть адаптувати це.
доярок

1
Чи є спосіб встановити якийсь мінімальний час очікування для префікса + комбі-комната 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, він майже ніде не використовується.
mahdix

1
C-space ідеально підходить для мене, оскільки я перебуваю на Chromebook: D
Ерік Нгуен

6

Запізніле пропозицію: ctrl-s. ctrl-sмає ряд переваг:

  1. На домашньому ряду.
  2. Все ще близько ctrl-a(насправді, для більшості машинок він буде використовувати ті самі два пальці, які вони використовували ctrl-a), тому перехід м’язової пам’яті з " ctrl-aна" ctrl-sє тривіальним - для мене це стало другою природою протягом приблизно години після першої спроби.
  3. Звільняє ctrl-aоперації в стилі emacs "назад до початку рядка" або vim-стилі "збільшення номера". Або ей, для запуску екрана всередині області tmux, не потрібно турбуватися про уникнення символів префікса для управління вбудованим екземпляром екрана. (Я часто роблю це за допомогою локального tmux з панелями, що містять ssh-сеанси на віддалені сервери, на яких я запускаю екран)
  4. Не скасовує та не додає простір-вимоги до будь-яких інших часто використовуваних функцій терміналу. нічого, що сьогодні застосовує переважна більшість людей, не працює на ctrl-s!

Звичайно, причиною того, що в ctrl-s нічого не вказано, є те, що в терміналі він традиційно використовується для контролю потоку, починаючи з днів до того, як інструменти пейджингового сповіщення як moreі lessбули загальними. Я впевнений, що в деяких термінальних програмах GUI десь все ще є функція контролю потоку, включена за замовчуванням, але я насправді не натрапив на одну; Програми терміналу gui, які я намагався, начебто повністю ігнорують його за замовчуванням, що робить зручну комбінацію клавіш доступною для більш продуктивного використання.

Отже, якщо ви насправді не використовуєте screen / tmux зсередини (наприклад) необробленого терміналу Linux, а скоріше з терміналу на основі GUI, то рекомендую 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) використовується, і тоді вам просто потрібно набрати його двічі для фактичного бейтіка. Можливо, краще для користувачів vi, які звикли до дії (якщо ви не робите Caps lock).


Як можна визначити backtick для tmux?
Олександр Нізо

Щось на кшталт: відкрутити Cb; set -g префікс ' '; bind '' send-prefix; див. відповідь Даррена Хола вище.
bluehavana

Я працюю з 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

Для розкладки клавіатури програміста Dvorak досить акуратно використовувати мінус (тире) як префікс, тобто 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 є вибір усіх, але я не вважав це проблемою із програмами, з якими використовую tmux.


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

2

Як користувач GNU emacs, zsh та MS Windows, я використовую Control-T. (наприклад, у .screenrc :)

втеча "^ T ^ T"

Так, у Control-T це щось пов'язане, як-от спадне меню у здатності Ubuntu або перенесення символу в Emacs.

Я проігнорував Co, тому що для мене потрібні дві руки.


2

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

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


1

Можна використовувати backtick. Деякі старіші версії tmux не підтримують зворотного вибору, тому ви можете виконати наступні способи вирішення проблеми (це додало б C-`, C- @ і C-простір як ваш мета одночасно):

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

Я зазвичай перевпорядковую CapsLock до Ctrl, тому це має ще більше сенсу з backtick.


Я також цим користуюся. C-Space досить легко набрати.
кж

Зворотний вибір досить непоганий. Однак це не термінально дружнє, як виявляється. Ви точно не можете помилитися з 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


Будь ласка, не посилайтеся на відповіді "вище" та "знизу", оскільки порядок мінявся. Зв’яжіть відповідь замість цього. Дякуємо за вашу відповідь :)
Потік

0

Я думаю, що користувачі Mac знайдуть §зручніше, ніж backtick.

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

Використання клавіш backtick на клавіатурах Mac є складним, оскільки він розташований дуже близько до лівого (⇧) зрушення, (⌃) управління та (⌥) клавіш Alt. На MacBooks навіть біля лівої fnклавіші.


Визначте клавіатуру Mac ;-)
Арджан

Гаразд, у вас тут справа, я мав на увазі розкладку клавіатури Apple Mac від США, хоча незалежно від повної розширеної або клавіатури macbook.
nanitous
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.