Включите alt / ctrl + left / right в командной строке CentOS

5084
Rudie

Мой хостер недавно обновился до нового CentOS, и я «персонализировал» его, и теперь я что-то упускаю.

На моем домашнем Ubuntu Server я могу forward-wordи backward-wordс ALT+ RIGHT/ LEFT. Я ничего не делал для этого. Я также могу ALT+ BACKSPACEудалить слово.

На моем новом CentOS я могу сделать ALT+ BACKSPACE, но я не могу заставить работать ALT+ RIGHT/ LEFT! ALT+ B/ Fработать, но это просто неприемлемо, потому что это работает только для левого, ALTи мои пальцы не такие худые. (вправо ALT+ B/ Fпросто печатает "b" или "f")

Я пытался скопировать часть / etc / inputrc в CentOS, но это ничего не дает.

ALTили CTRL, мне все равно, но мне действительно нужен ярлык. У последнего CentOS его не было, но с Ubuntu я скучал по CentOS.

Мой CentOS /etc/inputrc:

"\e[5C": forward-word "\e[5D": backward-word "\e[1;5C": forward-word "\e[1;5D": backward-word 

Моя Ubuntu /etc/inputrc:

"\e[1;5C": forward-word "\e[1;5D": backward-word "\e[5C": forward-word "\e[5D": backward-word "\e\e[C": forward-word "\e\e[D": backward-word 

Я даже не знаю, что они все значат !? Что [1;5Cза ключ ??

7
Я просто использую первые 2 строки (`\ e [1; 5C` и` \ e [1; 5D`), которые вы цитируете из вашего Ubuntu inputrc в моем `~ / .inputrc`, и он отлично работает для debian, ubuntu и arch , terdon 11 лет назад 0
Для `ALT` или` CTRL`? Так как они там, они должны работать, вы не думаете? Два из них должны быть `B` и` F`, я думаю. Линукс странный. Rudie 11 лет назад 0
Они работают на `CTRL`. Я считаю, что порядок важен, один может перезаписать другой. Кроме того, локальные файлы настроек (например, `~ / .inputrc`) имеют приоритет над общесистемными, поэтому, если есть странный конфликт, где-то локальный файл может это исправить. terdon 11 лет назад 0

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

8
terdon

Благодаря вашему вопросу я наконец-то прочитал и расширил понимание, ура!

Итак, очень хороший источник информации man readline. Привязки клавиш, указанные в различных inputrcфайлах, управляют работой библиотеки чтения строк BASH. В соответствии с man-страницей readline вы можете использовать либо символические имена клавиш, либо escape-последовательности:

 Key Bindings The syntax for controlling key bindings in the inputrc file is simple. All that is required is the name of the command or the text of a macro and a key sequence to which it should be bound. The name may be specified in one of two ways: as a sym‐ bolic key name, possibly with Meta- or Control- prefixes, or as a key sequence. The name and key sequence are separated by a colon. There can be no whitespace between the name and the colon.  When using the form keyname:function-name or macro, keyname is the name of a key spelled out in English. For example:  Control-u: universal-argument Meta-Rubout: backward-kill-word Control-o: "> output" 

На странице руководства также указано, что файл конфигурации по умолчанию - это, ~/.inputrcпоэтому я рекомендую разместить там ваши привязки.

Если вы хотите использовать обычные буквенные клавиши (например, Control- g), Control-g: forward-wordработает нормально. Клавиши со стрелками сложнее. Я попытался и не смог найти название клавиши для клавиш со стрелками. Ни один из тех, которые я пробовал ( left-arrow, left, :left) работал так, кажется, что мы застряли с управляющими последовательностями.

К сожалению, точная escape-последовательность отличается в терминальных эмуляторах (именно поэтому ваш Ubuntu inputrc имел несколько строк). Для того, чтобы выяснить, какой побег последовательность ваш любимый терминал использует, запустите readи введите последовательность клавиш вы заинтересованы в В. terminator, xtermИ gnome-terminal, Control- Leftдать:

$ read ^[[1;5D 

в aterm:

$ read ^[Od <-- that is a capital O not a zero (0). 

Немного поэкспериментировав, я понял, что ^[[Dесть Leftи ^[[1;5Dесть Control- Left. Первый ^[- это Escключ, используемый здесь, я полагаю, для обозначения escape-последовательности .

В любом случае, для привязки Control- Leftк forward-wordтаким образом, что работает для всех, я добавил эти строки к моему ~/inputrc:

"\e[1;5D": backward-word "\eOd": backward-word 

По причинам, которые я до конца не поняла, Controlпредставляется то, \eчто должно быть Esc.

Мой последний ~/.inputrcфайл, который работает для всех терминалов, перечисленных выше:

"\e[1;5D": backward-word "\eOd": backward-word "\e[1;5C": forward-word "\eOc": forward-word 
ДА ДА ДА! Ты мой абсолютный герой! Теперь это прекрасно! Моя крошечная воздушная клавиатура теперь использует правые клавиши Ctrl +, а моя основная / настольная клавиатура теперь использует левые клавиши Alt + стрелки. Отлично!! Каким-то образом правая клавиша моей воздушной клавиатуры ничего не вызывает в `read` ... Возможно, ошибка клавиатуры (какая-то специальная функция !?). Потрясающие! Вы человек! Rudie 11 лет назад 1
Мои настройки немного отличаются между прочим: ctrl left / right: `\ eOD` /` \ eOC` и alt left / right: `\ e \ e [D` /` \ e \ e [C`. Слава богу, это читабельный, разумный синтаксис, как этот, верно !? Linux качается! Rudie 11 лет назад 0
Да, должен признать, что синтаксис мог бы быть лучше, вероятно, историческая реликвия. Рад, что это работает! terdon 11 лет назад 0
1
N D

Как это сделать в Iterm2, чтобы он работал при подключении к любому хосту.

Примечание. Я пишу это только потому, что другой вопрос ( https://superuser.com/questions/1042937/getting-ctrlarrows-to-move-word-at-a-time-on-newest-iterm2?rq=1 ) имеет связан с этим вопросом как с дубликатом, но этот вопрос не дает ответа на вопрос, как это сделать в Iterm2, поэтому он не является дубликатом.

Если вы работаете в OS X и используете Iterm2, вы можете сопоставить Alt/ Ctrl+ → (right arrow)и Alt/ Ctrl+ со стандартными командами readline Meta+ Fи Meta+ B. В приведенном ниже примере предполагается, что escape-ключ является мета-ключом. Для этого откройте Iterm2.

  1. Нажмите: Меню -> Настройки ...
  2. Нажмите вкладку «Профили».
  3. Нажмите на свой профиль или профиль по умолчанию.
  4. Нажмите на вкладку «Ключи».
  5. Нажмите знак «+» рядом с «Загрузить предустановку…»
  6. Введите комбинацию клавиш в первом поле (например, Ctrl+ )
  7. Выберите «Send Text», «Send Hex» (подробнее об отправке Hex в «Как привязать последовательность клавиш к управляющей клавише» ниже) или «Send Escape Sequence». В этом случае мы используем «Send Escape Sequence».
  8. В последнем поле выберите символы, которые readline может интерпретировать.
  9. ^[последовательность readline для escape Эта запись отображает Opt+ на Esc+ F(может быть Alt+ Fв других терминалах)

key mapping window example

Как отобразить ярлыки без управляющих последовательностей ( Ctrl, Alt, Cmdи т.д.)

  1. Загрузите «Ключевые коды» из магазина приложений. Установите его и откройте.
  2. Находясь в открытом окне Key Codes, нажмите Ctrl+ [some key], в этом случае я буду использовать Ctrl+ Wдля удаления предыдущего слова в readline.
  3. Обратите внимание на поле «Юникод».
  4. Теперь сопоставьте вашу последовательность клавиш, используя inerm, предпочтения-> Ключи -> + (последовательность приведена выше).
  5. Введите в поле «Сочетание клавиш» что-то вроде этого Opt+ Backspace.
  6. Измените «Действие» на «Отправить шестнадцатеричный код».
  7. Введите в последнем поле ранее отмеченный гекс; в этом случае 23/ 0x17.
  8. Нажмите «ОК», и ярлык должен теперь работать в окне терминала и работать в любой системе, где доступна readline.
0
Walf

Спасибо за вопрос. Была ли эта проблема с PuTTY на CentOS 7 и решена путем добавления этого внутри $if mode=emacsусловного:

# for PuTTY "\e\e[C": forward-word "\e\e[D": backward-word 

Активировал настройку с помощью Ctrl+, Xзатем Ctrl+R

Похожие вопросы