¿Cómo uso vim en la línea de comando para agregar texto en medio de un archivo?

¿Cómo uso vim en la línea de comando para agregar texto en medio de un archivo?

Estoy intentando escribir un comando similar a lo siguiente:

vim -c "XXXXXX" myFile

En lugar de "XXXXX", quiero proporcionar algunos comandos a vim para agregar texto a un punto arbitrario del archivo, especificando un número de línea exacto y, en un escenario diferente, buscando una línea específica y luego insertándola en la línea de arriba.

Lo que estoy tratando de hacer es una especie de "añadir" inteligente donde puedo agregar líneas a un bloque de código o funcionar dentro de un script. En última instancia, mi objetivo es tener un script de configuración que altere tal vez una docena de archivos del sistema.

Idealmente, solo involucraría un indicador -c e idealmente sería legible para cualquiera que pueda entender los comandos del modo normal; en mi cabeza originalmente estaba pensando en algo así como "ggjjjiInsertingOnLine4:wq"una vez que pueda ponerlo en modo normal.

Respuesta1

Los rangos de línea de comando se pueden usar para seleccionar una línea específica que debe editarse. Luego se puede utilizar un patrón sustituto para realizar la edición (añadir).

Por ejemplo, para agregar el texto "hola" al principio de la línea 3:

vim -c "3 s/^/hi/" -c "wq" file.txt

Para agregar el texto "hola" al final de la línea 3:

vim -c "3 s/$/hi/" -c "wq" file.txt

Para encontrar más opciones y explicaciones:

vim -c "help cmdline-range"

Algunos ejemplos más

Para encontrar una cadena de búsqueda "hola" y agregar la cadena "todos" en la línea 3:

vim -c "3 s/\(hi\)/\1 everyone/" -c "wq" file.txt

Para encontrar una cadena de búsqueda "hola" y anteponer una cadena "decir" en la línea 3:

vim -c "3 s/\(hi\)/say \1/" -c "wq" file.txt

En caso de que no se conozca el número de línea, para agregar las primeras apariciones de la cadena "hi" en cada línea con "all":

vim -c "1,$ s/\(hi\)/\1 all/" -c "wq" file.txt

Para agregar todas las apariciones de la cadena "hi" en cada línea con "all":

vim -c "1,$ s/\(hi\)/\1 all/g" -c "wq" file.txt

Para más información sobre sustituciones:

vim -c "help substitute"

información relacionada