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

мой хостер недавно обновлен до Нового CentOS, и я "персонализировал" его, и теперь мне что-то не хватает.

на моем домашнем сервере Ubuntu я могу forward-word и backward-word С ALT + право/левый. Я ничего не сделал для этого. Я тоже могу ALT + BACKSPACE удалить слово.

на моем новом CentOS я могу сделать ALT + BACKSPACE, но я не могу получить ALT + право/левый работает! 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
"ee[C": forward-word
"ee[D": backward-word

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

26
задан Canadian Luke
24.03.2023 14:16 Количество просмотров материала 3170
Распечатать страницу

3 ответа

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

итак, очень хорошим источником информации является man readline. Привязки клавиш, указанные в различных inputrc файлы контролируют работу библиотеки bash readline. В соответствии с 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"

страница man также сообщает, что файл конфигурации по умолчанию ~/.inputrc так что я рекомендую размещение Привязок там.

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

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

$ read
^[[1;5D

in aterm:

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

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

в любом случае, чтобы связать управления -левый to forward-word в пути, который работает для всех, я добавил Эти строки в мой ~/inputrc:

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

по причинам, которые я не до конца понял,управления представлен \e, который должны be Esc.

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

"\e[1;5D": backward-word
"\eOd": backward-word
"\e[1;5C": forward-word
"\eOc": forward-word
8
отвечен terdon 2023-03-25 22:04

как это сделать в 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+→ (стрелка вправо) и Alt/Ctrl+ к стандартным командам readline Meta+F и Meta+B. В примере ниже предполагается, что escape-ключ является meta. Для этого откройте Iterm2.

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

key mapping window example

как отобразить ярлыки на не-escape-последовательности (Ctrl,Alt,Cmd, п.)

  1. скачать "коды клавиш" из app store. Установите его и откройте его.
  2. в то время как в окне кодов открытого ключа, нажмите Ctrl+[ключевых] в данном случае я буду использовать Ctrl+W для удаления предыдущего слова в readline.
  3. обратите внимание на поле "Unicode".
  4. теперь сопоставьте свою последовательность клавиш, используя в iterm, preferences - >Keys - >+ (предоставленная последовательность выше.)
  5. введите "сочетание клавиш" поле что-то вроде в этой ситуации Opt+Backspace.
  6. изменить "действие" на "Отправить код".
  7. введите в последнем поле ранее отмеченный hex; в этом случае 23/0x17.
  8. нажмите "OK", и ярлык теперь должен работать в окне вашего терминала и работать на любой системе, где доступна readline.
1
отвечен N D 2023-03-26 00:21

Спасибо за вопрос. Имел эту проблему с замазкой на CentOS 7 и решить, добавив Это внутри $if mode=emacs условное:

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

активировать параметр С Ctrl + X затем Ctrl + R

0
отвечен Walf 2023-03-26 02:38

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх