Pregunta:
Quiero ejecutar el siguiente shell.
wea-this is the end of the second word | vim j
exit 0
Lo que esperaba que canalizara las pulsaciones de tecla w
(avanzar una palabra) luego e
(final de la palabra) luego a
(agregar) luego -this is the end of the second word
(texto) al documento de Vim llamado j
que ya tiene palabras en él.
Se produjo el siguiente error cuando ejecuté el script de shell.
/root/bin/tt.sh: line 1: wea-this: command not found
Vim: Warning: Input is not from a terminal
Estoy ejecutando Ubuntu 14.04. Se apreciarán dos tipos de respuestas:
- Cómo utilizar la tubería para lograr este resultado deseado.
- Otro método mediante el cual puedo usar "comandos Vim" (no comandos ed o sed) para editar un documento de texto desde un script de shell.
Respuesta:
Para insertar la cadena "hello"
en la primera línea del archivo j
, puede escribir en su shell el siguiente comando:
vim +"1 | put! ='hello'" j
-
:1
mueve el cursor a la primera línea del búfer -
:put! ='hello'
pega la cadena "hola" encima de la línea actual
Para insertar la cadena "hello"
y luego guardar y salir del archivo:
vim +"1 | put! ='hello' | x" j
Lo mismo que antes, acabamos de agregar el comando Ex :x
que guarda y sale.
De manera más general, puede ejecutar cualquier secuencia de comandos Ex en un archivo, desde un shell interactivo o desde un script bash, como este:
vim +'Ex command1 | Ex command2 | ...' file
Si tiene muchos comandos Ex, puede escribirlos todos dentro de un archivo dedicado (llamado, por ejemplo, myExCommands.vim
), un comando por línea, y luego desde el shell o un script puede myExCommands.vim
(con el comando Ex :source
o la versión corta :so
) así:
vim +'so myExCommands.vim' file
Editar
Veo que ha editado su pregunta.
Creo que la respuesta anterior todavía se aplica, porque puede ejecutar cualquier comando normal desde el modo Ex con los comandos Ex :normal
y :execute
.
Por ejemplo, digamos que quiere:
- mueva el cursor en la primera línea del búfer (
1G
) - mueva el cursor al primer carácter que no sea un espacio en blanco en la línea (
_
) - mueve el cursor una palabra hacia adelante (
w
) - mueva el cursor al final de la nueva palabra (
e
) - entrar en modo de inserción después del carácter debajo del cursor (
a
) - inserta la cadena
hello
- guardar y salir (
:x
)
Para hacer esto en el archivo j
, escriba desde el shell:
vim +"execute 'normal! 1G_weahello' | x" j
Para más información, ver:
:help +cmd
:help :normal
:help :execute