Avantages de l'utilisation de set -o vi

55

J'ai vu de nombreux développeurs utiliser cette commande pour définir l'option sur vi. Je n'ai jamais compris l'usage réel de cela?

Lorsque vous utilisez les commandes bash, quelle aide fournit le passage à vi?

Chander Shivdasani
la source

Réponses:

58

En définissant votre édition readline sur emacs (valeur par défaut) ou vi ( set -o vi), vous normalisez essentiellement vos commandes d’édition, à travers le shell et votre éditeur de choix 1 .

Ainsi, si vous souhaitez modifier une commande dans le shell, utilisez les mêmes commandes 2 que si vous étiez dans votre éditeur de texte. Cela signifie que ne plus avoir à mémoriser qu'une seule syntaxe de commande et (si cela ne suffisait pas suffisamment) rendrait probablement votre édition dans les deux environnements plus rapide et moins sujette aux erreurs ...

Vous pouvez exploiter davantage cette relation en mode vi en extrayant n'importe quelle commande de l'historique de votre shell, en appuyant sur Escapepour entrer en mode commande, puis en appuyant sur v, ce qui ouvrira votre $ EDITOR avec la commande chargée pour une édition plus complexe avec toute la puissance de vim. Une fois que vous avez fini d’éditer la commande à votre satisfaction, :wqla commande est exécutée dans votre shell.


1. En supposant, bien sûr, que vous utilisiez Emacs ou Vi / m comme éditeur.
2. Ou, plus précisément, un sous-ensemble de ceux-ci ...

jasonwryan
la source
1
J'ai le Saint Graal:) ....
Sathyam
3
Le truc Esc-v est l’une des meilleures caractéristiques de ce set -o vique la plupart des gens ne connaissent pas. Cela est particulièrement vrai si vous souhaitez émettre la même commande plusieurs fois avec des arguments différents (en tant que plusieurs commandes de ligne de commande).
Michael Goldshteyn
2
Le truc Esc-v n’est pas vraiment un avantage spécifique à set -o vi. Sous le réglage par défaut de set -o EMACS, Cx, Ce fera apparaître une fenêtre emacs (ou la $EDITOR, si définie) dans laquelle vous pouvez éditer la commande avant de l'exécuter.
John Gowers
8

Le mode Vi représente une énorme amélioration de la convivialité si vous utilisez un client SSH mobile tel que ConnectBot pour Android.

Ceci est dû à une dépendance réduite sur les touches de modification.

Vim est beaucoup plus facile à utiliser avec un clavier virtuel sur un smartphone ou une tablette que tout autre élément, y compris les méthodes de montage natives intégrées à l'interface utilisateur Android. Ironiquement, il est plus facile d'éditer des sources C avec Vim dans une session SSH que d'éditer, par exemple, un message instantané avec le propre widget d'édition de la plate-forme à cette fin.

Le mode shell vi apporte un avantage similaire.

Kaz
la source
J'espérais qu'il y avait le mode vi sur le clavier de mon téléphone. Vous dites que c'est comme si cela existait déjà. Comment obtenir le mode vi sur mon téléphone?
meh
6

Il vous permet d’éditer des éléments en ligne de commande à l’aide des modes et opérations vi.

Un exemple aidera à le rendre beaucoup plus clair:

Vous tapez cp tmp/some_other_long_directory/file1.xt /tmp2/some_other_xtra_long_dir/

mais vous obtenez une erreur - vous devriez avoir tapé file1.txtpasfile1.xt

Sans cette option est activée, vous appuyez sur flèche vers le haut, puis appuyez sur flèche gauche et laissez - le répéter pour ... 35 fois, jusqu'à ce que vous arrivez à la .xtpuis vous tapez le supplément t. Total des frappes: 37 .

Lorsque cette option est définie, vous pouvez (par exemple) appuyer une fois sur la flèche vers le haut, puis sur Escape pour le mode de commande, sur 0 pour aller au début de la ligne, puis sur /xt[return]pour atteindre le xtet vous pouvez taper ipour le mode d’insertion et taper le t manquant. Cela peut paraître incroyablement compliqué à certains égards, mais si vous êtes un utilisateur vim, ces commandes sont déjà très connues. Total des frappes: 9

Michael Durrant
la source
1
Vous pouvez aussi utiliser quelques Alt+Bs ou un Ctrl+Alt+] .en mode Emacs, donc cela ne me semble pas être un bon exemple.
Mikel
2
Voyant que nous sommes le golf: le mode Emacs: Up, Ctrl+Alt+], ., Right, t, Enter= 8. Mode Vi: Up, F, ., a, t, Enter= 7. :)
Mikel
@Mikel, vous avez oublié que le mode vi commence en mode insertion; vous y êtes donc Escégalement, c'est une chaleur morte.
dragon788
5

Je ne suis pas sûr s'il y a un avantage direct. Je suis un viutilisateur depuis plus de 20 ans. Je suis aussi un screenutilisateur encore plus longtemps, et d'autres programmes qui utilisent des viclés. Il est naturel pour moi de préférer régler le mode "vi" en bash. Mais je travaille aussi sur des centaines de serveurs dans mon travail, la plupart sont configurés sur le mode "emacs" par défaut. Je dois donc utiliser les deux modes. Mais c'est vraiment juste une question de préférence.

Arcege
la source
Situation similaire pour moi - j’utilise beaucoup vim mais j’ai toujours trouvé moins de travail pour maîtriser les touches de lecture par défaut ressemblant à emacs (ce qui peut être aussi pratique que le sous-ensemble vi) que d’ajouter un changement de ligne au mode vi sur chaque nouveau système que je rencontre.
jw013
1
Je ne travaille pas sur des centaines de serveurs, mais j'utilise sshrc pour que ma configuration bash reste identique entre ordinateurs différents ssh. Bien sûr, cela n’aide en rien que j’utilise localement une machine qui n’a pas mes .bashrcaffaires.
Kyle Strand
4

Le principal avantage est l'édition modale de votre ligne de commande. Si vous connaissez Vim et que vous aimez sa philosophie, les avantages doivent être évidents. Si vous en avez l'habitude, la mémoire musculaire de votre doigt vous permettra d'éditer vos commandes bash à la vitesse de l'éclair.

NB : Si vous n'aimez pas l'édition modale, vous devriez quand même apprendre à tirer parti du mode (par défaut) emacs. Voici quelques raccourcis clavier astucieux qui fonctionneront avec tous les processus readline, comme bash.

Rahmu
la source
1

Si vous vous y habituez vi, réglez-le en mode vi comme éditeur de shell. Ce serait la raison évidente. L’autre concerne les cas où le logiciel bashn’est pas disponible par défaut dans certains systèmes d’exploitation (principalement UNIX comme AIX, Solaris), de sorte que la fonction d’historique du shell n’est pas disponible, de sorte que vous obtenez les commandes précédentes en définissant l’éditeur de shell sur vi, et Esc, Ctrl+ Kou Ctrl+L

Shâu Shắc
la source
1

Il vous permet de naviguer et d’éditer facilement la ligne de commande à l’aide des raccourcis de vim, par exemple, passer rapidement à un mot, supprimer un mot.

Par les raccourcis par défaut, lorsque vous devez aller au bout de la ligne, vous devez Ctrl+ e, alors que set -o vivous appuyez simplement sur $, comme dans vim.

Hahn
la source
1

Probablement tard dans la soirée, mais pour moi, utiliser le mode vi est plus important lors de la création de scripts interactifs .. par exemple

for i in `ls | grep -v gz`
do
    echo $i
    gzip $i
done

un exemple très simple de ce qui pourrait être assez compliqué… utiliser ESCkvvous place dans une session vi où vous pouvez modifier le script, puis :wqil s'exécute.

Walter Werner
la source
1
Cela peut être un bon exemple d’utilisation de bash en vimode, mais c’est un mauvais exemple de code bash. (1) Utiliser la sortie de lscomme entrée pour tout autre type de traitement est une mauvaise idée. (2) La $(…)syntaxe de substitution de commande est généralement considérée comme plus lisible que la `…`syntaxe. (3) Vous devriez toujours citer les variables du shell, sauf si vous avez une bonne raison de ne pas le faire, et vous êtes sûr de savoir ce que vous faites.
G-Man dit 'Réintégrez Monica' le