Tenía exactamente el mismo deseo que tú: quería escribir comandos vim normales y hacer que editaran un flujo de canalización. Me decepcionó la dificultad de usar vim normal de esta manera (¡tantas banderas!), Como lo proporcionan las opciones de vim predeterminadas.
Por lo tanto, escribí un pequeño contenedor en vim para hacerlo: https://github.com/MilesCranmer/vim-stream/ . Se llama vims.
El corazón del contenedor es el siguiente comando:
vim - -nes "${vim_cmds[@]}" -c ':q!' | tail -n +2
Usando esto, con la generación de comandos que hago, resulta ser bastante conciso, y debido a que vim es un editor modal, hice vimsun editor de flujo modal. Hay tres modos principales que son útiles para la mentalidad de edición de canalización:
[-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
Ver este:
$ echo "Hello World" | vims -s "ea Beautiful"
Hello Beautiful World
Entonces, eva al final de Hello, luego acomienza a agregar
Algo más elegante, en modo exe, para comentar líneas que contienen my_bad_vary eliminar la línea anterior.
cat my_script.cpp | vims -e 'my_bad_var' 'I//\<esc>kdd'
Lo que se traduce en vims '%g/my_bad_var/exe "norm I//\<esc>kdd"': el Iser el comando para comenzar a insertar al comienzo de la línea y //la secuencia de comentarios.
\<esc>kddpresiona la tecla de escape, sube una línea y luego la borra.
Tengo 11 ejemplos totales en el repositorio, te animo a que los revises. Una vez más, esto se ejecuta sobre vim, es solo una forma de hacer que vim se parezca más a sed para la entrada de flujo (¡pero preservando todas sus queridas macros vim!)
|personaje canaliza la salida de un comando a otro.wea-thisNo es un comando. La tubería tampoco se puede utilizar para lograr lo que está buscando hacer; hará que el stdin de Vim sea la aplicación de la mano izquierda, no el teclado. Si usted desea conseguir la entrada estándar en un búfer en vim, comenzar con un signo menos para el nombre del archivo:echo Hello, world! | vim -.