** Hinweis: Ich habe dieselbe Frage in SuperUser gestellt, aber keine Antwort erhalten. Mir ist jetzt klar, dass dies ein geeigneteres Forum für diese spezielle Frage ist. *
In einer ksh-Shell funktioniert die Entf-Taste in der Befehlszeile nicht ordnungsgemäß . Ich erhalte ein ~, wenn ich Entf drücke.
Wie mache ich:
- Binden Sie die Funktionalität von "Zeichen am Cursor löschen" an die Schaltfläche Tastatur löschen? (Control-D verhält sich so, als würde die Löschtaste funktionieren, und meine Versuche, einen Alias zu verwenden, waren erfolglos und wahrscheinlich naiv.)
- Binden Sie die Funktionalität von " Zum ersten der Zeile verschieben" an die Home-Tastaturtaste? (Kontrolle A macht das jetzt, aber ich möchte, dass Home es macht.)
- Binden Sie die Funktionalität von " An das Ende der Zeile verschieben " an die Schaltfläche "Tastatur beenden ". (Control E macht das jetzt, aber ich möchte, dass es zu Ende geht.)
Letztes (?) Update
Ich bin auf etwas gestoßen, das funktioniert, aber ich verstehe nicht ganz warum. Das funktioniert:
bind '^[[3'=prefix-2
bind '^[[3~'=delete-char-forward
Laut 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.
Meine aktualisierte Frage lautet also, warum ich das verwenden muss prefix-2
. Bitte übersetzen Sie für mich, damit ich verstehen kann, damit ich nicht alle erneut darüber nerven muss.
ALTES PERSONAL FOLGT
AKTUALISIEREN
Es stellt sich heraus, dass ESC in QNX ist ^[
. Mit dem Befehl kann bind '^[[3~'='delete-char-backward'
ich den Cursor dazu bringen, das Zeichen unter dem Cursor mit a zu überschreiben ~
. Dies ist zumindest ein Fortschritt - ich weiß jetzt, wie man den Löschschlüssel für die Shell buchstabiert . Die meisten Dinge, die ich im Web gesehen habe, besagen, dass der Löschschlüssel ist ^?
, aber das scheint für mich nicht zu funktionieren. Außerdem sollte ich erwähnen, dass ich über PuTTy darauf zugreife.
Ich verstehe das nicht, weil Control D genau das tut, was ich mit der Löschtaste tun möchte. Ich versuchte es eot-or-delete
erneut ohne Erfolg zu binden .
Das sollte einfach sein, oder?
UPDATE 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
UPDATE 3: Weitere Einstellungen
ENV-Einstellung
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
/ 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
PuTTy-Einstellungen:
Hinweise, die wichtig sein können oder nicht, aber Hintergrundinformationen liefern können:
Die Shell ist "PD KSH v5.2.14 99/07 / 13.2". Ja, ich habe keine Option zum Aktualisieren ... es ist ein eingebettetes System. "Get a modern shell" ist keine brauchbare Antwort. Das Betriebssystem ist QNX Neutrino 6.4.1.
bind zeigt folgendes:
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 zeigt folgendes:
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 zeigt folgendes:
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
quelle
kshrc
sie ohne Erfolg zu ändern . Ichsh: /etc/kshrc[21]: trap: bad signal KEYBD
habe leider keine andere Shell-Option. Ich weiß nicht, ob dies ein Problem mit dem PDKSH oder mit QNX oder beiden ist. Ich weiß, welche Tastenkombinationen das bewirken, was ich will. Ich muss nur die Syntax kennen, um sie den entsprechenden Schlüsseln zuzuordnen.bind | grep prefix
zeigt sich für Sie? Undbind | grep '[^ -~]'
?bind '^[[3~'='delete-char-forward'
hätte funktionieren sollen. Ich verstehe nicht, woher diese Nicht-ASCII-Zeichen kommen (es handelt sich weder um ESC + foo-Sequenzen mit gesetztem 8. Bit noch um latein1 / utf8-Verwirrungen). Funktioniert `bind '^ X3 ~ = delete-char-forward'?Antworten:
Für Googler:
Wütend. Für etwas, das so einfach sein sollte, war das schwer.
Die kurze Lösung besteht darin, den Löschschlüssel (in
kshrc
oder wo auch immer) wie folgt festzulegen:Und stellen Sie Ihre PuTTy-Terminaleinstellungen auf
rxvt
stattStandard
.Diese Sache, die mir wirklich geholfen hat, war: http://www.mail-archive.com/[email protected]/msg81796.html
ksh macht dumme Sachen mit den Home- und End-Schlüsseln. Grundsätzlich konnte ich nicht gleichzeitig den Unterschied zwischen Home, End und Delete erkennen. Was auch immer zuletzt gebunden war, alle drei Schlüssel würden reichen. Das Ändern der von PuTTy für diese Schlüssel gesendeten Daten hat immens geholfen.
Hinweis: Einige Leute schlagen vor, wenn Sie sehen möchten, welchen Code die Shell erhält, wenn Sie eine Taste
cat
drücken, eingeben, die Eingabetaste drücken und dann die Taste drücken. Für meine Shell hat das nicht funktioniert. Ich habe~
für alle Steuertasten. Ich habe stattdessenEsc
einmal gedrückt und dann die Taste gedrückt. Der Steuercode würde dann angezeigt. Verwenden Sie diesen Steuercode inbind
und Sie sind fertig.quelle
[Obwohl wir ein etwas anderes Setup haben, hoffe ich, dass das Folgende für jemanden von Nutzen sein kann, da ich denke, dass einige der gleichen allgemeinen Prinzipien gelten. Dies war eine gute Lernerfahrung für mich, wie Linux mit grundlegenden Terminal-E / A umgeht.]
Wenn die Shell in einem Gnome-Terminalfenster ausgeführt wird , klicken Sie unter
Preferences
|Profiles
Wählen Sie ein Profil aus, wählen SieEdit
dann dieCompatibility
Registerkarte aus und ändern Sie dieDelete key generates
inAutomatic
. (Oder wenn dies fehlschlägt, versuchen Sie es mit den anderen Optionen.)[Ich bin auf Debian Stretch.]
Ich weiß nicht wie oder wann genau mein Del kaputt gegangen ist, aber es begann eher links als rechts zu löschen!
Dieser Artikel war sehr hilfreich für mich, um zu verstehen, wie die Dinge funktionierten.
Ich habe die vorgeschlagenen Debugging-Strategien im oben verlinkten Artikel verwendet:
Geben Sie
^v Del
und^v Backspace
, [control-v und dann den Schlüssel löschen ...] ein, um die zurückgegebenen Terminalsequenzcodes zu finden.Und Gebrauch
showkey -s
,showkey -k
,showkey -a
und dannDel
undBackspace
Tasten inspizieren die drei Schichten (roh aus Tastatur, als Ausgabe von tty - Treiber, und als Zeichenkette an Klemme angegeben).Daraus ergab sich, dass sich mein Shell-Verhalten bei Verwendung von stty (z. B. stty1) von dem bei Verwendung von xterm (innerhalb eines grafischen X-Terminals) unterschied. Del wurde in stty1 korrekt vorwärts (rechts), in meinem xterm jedoch rückwärts (links) gelöscht.
quelle
Die vorhandenen zwei Antworten funktionierten nicht für mich, als ich von Linux (Ubuntu 18.10) über SSH zu Solaris 11.3 mit dem Gnome-Terminal wechselte.
Ich stellte fest, dass ich den
bind
Befehl verwenden musste, aber mit einem Workaround, da ich keinen Native Deletezum Funktionieren bringen konnte.Die Problemumgehung besteht also darin, dass beim DeleteDrücken ein Löschvorgang simuliert wird, indem der Tastendruck zum Löschen auf →und abgebildet wird Backspace.
Verwenden Sie dazu die folgenden Tasten:
CTRL-vDeletefür den ersten Teil
und CTRL-v→CTRL-vBackspacefür den zweiten.
(oder verwenden Sie
\e
für die Flucht statt, zum Beispiel:"\e[3~"
)Es ist nicht perfekt, wenn Sie Deleteam Ende der Linie sind, es immer noch Backspaces. Aber es erspart mir, den
~
Charakter unzählige Male am Tag zurück zu drücken.quelle