J'avais l'habitude d'avoir un collègue qui était vraiment bon à UNIX.
Il m'a montré comment utiliser les raccourcis clavier Vi pour modifier mes commandes shell.
Il a placé la commande dans un fichier qui s'exécutait chaque fois que je me connectais.
Depuis lors, je suis passé à un autre projet.
Malheureusement, je ne me souviens pas comment procéder.
Y a-t-il quelqu'un ici qui sait comment utiliser les raccourcis clavier Vi pour modifier les commandes dans le terminal?
Comment puis-je rendre ce paramètre permanent?
vi bindings in the shell
sont les meilleures fonctionnalités jamais inventées!jj
avecESC
comme nous le faisons habituellement dans vim?Si vous utilisez bash, comme jahroy et evil otto l'ont déjà répondu, vous pouvez utiliser
pour que bash utilise des commandes d'édition de style vi.
Une fois que vous avez fait cela, vous pouvez taper Esc vpour lancer l'éditeur vi avec un fichier temporaire contenant une copie de la ligne de commande actuelle. Vous pouvez modifier la commande, même en la remplaçant par plusieurs lignes; lorsque vous enregistrez le fichier (
:wq
), le shell exécute les commandes modifiées.Si tu préfères
vous pouvez utiliser Ctl-XCtl-Epour faire la même chose. Il utilisera votre éditeur préféré
$EDITOR
, pas nécessairement emacs.(Personnellement, j'utilise vi (en fait vim) pour la plupart de mes modifications, mais je préfère
set -o emacs
dans le shell; basculer dans et hors du mode d'insertion est idéal pour éditer des fichiers, mais maladroit pour les commandes interactives. YMMV.)la source
set -o emacs
pas ce que vous voulez?Vous pouvez utiliser
set -o vi
pour changer vos commandes d'édition de ligne comme @jahroy a posté, mais vous pensez peut-être à lafc
commande (disponible dans bash et je pense que ksh, mais probablement pas tcsh), qui mettra la commande précédente dans un éditeur (FCEDIT ou EDITOR , que vous avez probablement défini sur vi), puis exécute la commande lorsque vous quittez l'éditeur. Consultez la page de manuel ouhelp fc
pour plus de détails, ou essayez-le.la source
alias r='fc -e -'
est un alias précieux pour réexécuter les commandes précédentes.fc
à lui seul est originaire de Korn shell, je crois. Vous pouvez spécifier des commandes par numéro (fc 123 129
pour modifier les numéros de commande 123 à 129 dans l'historique). Vous pouvez spécifier des nombres relatifs (fc -10 -1
pour modifier les 10 dernières commandes entrées). Vous pouvez lister les commandes précédentes avecfc -l
. Vous pouvez spécifier une commande par préfixe avec l'r
alias (r make
exécute la dernière invocation demake
; il en va de mêmer m
si vous n'avez pas exécuté demv
commande depuis votre dernière exécutionmake
, etc.).Pour éditer la dernière commande utilisée dans vim et invoquer une version éditée après que l'éditeur ait enregistré et quitté, utilisez le
fc
shell intégré. Sans aucun argument, il fera ce qui suit:/tmp
et le remplit avec la dernière commande tapée:cquit
).La commande fonctionne à la fois dans bash et zsh.
la source
En fait, c'est en fait la plus grande caractéristique de tous les temps. Mais il y a plus:
Créez un fichier nommé
contenant la ligne
Editline , est une bibliothèque de versions sous licence BSD qui fournit des services de type readline. Ce .editrc mettra vos raccourcis clavier en mode vi dans le shell de ligne de commande de MySQL, ou toute application qui n'utilise pas readline.
Je suis devenu un peu oublieux au fil des années, donc mon .zshrc source des wrappers pour le mode vi, pour me montrer dans quel mode je suis sur la ligne de commande. C'est bien.
Je sais qu'en zsh vous pouvez taper
et obtenez la liste des raccourcis clavier. Je suis sûr que bash doit avoir quelque chose de similaire. Toutes les clés vi ne sont pas liées par défaut. Liez-les à votre guise et partez pour les courses.
la source
dans votre terminal, tapez
export EDITOR=vi
.Pour enregistrer ce paramètre. mettre cette ligne dans le fichier ~ / .profile
la source
$EDITOR
) àvi
. Il ne vous permet pas de modifier les commandes shell avecvi
(du moins pas directement).$EDITOR
contientvi
. Je pense que c'est le seul shell qui fait ça.