Utilisation des keys VI pour modifier les commands du shell sous UNIX

J'avais un collègue qui était vraiment bon chez UNIX.

Il m'a montré comment utiliser les raccourcis keyboard Vi pour éditer mes commands shell.

Il a placé la command dans un file qui a fonctionné à chaque fois que je me suis connecté.

Depuis, j'ai déménagé dans un autre projet.

Malheureusement, je ne me souviens pas comment mettre cela en place.

Y at-il quelqu'un ici qui sait comment utiliser les raccourcis keyboard Vi pour modifier les commands dans le terminal?

Comment puis-je rendre ce paramètre permanent?

Vous parlez de la plus grande fonctionnalité jamais!

Vous pouvez utiliser les commands vi pour modifier les commands du shell (et l'historique des commands) en ajoutant ceci à votre file .bashrc :

set -o vi

Vous pouvez également exécuter cette command à partir de la command line pour n'affecter que votre session actuelle.

Si vous n'utilisez pas bash, remplacez le file rc approprié pour votre shell.


Cela vous permet d'utiliser les commands vi pour modifier n'importe quelle command …

Vous pouvez également utiliser j et k pour parcourir votre historique (après avoir appuyé sur ESC ).

Vous pouvez également utiliser / (après avoir appuyé sur ESC ) pour searchr d'anciennes commands.

En d'autres termes, pour find cette command cp super-longue que vous avez faite il y a dix minutes:

ESC / cp ENTER

Ensuite, vous pouvez parcourir toutes les commands correspondantes dans votre historique avec n et N.

Tout cela me rend 10 000 milliards de fois plus productif sur la command line!

Si vous utilisez bash, comme jahroy et evil otto ont déjà répondu, vous pouvez utiliser

 set -o vi 

pour que bash utilise les commands d'édition vi-style.

Une fois que vous avez fait cela, vous pouvez taper Esc v pour lancer l'éditeur vi avec un file temporaire contenant une copy de la command line en cours. Vous pouvez modifier la command, même en la remplaçant par plusieurs lignes. lorsque vous sauvegardez le file ( :wq ), le shell exécutera les commands éditées.

Si tu préfères

 set -o emacs 

vous pouvez utiliser Ctl-X Ctl-E pour faire la même chose. Il utilisera votre éditeur préféré $EDITOR , pas forcément emacs.

(Personnellement, j'utilise vi (en fait vim) pour la plupart de mon assembly, mais je préfère set -o emacs dans le shell, l'input et la sortie du mode insertion est géniale pour l'édition de files, mais gênante pour les commands interactives.

Vous pouvez utiliser set -o vi pour modifier vos commands d'édition de ligne comme @jahroy posté, mais vous pouvez penser à la command fc (disponible dans bash et je pense ksh, mais probablement pas à tcsh), qui mettra la command précédente dans un éditeur (FCEDIT ou EDITOR, que vous avez probablement mis à vi), puis exécute la command lorsque vous quittez l'éditeur. Consultez la page de manuel ou help fc pour plus de détails, ou essayez-le.

Pour modifier la command la plus récemment utilisée dans vim et appeler une version éditée après que l'éditeur enregistre et quitte, utilisez shell fc embedded. Sans aucun argument, il fera ce qui suit:

  1. Crée un file temporaire dans /tmp et le remplit avec la command la plus récemment tapée
  2. Une fois l'éditeur sorti normalement (avec le code de sortie 0), il exécute la command trouvée dans ce file temporaire et supprime ce file. La version éditée est sauvegardée dans l'historique en tant que command habituelle (au less dans zsh). Il n'exécute rien si l'éditeur sort avec du code autre que zéro (dans vim ceci peut être obtenu en le tuant ou en utilisant :cquit ).

La command fonctionne à la fois dans bash et zsh.

En effet, c'est en fait la plus grande caractéristique de tous les time. Il y a plus cependant:

Créer un file nommé

 .editrc 

contenant la ligne

 bind -v 

Editline , est une bibliothèque de versions sous licence BSD qui fournit des services de type readline. Que .editrc définira vos raccourcis keyboard en mode vi dans le shell de command line de MySQL ou toute application qui n'utilise pas readline.

Je me suis un peu oublié au fil des ans, donc mon file .zshrc envoie des wrappers pour le mode vi, pour me montrer quel mode je suis sur la command line. C'est bien.

Je sais dans zsh que vous pouvez taper

 bindkey -L 

et obtenez la list des raccourcis keyboard. Je suis sûr que bash doit avoir quelque chose de similaire. Toutes les keys vi ne sont pas liées par défaut. Liez-les comme vous le voulez et vous partez pour les courses.

dans votre terminal, tapez export EDITOR=vi .

Pour save ce paramètre. mettez cette ligne dans le file ~ / .profile