Il semble que si je cours ce qui suit à l'intérieur du vim
:
:w !wc -w
J'obtiens le nombre de mots du file. Mais je ne comprends pas la syntaxe. Comment cela fonctionne et comment puis-je spécifier que je veux le nombre de mots d'un paragraphe et non de l'set du file?
Lorsque vous lancez :w !wc -w
, vim crée un file temporaire, puis le dirige vers la command suivant le !
, ou plutôt il met vos données dans un file temporaire et request à votre shell d'exécuter une command qui ressemble à ceci:
(wc -w) < /tmp/vHhjUPf/2
Où cette dernière partie est un dossier / nom de file random dans lequel vim stocke vos données po Une chose intéressante à noter, cette command échouera dans les coquilles non conforms comme le poisson . C'est parce que le poisson utilise la syntaxe (cmd)
pour la substitution de command au lieu de son utilisation traditionnelle.
Pour spécifier une plage de données à transmettre à une command externe, tapez ceci:
:<range>w !<command>
Par exemple,
:1,5w !wc -w
countrait le nombre de mots compris dans la plage délimitée par les lignes 1 et 5. Tapez :h 10.3
pour plus d'informations sur les plages.
Vous pouvez aussi utiliser
:<range>!<command>
pour replace le contenu des lignes 1 à 5 par la sortie de la command, ce qui est utile lors de l'utilisation de commands externes pour filterr du text. (par exemple pour le sorting.) Type :h !
pour plus d'informations sur les filters.
Si vous souhaitez exécuter une command externe sans que Vim ne transmette le text à son input standard, exécutez la command comme ceci :!command
.
La command vim :w
écrit simplement sur le disque le file en cours.
En utilisant !w newfilename
vous écrivez le file actuel dans un nouveau nom de file.
La command :!ls -al
lance le programme externe ls
avec les parameters -al
et affiche le résultat.
La command que vous mentionnez ( :w !wc -w
) va (probablement) écrire simplement le file courant dans un pipe à une command externe ( wc -w
) qui à son tour countra les mots dans le file courant.