** Remarque: J'ai posé cette même question sur SuperUser, mais je n'ai reçu aucune réponse. Je me rends compte maintenant que c'est un forum plus approprié pour cette question particulière. *
Dans un shell ksh, la touche Suppr ne fonctionne pas correctement sur la ligne de commande. J'obtiens un ~ lorsque j'appuie sur Supprimer.
Comment puis-je:
- lier la fonctionnalité de "Supprimer le caractère au niveau du curseur" au bouton Supprimer du clavier? (Control-D se comporte comme si je m'attendais à ce que le bouton de suppression fonctionne et mes tentatives d'utilisation d'un alias ont été infructueuses et probablement naïves.)
- lier la fonctionnalité de " Déplacer au premier de la ligne" au bouton du clavier principal? (Le contrôle A le fait maintenant, mais je veux que Home le fasse.)
- lier la fonctionnalité " Déplacer à la fin de la ligne " au bouton Fin du clavier? (Control E le fait maintenant, mais je veux en finir.)
Mise à jour finale (?)
Je suis tombé sur quelque chose qui fonctionne, mais je ne comprends pas très bien pourquoi. Cela marche:
bind '^[[3'=prefix-2
bind '^[[3~'=delete-char-forward
Selon 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.
Donc, ma question mise à jour est pourquoi dois-je utiliser prefix-2
pour cela? S'il vous plaît, traduisez pour moi afin que je puisse comprendre afin de ne plus avoir à embêter tout le monde à ce sujet.
ANCIEN STUFF SUIT
MISE À JOUR
Il s'avère que ESC dans QNX l'est ^[
. En utilisant la commande, bind '^[[3~'='delete-char-backward'
je peux obtenir que le curseur écrase le caractère sous le curseur avec a ~
. C'est au moins un progrès - je sais maintenant comment épeler Supprimer la clé pour le shell. La plupart des choses que j'ai vues sur le Web disent que la touche de suppression est ^?
, mais cela ne semble pas fonctionner pour moi. De plus, je dois mentionner que j'y accède via PuTTy.
Je ne comprends pas parce que Control D fait ce que je veux que la touche de suppression fasse. J'ai essayé de le lier à eot-or-delete
nouveau en vain.
Cela devrait être simple, non?
MISE À JOUR 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
MISE À JOUR 3: Plus de mes paramètres
Réglage ENV
echo $ENV
/etc/kshrc
Sortie complète 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
Paramètres PuTTy:
Notes qui peuvent ou non avoir de l'importance, mais qui pourraient fournir un contexte:
Le shell est "PD KSH v5.2.14 99/07 / 13.2". Oui, je n'ai pas la possibilité de mettre à niveau ... c'est un système embarqué. "Obtenez un shell moderne" n'est pas une réponse viable. Le système d'exploitation est QNX Neutrino 6.4.1.
bind montre ce qui suit:
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 montre ce qui suit:
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 montre ce qui suit:
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
la source
kshrc
en vain. Je reçois,sh: /etc/kshrc[21]: trap: bad signal KEYBD
je n'ai malheureusement pas d'autre option de shell. Je ne sais pas si c'est un problème avec le PDKSH ou avec QNX ou les deux. Je sais quelles combinaisons de touches provoqueront ce que je veux. J'ai juste besoin de connaître la syntaxe pour les mapper aux clés appropriées.bind | grep prefix
montre? Etbind | grep '[^ -~]'
?bind '^[[3~'='delete-char-forward'
aurait dû fonctionner. Je ne comprends pas d'où viennent ces caractères non ASCII (ce ne sont pas des séquences ESC + foo avec le 8ème bit, ni des confusions latin1 / utf8). Est-ce que `bind '^ X3 ~ = delete-char-forward' fonctionne?Réponses:
Pour les Googleurs:
Ouf. Pour quelque chose qui devrait être si simple, c'était difficile.
La solution courte est d'utiliser ce qui suit pour définir la clé de suppression (dans
kshrc
ou n'importe où),Et définissez vos paramètres de terminal PuTTy sur au
rxvt
lieu deStandard
.Cette chose qui m'a vraiment aidé à faire fonctionner cela était: http://www.mail-archive.com/[email protected]/msg81796.html
ksh fait des bêtises avec les touches home et end. Fondamentalement, je ne pouvais pas faire la différence entre Début, Fin et Supprimer en même temps. Quelle que soit la dernière liaison, les trois clés feraient l'affaire. Changer ce que PuTTy a envoyé pour ces clés a énormément aidé.
Remarque: Certaines personnes suggèrent si vous voulez voir quel code le shell obtient lorsque vous appuyez sur une touche, tapez
cat
, appuyez sur entrée, puis appuyez sur la touche. Pour ma coquille, cela n'a pas fonctionné. J'ai obtenu~
toutes les touches de contrôle. Ce que j'ai fait à la place, c'est d'appuyerEsc
une fois, puis d'appuyer sur la touche. Le code de contrôle s'afficherait puis apparaîtrait. Utilisez ce code de contrôlebind
et vous êtes prêt.la source
[Bien que nous ayons une configuration quelque peu différente, j'espère que ce qui suit peut être utile à quelqu'un, car je pense que certains des mêmes principes généraux s'appliquent. Cela s'est avéré être une bonne expérience d'apprentissage pour moi sur la façon dont Linux gère les E / S des terminaux de base.]
Si le shell s'exécute à l'intérieur d'une fenêtre de terminal gnome , alors sous
Preferences
|Profiles
sélectionnez un profil, puis sélectionnezEdit
, puis l'Compatibility
onglet, puis changezDelete key generates
pourAutomatic
. (Ou si cela échoue, essayez les autres choix là-bas.)[Je suis sur Debian Stretch.]
Je ne sais pas comment, ni même quand exactement mon Del s'est cassé, mais il a commencé à supprimer la gauche plutôt que la droite!
Cet article m'a été très utile pour comprendre comment les choses fonctionnaient.
J'ai utilisé les stratégies de débogage suggérées dans l'article lié ci-dessus:
Tapez
^v Del
et^v Backspace
, [contrôle-v puis touche de suppression ...] pour trouver les codes de séquence de terminal renvoyés.Et l' utilisation
showkey -s
,showkey -k
,showkey -a
puisDel
et lesBackspace
clés pour inspecter les trois couches (brutes à partir du clavier, en sortie du pilote tty, et en tant que chaîne de caractères donnée à la borne).De cela, j'ai remarqué qu'en utilisant stty (par exemple stty1), mon comportement de shell était différent de celui en utilisant xterm (à partir d'un terminal X graphique). Del a été supprimé correctement en avant (à droite) dans stty1, mais en arrière (à gauche) dans mon xterm.
la source
Les deux réponses existantes n'ont pas fonctionné pour moi en passant de Linux (Ubuntu 18.10) bash, via SSH à Solaris 11.3 bash, en utilisant le terminal gnome.
J'ai trouvé que je devais utiliser la
bind
commande, mais avec une solution de contournement, car je ne pouvais pas faire fonctionner un natif Delete.La Deletesolution consiste donc à appuyer sur, pour simuler une suppression en mappant la touche de suppression sur →et Backspace.
Pour taper cela, utilisez les touches:
CTRL-vDeletepour la première partie
et CTRL-v→CTRL-vBackspacepour la seconde.
(ou l' utilisation
\e
pour l'évasion à la place, par exemple:"\e[3~"
)Ce n'est pas parfait, si vous êtes Deleteen fin de ligne, ça revient en arrière. Mais cela m'évite d'avoir à revenir en arrière sur le
~
personnage dix fois par jour.la source