J'utilise le ksh
par défaut sur OpenBSD 6.2 (basé sur pdksh
) avec le mode d'édition de la ligne de commande Vi activé.
J'essaie de faire fonctionner correctement les touches fléchées en complément de h , l , j et k (comme je suis sur un clavier Dvorak). Autant que je sache, ils ne fonctionnent pas du tout. Peu importe que je sois en mode "entrée" ou "commande".
Les raccourcis clavier actuels incluent :
^[[A = up-history
^[[B = down-history
^[[C = forward-char
^[[D = backward-char
Ce sont aussi les caractères séquencés produits par mes touches fléchées si j'utilise Ctrl+V Touche fléchée .
Les touches fléchées fonctionnent comme prévu dans le mode d'édition de la ligne de commande d'Emacs, mais en tant qu'utilisateur Vi de longue date, je me sens quelque peu paralysé lors de son utilisation.
Mon sentiment est que l'échappement envoyé par la touche fléchée est interprété comme si j'appuyais sur Esc … J'obtiens le comportement équivalent en tapant manuellement, par ex. Échap [ A comme lorsque j'appuie sur Flèche vers le haut (me place en mode commande puis en mode insertion en fin de ligne).
Question :Quelqu'un a-t-il réussi à faire fonctionner intuitivement les touches fléchées en mode Vi dans ksh
d'OpenBSD ?
Réponse acceptée :
J'ai fait une incursion rapide dans /usr/src/bin/ksh
sur mon système OpenBSD, étant donné que j'ai quand même vérifié les sources réelles. J'ai jeté un coup d'œil rapide à c_ksh.c
, emacs.c
et vi.c
et il semble que le mode Vi ait été intégré dans pdksh
de nsh
à un moment donné (vers 1989/1990). Les mots exacts utilisés sont
/* $OpenBSD: vi.c,v 1.55 2018/01/16 22:52:32 jca Exp $ */
/*
* vi command editing
* written by John Rochester (initially for nsh)
* bludgeoned to fit pdksh by Larry Bouzane, Jeff Sparkes & Eric Gisin
*
*/
Le bind
-able les fonctions vivent toutes dans emacs.c
, tout comme x_bind()
fonction qui est appelée par le bind
intégré, tandis que vi.c
semble avoir sa propre implémentation de certains d'entre eux sous des noms différents qui ne sont pas appelés depuis x_bind()
.
Par conséquent, je pense pouvoir conclure que le bind
builtin est un no-op en mode Vi dans ce shell particulier.
MISE À JOUR (2018-02-04) :Après l'avoir signalé à openbsd-misc
list, il a été confirmé que bind
ne fait en effet rien en mode d'édition de ligne de commande Vi. Un patch ira pour modifier le ksh
manuel sur OpenBSD pour que cela soit mentionné :
bind string=[editing-command] ...
En mode d'édition Emacs , la commande d'édition spécifiée est liée à
lastring
donnée . Saisie future de lastring
entraînera l'invocation immédiate de la
commande d'édition. Les liaisons n'ont aucun
effet en mode d'édition Vi .