Comment attribuez-vous des commandes aux touches du terminal?

10

Existe-t-il une solution pour attribuer des combinaisons de touches spéciales aux mots utilisés dans le terminal. Par exemple, la commande less est très utile et j'utilise beaucoup pour diriger la sortie d'un autre processus à travers elle.

L'idée serait de mettre en place des combinaisons de touches spéciales qui ne sont actives que dans l'utilisation du terminal affectées à l'écriture de différentes commandes? Donc, appuyer sur Ctrl+ Ldans la fenêtre du terminal pourrait écrire

| less

ou Ctrl+ Gpourrait représenter

| grep

Remarque: je veux juste dire que l'ajout des lettres à la ligne de commande n'exécute pas finalement. De manière similaire, ce qui est la complétion des onglets, mais plus spécifique.

NDA
la source

Réponses:

10

Oui, vous pouvez utiliser la commande bind

bind '"\ey"':"\"less \C-m\""

Cela mappe Alt-e à la commande less et l'exécute (avec le \ Cm aka Ctrl-m)

Probablement pour le | vous devez y échapper.

bind '"\ey"':"\"\|less \C-m\""

Si vous souhaitez simplement l'ajouter à la ligne de commande, supprimez le * \ Cm \ ""

Soyez prudent car certaines liaisons sont déjà définies:

Ctrl + A    Go to the beginning of the line you are currently typing on
Ctrl + E    Go to the end of the line you are currently typing on
Ctrl + L                Clears the Screen, similar to the clear command
Ctrl + U    Clears the line before the cursor position. If you are at the end of the line, clears the entire line.
Ctrl + H    Same as backspace
Ctrl + R    Let’s you search through previously used commands
Ctrl + C    Kill whatever you are running
Ctrl + D    Exit the current shell
Ctrl + Z    Puts whatever you are running into a suspended background process. fg restores it.
Ctrl + W    Delete the word before the cursor
Ctrl + K    Clear the line after the cursor
Ctrl + T    Swap the last two characters before the cursor
Esc + T     Swap the last two words before the cursor
Alt + F     Move cursor forward one word on the current line
Alt + B     Move cursor backward one word on the current line
Tab     Auto-complete files and folder names

La touche Contrôle, comme vous pouvez le voir ci-dessus, est faite avec Cm, vous pouvez donc démarrer la commande less avec Ctrl-g, comme suit:

bind '"\ Cg"': "\" \ | less * \ Cm \ ""

Pour obtenir les codes clés de l'Alt (uniquement pour l'ALT), vous pouvez utiliser la commande read du shell:

@~$ read
^[y

^ [y est égal à \ ey

Pour plus d'informations, cette question a également été répondue dans stackoverflow:

/programming/4119991/bash-call-script-with-customized-keyboard-shortcuts

tmow
la source
merci, comment puis-je supprimer une liaison ou afficher toutes les liaisons?
NES
quelque chose ne va pas avec vos 2 premiers exemples. il imprime toujours aussi le caractère générique après moins après que j'ai attribué avec votre syntaxe de liaison.
NES
bind -p et bind -P vous montreront toutes les liaisons. J'ai fait une erreur avec la star ... Je mets à jour la réponse
tmow
Merci beaucoup. vous avez peut-être une idée de comment atteindre le même objectif chez les poissons? Je le fais travailler jusqu'à présent, mais le problème est que le poisson semble exécuter automatiquement la commande au lieu d'ajouter simplement la chaîne à la ligne de commande par défaut. voici la page de manuel linux.die.net/man/1/bind Malheureusement l'exemple là n'est pas très utile pour mon cas.
NES
C'est déjà une fonction intégrée, je pense que fishshell.com/user_doc/index.html#editor poursuit le raccourci Alt-p
tmow