Экран Bash vs. Gnu: замените Ctrl-A на Ctrl-Shift-A

44

Я новый пользователь экрана GNU. Я использую Bash очень долгое время и хочу попробовать GNU Screen.

Как вы знаете, GNU Screen использует 'Ca' (Control-A) в качестве командного символа. Проблема в том, что это мешает функции редактирования строки в Bash (и GNU Readline), потому что Control-A в Bash переместится в начало строки ».

Я знаю, что могу установить для командного символа другую последовательность клавиш , например «^ Q» или «` `» (Backtick), но у меня возникают проблемы с поиском другой последовательности клавиш, которая еще не используется (^ Q используется терминалом , backtick используется при написании сценариев оболочки). Похоже, что командный символ может быть только один или два символа в длину. Могу ли я установить символ управления экраном GNU на что-то вроде «Control-Shift-A»?

(Я не могу использовать более одной гиперссылки, поэтому я не могу ссылаться на документацию Bash)

Стефан Ласевский
источник
5
Во screenизбежание дезориентации при использовании в других системах вам лучше придерживаться стандартных сочетаний клавиш или, по крайней мере, сначала изучить их. ^A aПо умолчанию отправит обычный ^Aключ комбо. Это немного неудобно, если вы часто используете эту комбинацию; Я обычно использую HOMEключ вместо этого из-за этого. Но тогда это тоже не всегда работает.
интуитивно
Здесь нет любви к Ctrl-пробелу. Работает отлично.
Подстановочный

Ответы:

18

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

Вы можете использовать Cq, если stty -ixonотключите «управление потоком программ» на tty. Обычно я делаю это, чтобы использовать C для поиска в командной строке.

Вы могли бы рассмотреть C- ^, так как он, кажется, обычно не связан. Это Control- Shift- 6на раскладках клавиатуры США, но это может быть трудно печатать на других раскладках.

Большинство людей никогда не используют управляющий символ tty C- \ для отправки SIGQUIT. Чтобы использовать его, отключите функциональность tty с помощью stty quit undefи привязайте его в качестве префиксного ключа. Это немного рискованно, так как, если вы нажмете C- \ на tty, где клавиша выхода не была отключена с помощью stty , вы можете убить процесс переднего плана вместо активации экрана .

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

Кстати, автор tmux использует Ca в своих основных сеансах и всегда дважды вводит Ca (независимо от того, используется ли сеанс tmux или нет). Если вы готовы принять эту привычку, это кажется достойным компромиссом, так как второй Ca должен быть недоступен в большинстве Emacs-подобных контекстов редактирования. Это не сработает, если вы будете часто использовать программы / контексты вне экрана, где второй Ca не будет запрещен.

По умолчанию Ca Ca связан с другой командой (переключиться на самый последний активный экран) на экране . Чтобы Ca Ca послал реальный Ca и у вас были окна переключения Ca o, добавьте следующее .screenrc:

escape ^A^A
bind o other
Крис Джонсен
источник
2
Это звучит хорошо, тогда я понял, что в GNU Screen, дважды нажав Ca, вы переключитесь в окно, отображаемое ранее. Может быть, я могу сопоставить «Ca Ca» с чем-то другим, хотя я не совсем уверен, как это сделать (похоже, мне нужно указать для этого «escape xy» или «meta»). См. Gnu.org/software/screen/ manual / screen.html # Другое окно
Стефан Ласевский
1
@Stefan Lasiewski: Ой, я забыл, что Ca Ca не отправляет Ca по умолчанию. См. Дополнение в конце ответа, чтобы немного узнать о конфигурации, которая заставляет Ca Ca отправлять Ca и Ca o в предыдущее окно.
Крис Джонсен
Работает отлично! Ca Ca отправит фактический Ca в нижележащую оболочку, а Ca o 'переключится в другое окно. Чтобы послать «Ca» Башу, дважды нажмите «Ca». Это должно быть запрещено вне экрана и не должно вызывать проблем.
Стефан Ласевский
41

Нет необходимости в обходном пути.
Чтобы перейти к началу строки при использовании экрана в bash, используйте

Control- A(отпустите, а затем)A


В общем случае, если существует символ управления экраном, конфликтующий с ярлыком bash, первый ярлык bash Controlбудет заменен на Control-A

Аналогично для других ярлыков редактирования строки.

skyshock21
источник
спасибо, я не сделал этого сейчас, хотя это так просто. на самом деле не нужно ничего перенастраивать. мне больше нравится ваш ответ
Харальд
+1 ты - это, безусловно, лучший вариант. Забавно то, что, пробуя это, я случайно попал в Ca Ca и нашел еще одну замечательную комбинацию.
kfmfe04
3

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

MikeHoss
источник
3

Я использую это.screenrc

escape ^bb

Пример: чтобы отсоединить, вы набираете ctrl-b d

guettli
источник
0

Я использую Ctrl-_ (который также может быть произведен с помощью Ctrl + 7 и обычно Ctrl + /) с screen / tmux.

graywh
источник
0

Я использую Ctrl-Z большую часть времени, но для некоторых также использую Ctrl-X. Я не так часто использую прерывание «стоп», но когда это необходимо, я могу набрать ^ zz. Это также позволяет мне запускать сеансы вторичного экрана на удаленных серверах, которые используют ctrl-a по умолчанию. И если я начну третий сеанс (на третьем сервере), то я могу использовать Ctrl-X. Ctrl-x - это функция блокировки экрана, которая во многих средах не совсем обычна (поскольку экран часто запускается внутри эмулятора терминала).

Arcege
источник