2011-02-17 4 views
55

Je suis habitué à utiliser la touche CTRL pour avancer plus vite en utilisant les flèches gauche et droite (va à la fin d'un mot, au lieu d'un caractère à la fois). Puis-je faire cela en bash en quelque sorte?Bash CTRL pour déplacer le curseur entre les mots/chaînes

Je pourrais probablement le coder, mais je me demandais s'il y a quelque chose de plus facile/déjà fait.

Répondre

67

Avec les raccourcis clavier readline par défaut, ALT +B retourne un mot, ALT +F va de l'avant un mot.

La configuration par défaut d'Ubuntu fournit en plus CTRL + des flèches comme vous en avez l'habitude. Ceux-ci sont en /etc/inputrc et indiquées comme suit:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving 
"\e[1;5C": forward-word 
"\e[1;5D": backward-word 
"\e[5C": forward-word 
"\e[5D": backward-word 
"\e\e[C": forward-word 
"\e\e[D": backward-word 

Je ne sais pas pourquoi nous avons besoin de trois d'entre eux ...

+0

Il est intéressant que les liaisons que vous avez spécifiées ne correspondent pas aux liaisons que j'ai trouvées et mentionnées dans ma réponse. Je me demande ce que cette divergence est. Aussi, je suis curieux de savoir comment vous pouvez déterminer ce qu'est une séquence de caractères en regardant/etc/inputrc. (par exemple, comment savoir ce que 1C signifie ci-dessus?) –

+14

@bryan_ruiz: Différents claviers (émulateurs de terminaux, etc.) produisent des séquences différentes. Pour voir la séquence, appuyez sur Ctrl-v puis sur la touche. Pour moi dans PuTTY, Ctrl-v Ctrl-RightArrow me donne '^ [OC' qui est le même que le vôtre. Dans 'xterm' j'obtiens'^[[1; 5' qui est le même que Thomas '. –

+0

Puis-je savoir pourquoi vous avez donné 3 paires? Je pensais que l'on suffirait? – Viet

35

Comme Thomas a expliqué, vous pouvez ajouter les liaisons à /etc/inputrc.

Une autre alternative il charge chaque fois que vous ouvrez une session, est de les mettre dans ~/.bashrc comme ceci:

#use ctl keys to move forward and back in words 
bind '"\eOC":forward-word' 
bind '"\eOD":backward-word' 

J'ai appris que vous pouvez utiliser cat > /dev/null pour regarder les caractères que votre clavier envoie, par exemple, CTRL + flèche droite montre:

^[OC 

^[ est le même que \e donc c'est où le code provient de la commande bind.

Vous pouvez également rechercher des liaisons comme ceci:

bind -p | grep forward-word 

Tout cela est sacrément génial et je suis content d'avoir découvert un peu plus de puissance bash.

+5

I * think * cela n'affectera que bash, alors que la solution 'inputrc' s'appliquera aussi aux autres programmes utiliser readline, par exemple l'interpréteur Python, la plupart des autres coquilles. Notez que vous pouvez également placer les commandes dans '~/.inputrc' si vous n'avez pas de racine, ou si vous ne voulez pas qu'elles s'appliquent à tous les utilisateurs. – Thomas

+0

très intéressant, mettra à jour mon $ HOME pour refléter cela. –

+0

Pour une raison quelconque, cela n'a fonctionné pour moi que lorsque j'ai échangé l'ordre de vos lignes ci-dessus. Note supplémentaire J'utilise Ubuntu 14.04LTS derrière mastic de Windows 8.1. – Dez

Questions connexes