Клавиша Delete не работает над командной строкой

Использование Xubuntu upstart, таким образом, необходимо использовать

sudo service gdm stop

или

sudo service lightdm stop

завися, если Вы используете Ubuntu 11.04 (или предшествующие) или Ubuntu 11.10.

10
06.03.2013, 23:15
4 ответа

Для сотрудников Google:

Ух. Для чего-то, что должно быть настолько просто, это было твердо.

Коротким решением является использование следующее для установки клавиши Delete (в kshrc или везде, где),

bind '^[[3'=prefix-2
bind '^[[3~'=delete-char-forward

И набор Ваши настройки терминала PuTTy к rxvt вместо Standard.

PuTTy settings

Эта вещь, которая действительно помогла мне получить эту работу, была: http://www.mail-archive.com/misc@openbsd.org/msg81796.html

ksh делает глупые вещи с клавишами Home и клавишами End. В основном я не мог заставить его сказать различие между Домом, Концом, и Удалить одновременно. Независимо от того, что было в последний раз связано, все три ключа сделают. Изменение, что PuTTy послал за этими ключами, помогло очень.

Примечание: Некоторые люди предлагают, если Вы хотите видеть то, что кодирует оболочку, добирается, когда Вы нажимаете клавишу, ввести cat, нажмите Enter, затем продвиньте ключ. Для моей оболочки это не работало. Я добрался ~ для всех клавиш CTRL. Что я сделал вместо этого было нажатие Esc однажды, затем нажмите клавишу. Код управления показал бы, затем обнаруживаются. Используйте тот код управления в bind и Вы все установлены.

6
27.01.2020, 20:03
  • 1
    , я могу подтвердить, что это работает в Conemu + Cygwin также. –  Janac Meena 18.10.2017, 22:13

Существующие два ответа не сработали для меня при переходе с Linux (Ubuntu 18.10 )bash через SSH на Solaris 11.3 bash с использованием терминала gnome.

Я обнаружил, что мне нужно использовать команду bind, но с работой -, так как я не мог заставить работать родную Удалить .

Таким образом, работа -заключается в том, что при нажатии Удалить имитировать удаление путем сопоставления нажатия клавиши удаления с и . Возврат .

bind '"^[[3~":"^[[C^?"'

Чтобы ввести это, используйте клавишу -нажмите:

CTRL -vУдалить для первой части
и CTRL -vCTRL -vBackspace для второго.
(или вместо этого используйте \eдля побега, например.:"\e[3~")

Это не идеально, если вы удалите в конце -строки -, он все равно будет смещен. Но это избавляет меня от необходимости нажимать -на символ ~бесчисленное количество раз в день.

2
27.01.2020, 20:03

Если оболочка запущена в окне терминала gnome , затем перейдите в меню:Edit| Preferences| Profilesи выберите профиль, затем выберите вкладку Compatibilityи измените Delete key generatesна Automatic. (Или, если это не помогло, попробуйте другие варианты.)


Кроме того, вы можете ввести ^v Delи ^v Backspace, (, т.е. Control -v с последующим нажатием клавиши удаления и Control -v с последующим нажатием клавиши Backspace ), чтобы найти возвращенный «терминальные» коды последовательности.


А для проверки используйте командуshowkeyкак showkey -s, showkey -kи/или showkey -a(, т.е. три слоя ), а затем нажмите клавиши Delи Backspaceдля:

I )необработанный вывод с клавиатуры
II )вывод драйвера tty
III )строки символов, передаваемые терминалу (ansi )


Из этого я заметил, что при использовании stty (, например. stty1 ), что поведение моей оболочки отличается от поведения при использовании xterm (из графического X-терминала ). Del правильно удалил вперед (вправо )в stty1, но назад (влево )в моем xterm.

4
27.01.2020, 20:03

Согласно man kshв моей системе Debian 10, prefix-1"вводит последовательность команд из 2 -символов" и prefix-2"вводит последовательность команд из нескольких -символов". По сути, они сообщают оболочке: «Пока не обрабатывайте это, должна быть более длинная последовательность символов -, дождитесь полной последовательности».

Современные терминальные сеансы Unix/Linux обычно работают на эмуляторах терминала:они по существу эмулируют (расширенную версию )некоторого типа компьютерного терминала , подключенного через последовательный порт. Со многими терминалами сопоставление между клавишами клавиатуры и символами, отправляемыми на компьютер, не было строго один -на -один :, потому что не существовало стандартизированных управляющих символов ASCII для всех различных несимвольных клавиш терминала -. клавиатуре, некоторые клавиши будут отправлять последовательности из нескольких символов -. Функциональные клавиши, клавиши со стрелками, Home , End , Insert , Delete , PgUp и PgDn принадлежат к этой группе.

Клавиша Esc представлена ​​как ^[, другими словами Control + [ . И когда вы посмотрите на таблицу кодов ASCII, вы увидите, что клавиша Control по существу вычитает 64 (, т.е. инвертирует один бит )из значения обычного символа, объединенного с ним.Итак, ^[— это всего лишь один управляющий символ ASCII со специальным именем «ESC».

Ваш вывод bind | grep prefixуказывает, что ^[уже распознан как prefix-1, а ^[[как prefix-2.

Клавиша Удалить фактически отправляет последовательность, эквивалентную Esc [3~.

Итак, оболочка должна анализировать его по одному символу/байту за раз, вот так:

  1. получено Esc:также известное как ^[, совпадает с prefix-1, поэтому дождитесь еще хотя бы одного символа и объедините его с ним
  2. получил [:в сочетании с предыдущим символом префикса, это ^[[соответствует prefix-2, поэтому подождите еще и продолжайте комбинировать символы.
  3. получил 3:в сочетании с предыдущими префиксами это ^[[3, что снова prefix-2, так что продолжайте ждать и комбинировать.
  4. получил~:теперь результирующая комбинация ^[[3~, которая теперь соответствует привязке для delete-char-forward.
1
18.06.2020, 12:05

Теги

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