Ключ удаления не работает в командной строке

** Примечание. Я задал тот же вопрос о SuperUser, но не получил никакого ответа. Теперь я понимаю, что это более подходящий форум для этого конкретного вопроса. *

В оболочке ksh клавиша Delete не работает должным образом в командной строке. Я получаю ~, когда я нажимаю Delete.

Как мне:

  1. связать функциональность «Удалить символ с помощью курсора» на кнопку «Удалить клавиатуру»? (Control-D ведет себя так, как я ожидаю, что кнопка удаления будет работать, и мои попытки использовать псевдоним оказались безуспешными и, скорее всего, наивными).
  2. связать функциональность « Переместить в первую строку» на кнопку «Домашняя клавиатура»? (Control A делает это сейчас, но я хочу, чтобы Home сделал это.)
  3. связать функциональность « Переместить в конец строки » на кнопку «Завершить клавиатуру»? (Control E делает это сейчас, но я хочу, чтобы это закончилось).

Финальное (?) Обновление

Я наткнулся на что-то, что работает, но я не понимаю, почему. Это работает:

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

Согласно http://www.qnx.com/developers/docs/6.3.2/neutrino/utilities/k/ksh.html#bind ,

 prefix-2 Key binding: ^X, ^[[ Introduces a 2-character command sequence. 

Поэтому мой обновленный вопрос: зачем мне использовать prefix-2 для этого? Пожалуйста, переведите для меня, чтобы я мог понять, поэтому мне не нужно снова обманывать всех об этом.

СТАРЫЙ СТУДЕНТ ПОСЛЕДУЕТ

ОБНОВИТЬ

Оказывается, что ESC в QNX есть ^[ . Используя команду bind '^[[3~'='delete-char-backward' Я могу получить курсор для перезаписи символа под курсором с помощью символа ~ . По крайней мере, это какой-то прогресс – теперь я знаю, как написать « Удалить ключ» для оболочки. Большинство вещей, которые я видел в Интернете, говорят, что клавиша delete ^? , но это не работает для меня. Кроме того, я должен упомянуть, что я обращаюсь к этому через PuTTy.

Я не понимаю, потому что Control D делает то, что я хочу, чтобы ключ удаления делал. Я попробовал eot-or-delete его к eot-or-delete снова безрезультатно.

Это должно быть просто, не так ли?

ОБНОВЛЕНИЕ 2:

  bind | grep prefix ^X = prefix-2 ^[ = prefix-1 ÿ = prefix-3 ^[O = prefix-2 ^[[ = prefix-2 bind | grep '[^ -~]' ÿ = prefix-3 à = beginning-of-line à¡ = up-history ठ= backward-char ঠ= forward-char ਠ= end-of-line à© = down-history ଠ= delete-char-forward à´ = backward-word ච= forward-word 

ОБНОВЛЕНИЕ 3: Больше моих настроек

Настройка ENV

  echo $ENV /etc/kshrc 

BIND Complete Output

 bind ^A = beginning-of-line ^B = backward-char ^C = abort ^D = eot-or-delete ^E = end-of-line ^F = forward-char ^G = abort ^H = delete-char-backward ^I = complete ^J = newline ^K = kill-to-eol ^L = redraw ^M = newline ^N = down-history ^O = newline-and-next ^P = up-history ^R = search-history ^T = transpose-chars ^U = kill-line ^V = version ^W = kill-region ^X = prefix-2 ^Y = yank ^[ = prefix-1 ^\ = no-op ^] = search-character-forward ^^ = quote ^_ = eot ^? = delete-char-backward ÿ = prefix-3 ^[^H = delete-word-backward ^[^X = complete-file ^[^[ = complete ^[^] = search-character-backward ^[ = set-mark-command ^[# = comment ^[* = expand-file ^[. = prev-hist-word ^[0 = set-arg ^[1 = set-arg ^[2 = set-arg ^[3 = set-arg ^[4 = set-arg ^[5 = set-arg ^[6 = set-arg ^[7 = set-arg ^[8 = set-arg ^[9 = set-arg ^[< = beginning-of-history ^[= = complete-list ^[> = end-of-history ^[? = list ^[C = capitalize-word ^[L = downcase-word ^[O = prefix-2 ^[U = upcase-word ^[[ = prefix-2 ^[_ = prev-hist-word ^[b = backward-word ^[c = capitalize-word ^[d = delete-word-forward ^[f = forward-word ^[g = goto-history ^[h = delete-word-backward ^[l = downcase-word ^[u = upcase-word ^[y = yank-pop ^[^? = delete-word-backward ^X^X = exchange-point-and-mark ^X^Y = list-file ^X^[ = complete-command ^X? = list-command ^XA = up-history ^XB = down-history ^XC = forward-char ^XD = backward-char ^XH = beginning-of-line ^XP = delete-char-forward ^XY = end-of-line ^Xc = forward-word ^Xd = backward-word ^Xw = end-of-line à = beginning-of-line à¡ = up-history ठ= backward-char ঠ= forward-char ਠ= end-of-line à© = down-history ଠ= delete-char-forward à´ = backward-word ච= forward-word 

/ И т.д. / kshrc

 /etc # cat kshrc case $- in *i*) export SHELL_COLOR_BLUE="print -n \\033[0;34m" export SHELL_COLOR_GREEN="print -n \\033[0;32m" export SHELL_COLOR_RED="print -n \\033[0;31m" export SHELL_COLOR_LIGHTGRAY="print -n \\033[0;37m" export SHELL_COLOR_YELLOW="print -n \\033[1;33m" export COLOR_BLACK="\\033[0;30m" export COLOR_BLUE="\\033[0;34m" export COLOR_GREEN="\\033[0;32m" export COLOR_CYAN="\\033[0;36m" export COLOR_RED="\\033[0;31m" export COLOR_PURPLE="\\033[0;35m" export COLOR_BROWN="\\033[0;33m" export COLOR_LIGHTGRAY="\\033[0;37m" export COLOR_DARKGRAY="\\033[1;30m" export COLOR_LIGHTBLUE="\\033[1;34m" export COLOR_LIGHTGREEN="\\033[1;32m" export COLOR_LIGHTCYAN="\\033[1;36m" export COLOR_LIGHTRED="\\033[1;31m" export COLOR_LIGHTPURPLE="\\033[1;35m" export COLOR_YELLOW="\\033[1;33m" export COLOR_WHITE="\\033[1;37m" if [[ `id -u` -eq 0 ]]; then export PS1=`$SHELL_COLOR_RED`'$(hostname -s):'`$SHELL_COLOR_YELLOW`'$(pwd) # '`$SHELL_COLOR_LIGHTGRAY` else export PS1=`$SHELL_COLOR_BLUE`'$(hostname -s):'`$SHELL_COLOR_GREEN`'$(pwd) $ '`$SHELL_COLOR_LIGHTGRAY` fi esac 

Настройки PuTTy:

введите описание изображения здесь

Заметки, которые могут иметь значение или могут не иметь значения, но могут предоставить фон:

Оболочка – «PD KSH v5.2.14 99/07 / 13.2». Да, у меня нет возможности обновить … это встроенная система. «Получить современную оболочку» – не жизнеспособный ответ. Операционная система – QNX Neutrino 6.4.1.

bind показывает следующее:

  bind | grep del ^D = eot-or-delete ^H = delete-char-backward ^? = delete-char-backward ^[^H = delete-word-backward ^[d = delete-word-forward ^[h = delete-word-backward ^[^? = delete-word-backward ^XP = delete-char-forward ଠ= delete-char-forward 

infocmp показывает следующее:

 infocmp # Reconstructed via infocmp from file: /usr/lib/terminfo/x/xterm xterm|vs100|xterm terminal emulator, am, km, mir, msgr, xenl, xon, cols#80, it#8, lines#65, vt@, acsc=Oa``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=@, bold=\E[1m, clear=\E[H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K$<3>, enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[2~, il=\E[%p1%dL, il1=\E[L, ind=^J, is1=\E=\E[?1l, kBEG=\ENn, kCPY=\ENs, kCRT=\ENt, kDL=\ENv, kEXT=\ENw, kFND=\ENx, kHLP=\ENy, kOPT=\ENz, ka3=\EOs, kb2=\EOr, kbs=^H, kc1=\EOq, kcan=\EOm, kclo=\ENc, kclr=\ENa, kcmd=\EOu, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kend=\E[9, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\ENf, khlp=\ENh, khome=\E[8, khts=\ENb, kich1=\E[2~, kmov=\ENi, kmrk=\ENm, kmsg=\ENe, knp=\E[6~, kopn=\ENo, kopt=\ENk, kpp=\E[5~, kref=\ENl, kres=\ENp, krfr=\ENg, krpl=\ENr, krst=\ENj, ksav=\ENq, kslt=\EOM, ktbc=\ENd, kund=\ENu, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l, rmkx=\E>, rmso=\E[m, rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H, rs2=@, sc=\E7, setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m, sgr0=\E[m, smacs=^N, smam=\E[?7h, smkx=\E=, smso=\E[7m, tbc=\E[3g, 1 infocmp # Reconstructed via infocmp from file: /usr/lib/terminfo/x/xterm xterm|vs100|xterm terminal emulator, am, km, mir, msgr, xenl, xon, cols#80, it#8, lines#65, vt@, acsc=Oa``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=@, bold=\E[1m, clear=\E[H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K$<3>, enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[2~, il=\E[%p1%dL, il1=\E[L, ind=^J, is1=\E=\E[?1l, kBEG=\ENn, kCPY=\ENs, kCRT=\ENt, kDL=\ENv, kEXT=\ENw, kFND=\ENx, kHLP=\ENy, kOPT=\ENz, ka3=\EOs, kb2=\EOr, kbs=^H, kc1=\EOq, kcan=\EOm, kclo=\ENc, kclr=\ENa, kcmd=\EOu, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kend=\E[9, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\ENf, khlp=\ENh, khome=\E[8, khts=\ENb, kich1=\E[2~, kmov=\ENi, kmrk=\ENm, kmsg=\ENe, knp=\E[6~, kopn=\ENo, kopt=\ENk, kpp=\E[5~, kref=\ENl, kres=\ENp, krfr=\ENg, krpl=\ENr, krst=\ENj, ksav=\ENq, kslt=\EOM, ktbc=\ENd, kund=\ENu, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l, rmkx=\E>, rmso=\E[m, rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H, rs2=@, sc=\E7, setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m, sgr0=\E[m, smacs=^N, smam=\E[?7h, smkx=\E=, smso=\E[7m, tbc=\E[3g, 1 infocmp # Reconstructed via infocmp from file: /usr/lib/terminfo/x/xterm xterm|vs100|xterm terminal emulator, am, km, mir, msgr, xenl, xon, cols#80, it#8, lines#65, vt@, acsc=Oa``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, blink=@, bold=\E[1m, clear=\E[H\E[2J, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K$<3>, enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[2~, il=\E[%p1%dL, il1=\E[L, ind=^J, is1=\E=\E[?1l, kBEG=\ENn, kCPY=\ENs, kCRT=\ENt, kDL=\ENv, kEXT=\ENw, kFND=\ENx, kHLP=\ENy, kOPT=\ENz, ka3=\EOs, kb2=\EOr, kbs=^H, kc1=\EOq, kcan=\EOm, kclo=\ENc, kclr=\ENa, kcmd=\EOu, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kend=\E[9, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\ENf, khlp=\ENh, khome=\E[8, khts=\ENb, kich1=\E[2~, kmov=\ENi, kmrk=\ENm, kmsg=\ENe, knp=\E[6~, kopn=\ENo, kopt=\ENk, kpp=\E[5~, kref=\ENl, kres=\ENp, krfr=\ENg, krpl=\ENr, krst=\ENj, ksav=\ENq, kslt=\EOM, ktbc=\ENd, kund=\ENu, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l, rmkx=\E>, rmso=\E[m, rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H, rs2=@, sc=\E7, setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m, sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m, sgr0=\E[m, smacs=^N, smam=\E[?7h, smkx=\E=, smso=\E[7m, tbc=\E[3g, 

stty показывает следующее:

 stty Name: /dev/ttyp0 Type: pseudo Opens: 2 +edit +echok +echonl +osflow intr=^C quit=^\ erase=^? kill=^U eof=^D start=^Q stop=^S susp=^Z lnext=^V min=01 time=00 pr1=^[ pr2=5B left=44 right=43 up=41 down=42 ins=40 del=50 home=48 end=59 

Для гуглеров:

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

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

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

И установите для своих настроек терминала PuTTy значение rxvt вместо Standard .

Настройки PuTTy

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

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

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