Liaisons de touches personnalisées pour le mode shell vi, c'est-à-dire «set -o vi»?

18

Je viens de découvrir les merveilles de set -o vi, et je suis curieux de savoir s'il est possible de personnaliser ce mode shell vi de la même manière que vous pouvez personnaliser vi ou vim?

Par exemple, créez une liaison de touches personnalisée pour mapper une touche ou un combo de touches plus pratique sur esc?

Si ce n'est pas actuellement pris en charge, à quel point serait-il difficile de modifier le code source du programme et du code dur dans certaines personnalisations, ou serait-ce une mauvaise idée?

Jonas
la source
J'ai trouvé la réponse ici < unix.stackexchange.com/questions/27699/remap-bash-vi-keys >
DinizBr

Réponses:

17

Oui, vous pouvez modifier les mappages de touches (pour le mode de type bindvi ou emacs) avec la fonction intégrée. Il s'agit en fait d'une fonction readline (vous pouvez donc avoir des liaisons de type vi dans tous les programmes readline, pas seulement bash).

La clé que vous recherchez est appelée vi-movement-mode, et par défaut \e(échapper). Vous pouvez également le lier à (et c'est plutôt idiot) des égaux comme celui-ci. La deuxième ligne se débarrasse de la liaison pour s'échapper:

$ bind "=":vi-movement-mode 
$ bind -r "\e"

Running bind -pvous montrera toutes les clés que vous pouvez lier et leurs liaisons actuelles (le cas échéant).

Vous pouvez placer des bindcommandes dans votre .bashrc, ou vous pouvez les modifier ~/.inputrcpour les appliquer à tous les programmes de lecture en ligne que vous exécutez. Les documents readline contiennent tous les détails.

derobert
la source
1
C'est génial. Merci beaucoup. J'ai pu comprendre comment lier des combinaisons de touches comme bind "Control-Space":vi-movement-mode- cela fonctionne bien. Mais par exemple, dans vim, je dois taper deux caractères consécutifs comme déclencheur esc, c'est- à -dire que si vous tapez, jjvous reviendrez au mode normal. Cela n'a pas fonctionné lorsque je l'ai essayé avec bind, existe-t-il un moyen spécial de le faire fonctionner?
Jonah
@Jonah pas que je sache, mais je n'ai pas lu les documents readline récemment ...
derobert
@chishaku vous devez préfixer le nom de Jonah avec un signe at ( @), sinon il ne recevra pas de notification.
derobert
2
@Jonah J'ai juste essayé de faire la même chose. Avez-vous déjà compris cela?
chishaku
1
unix.stackexchange.com/questions/303282/… Vous avez besoin de devis pour une raison quelconquebind '"jk":vi-movement-mode'
Hielke Walinga