J'avais exactement le même désir que vous: je voulais écrire des commandes vim normales et les faire éditer un flux de pipeline. J'ai été déçu par la difficulté d'utiliser vim normal de cette manière (autant de drapeaux!), Comme le fournissent les options par défaut de vim.
Par conséquent, j'ai écrit un petit wrapper sur vim pour le faire: https://github.com/MilesCranmer/vim-stream/ . Ça s'appelle vims
.
Le cœur de l'encapsuleur est la commande suivante:
vim - -nes "${vim_cmds[@]}" -c ':q!' | tail -n +2
En utilisant cela, avec la génération de commandes que je fais, cela semble assez concis, et parce que vim est un éditeur modal, j'ai créé vims
un éditeur de flux modal. Il existe trois modes principaux utiles pour la mentalité d'édition de pipeline:
[-t|--turn-off-mode] - (Default mode)
Every string is a vim command line, e.g., '%g/foo/d' deletes
all lines with foo.
[-e|--exe-mode] - Translated to '%g/$1/exe "norm $2"', see examples below
[-s|--simple-mode] - Like exe-mode, but runs on 1st line only
Regarde ça:
$ echo "Hello World" | vims -s "ea Beautiful"
Hello Beautiful World
Alors, e
va à la fin de Hello
, puis a
commence à s'ajouter.
Quelque chose de plus sophistiqué, en mode exe, pour commenter les lignes contenant my_bad_var
et supprimer la ligne précédente.
cat my_script.cpp | vims -e 'my_bad_var' 'I//\<esc>kdd'
Ce qui se traduit par vims '%g/my_bad_var/exe "norm I//\<esc>kdd"'
- I
être la commande pour démarrer l'insertion au début de la ligne, et //
être la séquence de commentaires.
\<esc>kdd
appuie sur la touche d'échappement, monte d'une ligne, puis supprime la ligne.
J'ai 11 exemples au total sur le repo, je vous encourage à les vérifier. Encore une fois, cela fonctionne au-dessus de vim, c'est juste un moyen de rendre vim plus semblable à sed pour l'entrée de flux (mais en préservant toutes vos macros vim bien-aimées!)
|
personnage dirige la sortie d'une commande vers une autre.wea-this
n'est pas une commande. La tuyauterie ne peut pas non plus être utilisée pour réaliser ce que vous cherchez à faire; cela fera que stdin de Vim soit l'application de gauche, pas le clavier. Si vous voulez vous stdin dans un tampon vim, commencez avec un moins pour le nom du fichier:echo Hello, world! | vim -
.