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?
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 ...
set -o vi
que 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).set -o vi
. Sous le réglage par défaut deset -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.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.
la source
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.txt
pasfile1.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
.xt
puis vous tapez le supplémentt
. 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 lext
et vous pouvez taperi
pour 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: 9la source
Alt+B
s ou unCtrl+Alt+]
.
en mode Emacs, donc cela ne me semble pas être un bon exemple.Up
,Ctrl+Alt+]
,.
,Right
,t
,Enter
= 8. Mode Vi:Up
,F
,.
,a
,t
,Enter
= 7. :)Esc
également, c'est une chaleur morte.Je ne suis pas sûr s'il y a un avantage direct. Je suis un
vi
utilisateur depuis plus de 20 ans. Je suis aussi unscreen
utilisateur encore plus longtemps, et d'autres programmes qui utilisent desvi
clé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.la source
ssh
. Bien sûr, cela n’aide en rien que j’utilise localement une machine qui n’a pas mes.bashrc
affaires.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
, commebash
.la source
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 logicielbash
n’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 survi
, et Esc, Ctrl+ Kou Ctrl+Lla source
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 vi
vous appuyez simplement sur$
, comme dans vim.la source
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
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
:wq
il s'exécute.la source
vi
mode, mais c’est un mauvais exemple de code bash. (1) Utiliser la sortie dels
comme 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.