En bash, le maison / fin / effacer key insère un tilde, ou si précédé de la touche d'échappement: [1~
Alors je tape echo hellp
, déplacez le curseur sur hel|lp
et tapez delete, et bam, je me suis ~tilde
Aussi, je tape echo hellp
, déplacez le curseur sur hel|lp
et tapez esc puis supprimez, et bam, je me suis [3~
$ echo hel~lp
hel~lp
$ echo hell[3~o
hell[3~o
~
Ma version de bash:
$ bash --version
GNU bash, version 3.1.17(1)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.
Ce que je veux, c'est un comportement comme cmd.exe
:
- Je veux que Esc efface la ligne / le tampon courant
- Je veux que Home déplace le curseur au début de la ligne avant le premier caractère
- Je veux que End mette le curseur à la fin de la ligne avant le premier caractère
- Je veux supprimer pour supprimer le caractère suivant (à droite du curseur) de la ligne / du tampon en cours
Que dois-je éditer pour résoudre ce problème? Est-ce que ce défaut est sur votre bash?
mettre à jour: Je suis sur une machine Windows exécutant un programme Windows, sh.exe (comme vous pouvez le voir ci-dessus, GNU bash), compilé avec mingw pour msys:
$ uname -s -m -o
MINGW32_NT-5.1 i686 Msys
Réponses:
Vous personnalisez bash via un
.inputrc
déposer dans votre/home/username
, vous pouvez copier la valeur par défautvoici le mien (les commentaires commencent par #)
pour savoir ce dont vous avez besoin pour taper votre inputrc sur le côté gauche (le code d'échappement, car il peut varier entre un ordinateur portable / un ordinateur de bureau, etc.), à l'invite
echo '
puis tapezCtrl-V
suivi de la clé, commeHome
puis tapez'
Exemplepuis remplacez chaque
^[
avec\e
ajouter\M-
pourAlt
théoriquement, vous utiliseriez\C-
pourCtrl
mais cela ne fonctionne pas actuellement (limitation de Windows)les commandes disponibles (comme
backward-kill-line
) sont répertoriés dans http://www.gnu.org/software/bash/manual/bashref.html#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029vous pouvez afficher les raccourcis clavier / liaisons existants avec
bind -p
oune plaisante pas avec TERMCAP
la source
find / -name 'inputrc.default'
ne trouve rien sur ma machine. Ma maison et mon bureau fonctionnaient autrefois ... :( De plus, à titre d'information pour les autres: pour recharger le fichier .inputrc, utilisezbind -f ~/.inputrc
.$if mode=emacs
bloc. J'ai ajouté ces deux lignes, et elles fonctionnent à nouveau! :RÉ"\e[1~": beginning-of-line ... "\e[4~": end-of-line
.Eh bien, puisque vous dites que vous travaillez sous Windows et n’utilisez pas un émulateur de terminal approprié tel que PuTTY (avec menthe , puttycyg et al ), Je vous recommanderais de consulter la documentation readline et apprendre les raccourcis pour readline. Ce sera mieux à long terme.
Si vous deviez utiliser un émulateur de terminal à la place de la fenêtre de la console (sans parler de l'interpréteur / du shell ici) fourni avec Windows, vous auriez une alternative plus configurable. Une fois que vous essayez d’utiliser d’autres programmes comme Vim, la situation ne fera qu’empirer.
L'essentiel: utiliser un émulateur de terminal approprié, même sous Windows ou apprendre les raccourcis readline. J'ai testé ceux que j'utilise le plus en ce moment et ils fonctionnent avec
msys.bat
.Le fichier à éditer aurait être
/usr/share/terminfo
(qui n'existe pas dans MinGW) - utiliseztic
pour "compiler" des règles (qui ne sont même pas incluses car tout le monde sait que le support serait gravement handicapé). Cependant, je n'ai vu aucun développement utile pour rendre cela même utilisable sous Windows. C’est pourquoi vous devez d’abord utiliser un émulateur de terminal approprié. Mais je suis sûr qu'un chirurgien sera capable d'utiliser un couteau de cuisine pour la chirurgie, alors pourquoi ne pas utiliser les fenêtres de la console intégrée de Windows. Bonne chance.la source
Vérifier l'installation de Readline
Quand cela se produit sur un minimal l’installation récente de Debian / Ubuntu, c’est probablement parce que vous n’avez pas installé le
readline-common
paquet. Simplement installer le paquet va le résoudre.Par exemple. sur Docker avec la frappe Debian Stretch
ls
MAISON :Notez qu'après l'installation de readline-common, cela n'aura d'effet que sur les nouveaux shells de connexion.
la source
exec bash
est un moyen de remplacer l'instance bash actuelle par une nouvelle, sans quitter le terminal (comme cela peut être nécessaire lors de la lecture dans un conteneur pTTY).J'ai trouvé le suivant utile aussi: https://wiki.archlinux.org/index.php/Home_and_End_keys_not_working
Plus précisément:
Si vos clés ne fonctionnent pas, c'est peut-être parce que votre terminal envoie des codes d'échappement qui ne figurent pas dans cette liste. Vous devez d’abord savoir quels codes d’échappement sont envoyés. Pour les voir, vous pouvez utiliser une commande Readline appelée "quoted-insert" ou exécuter la commande showkey --scancodes qui fournit la valeur d'une clé mot à mot. La liaison par défaut pour quoted-insert est Ctrl + V.
Par exemple, vous pouvez donner les séries d’entrées suivantes dans votre terminal:
Et obtenir en sortie
$ ^ [[1 ~ ^ [[4 ~
Le ^ [indique un caractère d'échappement dans votre shell, cela signifie donc que votre clé Home a un code d'échappement de [1 ~ et que votre touche End a un code d'échappement de [4 ~. Puisque ces codes d'échappement ne sont pas répertoriés dans la configuration par défaut de Readline, vous devrez les ajouter:
Notez que Readline utilise \ e pour indiquer un caractère d'échappement.
Pour moi, l'élément pertinent était de mettre ceci dans inputrc:
la source