Vim a un mode Ex qui peut être entré en entrant Q, et un mode de ligne de commande avec lequel vous pouvez entrer q:. Les nouveaux utilisateurs de vim se plaignent généralement d’entrer accidentellement dans ces modes lorsqu’ils tentent de quitter vim. En tant que tel, je désactive ces clés dans mon ~/.vimrc
pour m'empêcher de les frapper accidentellement (en particulier q:):
map q: <Nop>
nnoremap Q <nop>
Bien que j'ai lu la documentation de vim sur Ex , que je sois un utilisateur moyennement expérimenté et que je comprenne l'idée de base qui la sous-tend, je ne parviens toujours pas à en trouver une utilisation dans mon utilisation quotidienne de vim. En général, cela semble moins utile que de simplement entrer une commande de ligne de commande vim standard avec le préfixe :, car les modifications ne sont pas immédiatement répercutées.
Ex a-t-il une utilisation quotidienne pratique dans Vim moderne? Y a-t-il quelque chose de plus facile à faire en mode Ex qu'avec les commandes standard? Quelle est la différence entre le mode ligne de commande et le mode ex?
Q
etq:
sont très différents. Vous faites seulement référence àQ
droite?q:
spécifiquement et vous l'avez mentionnée comme étant, parmi les deux séquences de touches, celle qui vous pose le plus de problèmes. Et deux des réponses ici peuvent être utiles aux personnes qui le recherchent par le terme correct.q/
et commentq:
faire, vous les considérerez probablement comme les commandes les plus utiles de Vim. Et oui, vous savez déjà comment les utiliser, vous ne savez pas encore ce qu’ils font. Regardez ce screencast pour le découvrir.Réponses:
Q
est, comme vous l'avez trouvé, en mode ex. Ce n'est pas tout à fait utile d'utiliser interactivement, mais cela existe parce que Vim peut être utilisé pour émuler l'ancienex
binaire. En fait, de nombreux systèmes fournissent laex
commande simplement en la liant àvim
.q:
, ou:<C-f>
, à la place, fournit un moyen de parcourir votre historique de ligne de commande et de le modifier comme un tampon normal. Cela facilite la recherche d'une commande précédente que vous avez exécutée, modifiez-la avec les commandes Vim normales, puis exécutez la commande modifiée. Les commandesq/
etq?
existent pour fournir les mêmes fonctionnalités pour l'historique de recherche.la source
Vim en mode Ex est utile lorsque:
Fondamentalement,
vi
le mode visuel deex
Vim Ex est simplement une émulation deex
(ils exécutent toujours le même code), il est donc possible d’obtenir le mode de commande deex
vi et vice-versa. Il existe actuellement deux modes: le mode Ex (vim -e
) et le mode Ex amélioré qui permet des commandes plus avancées que le mode Ex compatible vi (vim -E
). Voir: Quelle est la différence entre le mode Ex et le mode Ex amélioré?Éditer des fichiers de manière non interactive est l’utilisation la plus courante et les utilisateurs l’utilisent de la même manière
sed
etawk
, bien qu’ils soient davantage orientés vers le flux - ils lisent uniquement le fichier du début à la fin (ils ne sont pas conçus pour fonctionner avec plusieurs lignes ) whilevim
est orienté tampon: vous pouvez avancer ou reculer dans le fichier à votre guise, ce qui le rend si puissant.Fondamentalement:
Néanmoins, les gens semblent en abuser pour essayer d’éditer des fichiers et la vérité est qu’il ne les édite pas. Deuxièmement, ses options telles que in-place (
-i
) sont des extensions FreeBSD non standard et peuvent ne pas être disponibles sur d'autres systèmes d'exploitation. Donc, si vous voulez éviter le code non transférable, les frais d’E / S et les effets secondaires négatifs (tels que la destruction des liens symboliques), vous devez utiliserex
l’éditeur standard basé sur les commandes UNIX (aveced
) BashFAQ .Une autre chose que je trouve utile en mode Ex est de l'utiliser comme un terrain de jeu (similaire à la
python
console) où vous pouvez exécuter plusieurs commandes à la suite, travailler / déboguer des expressions régulières, vérifier la configuration de vim, exécuter des commandes externes ou travailler avec des registres, etc. .Par exemple:
ce qui est plus facile en mode Ex qu'en mode normal (où vous ne pouvez voir que votre dernière commande).
Usages pratiques
J'ai les alias suivants dans mon
.bash_aliases
:Remarque: L'utilisation
bufdo
n'est pasex
conforme à la méthode POSIX (selon le manuel ), vous pouvez donc envisager de l'utiliser avecfind
. Le!
est utilisé pour forcer la commutation des tampons sans sauvegarder (sinon un avertissement est généré).Le premier que j'utilise pour rogner les espaces de fin dans tous mes fichiers source, par exemple:
La seconde convertit tous les onglets en espaces (de manière récursive), par exemple:
Pour moi, utiliser
retab
suffit, mais certains inconvénients sont décrits ici . Ajoutez un supplément-V
pour une sortie de verbosité accrue.Notez que les exemples ci-dessus utilisant zsh / bash4 globbing (
**
), assurez-vous donc que votre shell le supporte et qu'il est activé.Pour des exemples plus pratiques (comme l'analyse de fichiers HTML), vérifiez:
Comment convertir un fichier de code source en HTML?
Par exemple
Apprenez également plus sur le mode Ex sur:
la source
ex
qu'il est aveced
,sed
ouawk
?ex
mode. Je ne comprends pas pourquoi vous avez un bang (!
) dans votre commande detrim
pseudonymebufdo
. Cela n'abandonnera-t-il pas simplement tous les changements dans tous les fichiers sauf le dernier? Si non pourquoi pas!
fondamentalement, cela ne fonctionnera pas, comme à chaque fois que la mémoire tampon est activée,ex
se plaindrait des modifications non enregistrées (et nous enregistrons les modifications à la fin avecxa
). L’avertissement peut être désactivé, mais il est beaucoup plus facile de l’ajouter!
.!
commande, la commande échouera si le tampon ne peut pas être abandonné, mais elle ne spécifie pas explicitement que!
le tampon ne sera pas ignoré ... Donc, "abandonné" dans ce cas signifie "supprimé" , car il ne contient rien qui ne soit écrit sur le disque "? Ou quoi? (Je regarde:help bufdo
)J'utilise rarement le mode ex, mais quand j'en ai besoin, je suis reconnaissant de son existence.
J'accède parfois aux systèmes via ssh sur VPN, et ces connexions peuvent parfois devenir lentes. Pour aggraver le problème, j’ai parfois besoin d’éditer un fichier côté distant qui, en plus d’être derrière ssh et VPN, utilise une connexion série lente (donc 9600 bauds plus beaucoup de latence réseau).
Il arrive que ce soit comme cela que les retours visuels et les mises à jour d'écran deviennent plus un obstacle, car ce que je vois est retardé (l'effet est un peu comme parler dans un micro mais avec des haut-parleurs éloignés, comme dans un stade de sport. Les actions deviennent agitées. et parfois confus en raison de la réaction tardive).
Dans ce cas, le fait de ne pas afficher les modifications en retour est un avantage utile, car je peux en faire plus en moins de temps si je n'attends pas que l'écran se mette à jour.
Lorsque j'ai terminé les modifications, je retourne en mode visuel pour une mise à jour d'écran unique afin de réviser mon travail. Ensuite, je peux revenir en mode ex ou sauvegarder car j'ai terminé.
la source
La fenêtre de ligne de commande est utile pour écrire des commandes longues et compliquées. Comme l'historique des commandes s'ouvre sous forme de fenêtre, vous pouvez utiliser n'importe quelle commande / mappage d'édition de vim.
Supposons que vous souhaitiez modifier une commande de substitution longue que vous avez exécutée une fois, mais que vous avez commis une erreur:
Afin de changer la chaîne de recherche, vous ne pouvez pas utiliser les mouvements vim comme
b
dans la ligne Ex pour naviguer (bien que je pense qu'il existe des mappages de touches pour cette navigation). Au lieu de cela, la plupart des gens appuient sur la flèche gauche plusieurs fois.Une meilleure façon: appuyez sur
q:
pour aller dans la fenêtre de ligne de commande,k
pour vous déplacer jusqu'à la dernière commande et pour naviguer avec des mouvements normaux vers la partie de la commande que vous souhaitez modifier. Vous voulez changer un mot entier, aucun problème:ciw
.la source
q:
est la ligne de commande Ex? L'aide utilise uniquement la phrase "Ex" pour le mode sélectionnéQ
, mais cela ne prend pas en charge l'édition standard de vim à laquelle vous faites référenceq:
, mais l'aide l'appelle simplement "Mode de ligne de commande". Je sais que j'ai confondu les deux au début, mais nous devrions probablement nous assurer que la distinction est claire.:help q:
avant d'avoir décidé d'utiliser cette phrase, mais je pourrais être confus quant à la terminologie.:
, mais je pourrais utiliser cette erreur.q:
ne pas ouvrir une ligne de commande Ex. Il ouvre la fenêtre de l'historique des commandes , dans laquelle les commandes Ex actuelles et précédentes peuvent être éditées. La ligne de commande Ex correspond à ce que vous obtenez lorsque vous appuyez sur:
en mode normal.:
commandes en tant que commandes "Ex". À mon humble avis, seules les commandes réellement disponibles dans Ex doivent être considérées comme des commandes Ex.Une personne malvoyante qui a commencé à devenir aveugle m'a dit de passer à ex, ce qui en fait un usage. Je suis moi-même considérablement plus âgé que vi et je suis passé d'ed à ex il y a longtemps (oui, je sais, "ed est l'éditeur standard"). La seule chose que je fais en mode vi, c'est% -bouncing pour faire correspondre les parens lors de l'écriture de code Lisp.
la source
ex
spécifiquement a été mentionné cependant.Outre les utilisations déjà mentionnées ici, ex est également un moyen d’éditer des fichiers sur la console Linux si cela se trouve sur la plate-forme S / 390 et si la console est orientée ligne au lieu d’être écran.
la source
Probablement pas. Cependant, bien que passer en mode Ex ne soit pas vraiment utile, il est toujours utile d'apprendre les commandes Ex, en particulier parce que vous utilisez des commandes d'édition ex avec
:g/
des commandes globales pour agir sur les lignes correspondantes.la source
L'original "ex" était la version améliorée de l'éditeur de texte "ed" sous Unix. Dans 2BSD, un mode visuel a été ajouté et le nouvel éditeur s'appelle "vi".
Si on veut utiliser la ligne de commande ex, il passera en mode commande avec la touche ":". Donc, dans ma meilleure compréhension, ex n'est en fait pas là pour la nostalgie, c'est la partie pour fournir le mode commande.
Vous pouvez également entrer en mode insertion par
puis appuyez sur "entrée et tapez votre texte. Quittez avec ^ c. Ou tapez le tout sur une seule ligne de commande, comme
la source