invocation – ¿Es posible canalizar comandos de vim a vim?

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:

  1. Cómo utilizar la tubería para lograr este resultado deseado.
  2. 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

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım