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 vims
un 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, e
va al final de Hello
, luego a
comienza a agregar
Algo más elegante, en modo exe, para comentar líneas que contienen my_bad_var
y 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 I
ser el comando para comenzar a insertar al comienzo de la línea y //
la secuencia de comentarios.
\<esc>kdd
presiona 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-this
No 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 -
.