Je voudrais écrire tout le tampon dans la sortie standard ( /dev/stdout
) au lieu du fichier et la commande suivante fonctionne comme prévu lors de l'édition du fichier:
:w >> /dev/stdout
Astuce: Appuyez sur Control+ Lpour rafraîchir l'écran.
Mais cela ne fonctionne pas comme prévu lorsque j'essaie de faire la même chose à partir de la ligne de commande (de manière non interactive ), par exemple:
$ echo This is example. | vim - '+:w >> /dev/stdout' '+:q!'
Vim: Reading from stdin...
La même chose avec :w !tee
, :x! /dev/stdout
, :%print
et similaire.
Avant de quitter, il est dit: [Device] 1L, 17C appended
.
Existe-t-il un moyen de forcer vim à écrire l'entrée standard dans la sortie standard au milieu d'un tuyau? Peut-être que c'est en quelque sorte tamponné?
command-line
invocation
unix
ex-mode
Kenorb
la source
la source
vim
pour l'analyse de fichiers au lieu desed
(par exemple, des modifications complexes répétées en masse de plusieurs gros fichiers). L'exemple ne fait rien pour rester simple et ne pas faire de doublon potentiel d'un autre article .Réponses:
Pour imprimer le tampon sur la sortie standard du shell,
vim
doit démarrer en mode Ex, sinon il s'ouvrira de manière "normale" avec sa propre fenêtre et effacera tous les tampons de sortie à la fermeture.Voici l'exemple de travail le plus simple:
ou encore plus court:
Remarque: La commande
vim -e
est fondamentalement équivalente à laex
commande.Un descripteur de fichier spécial pour l'entrée standard doit être spécifié (
/dev/stdin
) afin d'éviter des messages supplémentaires gênants (comme expliqué ci-dessous).Et voici quelques exemples d'analyse de chaînes:
Remarque: Le dernier exemple montre un message ennuyeux supplémentaire qui n'est pas possible de le cacher, c'est parce qu'une stratégie standard de lire le fichier entier en mémoire et de dire qu'il a été lu à partir de l'entrée standard. Le premier exemple fonctionne sans le message, car le fichier produit des données sans fin sans signal de fin de fichier ( EOF ), il n'atteindra donc jamais la fin de sa lecture d'entrée.
En relation:
la source
+q!
plutôt que+:q!
, non?vipe
est un outil pratique pour éditer des pipelines, qui fait partie dumoreutils
package. Il s'agit d'un wrapper pour les éditeurs (y compris levi
qui lui donne son nom). Il utilise laEDITOR
variable d'environnement pour définir l'éditeur, donc, comme avec d' autres outils qui utilisentEDITOR
( par exemplecrontab
,visudo
etc.), vous pouvez les actions de script en utilisant cette variable. Par exemple, vous pouvez le modifier pour faire:Bien sûr, des actions compliquées peuvent aller jusqu'à citer l'enfer, vous pouvez donc écrire un script:
Et utilisez
EDITOR="sh /path/to/script"
.la source