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"