명령 행에서 Delete 키가 작동하지 않습니다 = up-history ठ= backward-char à¦

** 참고 : 슈퍼 유저에게도 같은 질문을했지만 아무런 응답이 없습니다. 나는 이것이 이것이이 특정한 질문에 더 적합한 포럼이라는 것을 알고 있습니다. *

ksh 쉘에서 Delete 키는 명령 행에서 제대로 작동하지 않습니다 . Delete 키를 누르면 ~가 나타납니다.

내가 어떻게 할:

  1. “커서에서 문자 삭제” 기능을
    키보드 삭제 버튼에 바인딩 하시겠습니까? (Control-D는 삭제 버튼이 작동하고 별칭을 사용하려는 시도가 실패하고 순진한 것처럼 작동합니다.)
  2. 첫 번째 줄로 이동 “의 기능을 홈 키보드 버튼에 바인딩 하시겠습니까? (컨트롤 A가 지금이 작업을 수행하지만 Home에서 수행하고 싶습니다.)
  3. 줄의 끝으로 이동 “기능을 종료 키보드 버튼에 바인딩 하시겠습니까? (컨트롤 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이것을 사용해야 합니까? 이해를 돕기 위해 번역 해 주시면이 문제에 대해 다시 한 번 버그를 범하지 않아도됩니다.

오래된 학생 추종자

최신 정보

QNX의 ESC는 ^[입니다. 이 명령을 사용하면 bind '^[[3~'='delete-char-backward'커서가 커서 아래의 문자를로 덮어 쓸 수 ~있습니다. 이것은 적어도 약간의 발전입니다. 이제 쉘의 Delete Key 를 철자하는 방법을 알고 있습니다. 내가 웹에서 본 대부분의 것은 delete 키가이라고 말하지만 ^?나에게는 효과가없는 것 같습니다. 또한 PuTTy를 통해 액세스하고 있다고 언급해야합니다.

Control D 가 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 완료 출력

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

/ etc / 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

퍼티 설정 :

여기에 이미지 설명을 입력하십시오

중요하거나 중요하지 않지만 배경을 제공 할 수있는 메모 :

쉘은 “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,

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


답변

Google 직원의 경우 :

아휴. 너무 단순해야하는 것이 힘들었습니다.

짧은 솔루션 (의 삭제 키를 설정하려면 다음을 사용하다 kshrc어디든지)

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

PuTTy 터미널 설정을로 rxvt대신 설정하십시오 Standard.

이 작업을 수행하는 데 실제로 도움이 된 것은 다음과 같습니다. http://www.mail-archive.com/misc@openbsd.org/msg81796.html

ksh는 홈 및 종료 키로 바보 같은 일을합니다. 기본적으로 Home, End 및 Delete의 차이점을 동시에 알 수 없었습니다. 마지막으로 바인드 된 것이 무엇이든, 세 키는 모두 할 것입니다. PuTTy가이 키들을 위해 보낸 것을 바꾸는 것은 엄청난 도움이되었습니다.

참고 : 일부 사람들은 키를 누를 때 쉘이 어떤 코드를 가져 오는지 보려면을 입력 cat하고 Enter 키를 누른 다음 키를 누릅니다. 내 껍질에는 이것이 작동하지 않았다. ~모든 컨트롤 키를 얻었 습니다. 대신 내가 Esc한 번 누른 다음 키를 누릅니다. 그런 다음 제어 코드가 표시됩니다. 해당 제어 코드를 사용 bind하면 모든 준비가 완료됩니다.


답변

[우리는 다소 다른 설정을 가지고 있지만 동일한 일반 원칙 중 일부가 적용된다고 생각하기 때문에 다음이 누군가에게 유용 할 수 있기를 바랍니다. 이것은 리눅스가 기본 터미널 I / O를 처리하는 방법에 대한 좋은 학습 경험으로 판명되었습니다.]

쉘이 그놈 터미널 창 에서 실행중인 경우Preferences | Profiles프로필을 선택한 Edit다음 Compatibility탭 을 선택한 다음로 변경 Delete key generates했습니다 Automatic. (또는 이것이 실패하면 다른 선택을 시도하십시오.)

[데비안 스트레치에 있습니다.]


나는 델이 어떻게 깨 졌는지, 심지어 언제 깨달았는지 모르지만 오른쪽보다는 왼쪽을 삭제하기 시작했습니다!

이 기사는 작업 방식을 이해하는 데 매우 도움이되었습니다 .


위의 링크 된 기사에서 제안 된 디버깅 전략을 사용했습니다.

입력 ^v Del하고 ^v Backspace[다음 Delete 키를 제어-V를 …], 반환 된 터미널 시퀀스 코드를 찾을 수 있습니다.

사용 showkey -s, showkey -k, showkey -a다음 DelBackspace키 (TTY 드라이버로부터 출력, 키보드 원료 및 단말에 특정 문자열 등) 삼층 검사.

이것에서 stty (예 : stty1)를 사용할 때 xterm을 사용할 때 (그래픽 X 터미널 내에서) 쉘 동작이 다르다는 것을 알았습니다. Del은 stty1에서 올바르게 앞으로 (오른쪽), 내 xterm에서 뒤로 (왼쪽) 삭제했습니다.


답변

기존의 두 가지 대답은 gnome 터미널을 사용하여 SSH를 통해 Linux (Ubuntu 18.10) bash에서 Solaris 11.3 bash로 이동하는 데 효과가 없었습니다.

bind명령 을 사용해야한다는 것을 알았지 만 기본 Delete기능을 사용할 수 없으므로 해결 방법 이 있습니다.

따라서 해결 방법 Delete은를 누르면 삭제 키 누르기 와를 에 매핑하여 삭제 를 시뮬레이션 하는 것 입니다.Backspace

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

입력하려면 키를 누르십시오.

CTRL-vDelete첫 번째 부분
CTRL-vCTRL-vBackspace두 번째 부분 .
(또는 \e대신 이스케이프에 사용하십시오. "\e[3~")

완벽하지 않습니다 Delete. 줄 끝에서 여전히 백 스페이스입니다. 그러나 그것은 ~하루에 10 번 문자 를 백 스페이스 아웃 해야하는 것을 절약 합니다.