¿Cómo puedo usar vim para editar el texto de Perl, mientras que el guión todavía se está ejecutando?

StackOverflow https://stackoverflow.com/questions/785967

  •  16-09-2019
  •  | 
  •  

Pregunta

Tengo un script en Perl que las salidas de texto. Quiero importar este texto en vim, editarlo, guardarlo y luego salir. A la salida, quiero que el guión original de Perl para procesar el archivo editado.

por ejemplo. ¿Cómo funciona crontab -e cuando se agrega un nuevo puesto de trabajo.

Gracias:)

¿Fue útil?

Solución

suena como un caso muy sencillo de usar sistema ejecutar vim en el nombre de archivo. Eso va a esperar a que se hace vim, momento en el que puede seguir adelante y leer los nuevos contenidos del archivo.

Otros consejos

use File::Temp;
my $fh = new File::Temp();
my $fname = $fh->filename;
print $fh "My Text";
$fh->close();
system($ENV{EDITOR}, $fname);
open $fh, '<', $fname or die "Can't open temp file: $!";
while(<$fh>) { print }
close $fh;

Una sugerencia:? ¿Por qué no agarrar la fuente de crontab y ver lo que hace

Aparte de eso, descansar tiene su respuesta.

Y creo que la manera de pensar acerca de esto es:

"Está bien, necesito un programa para escribir un archivo, llame a vim, y luego hacer un procesamiento adicional en el archivo. Por lo tanto, aquí está mi rutina para escribir el archivo, aquí está mi rutina que llama vim (uso del sistema), y aquí está mi rutina para hacer el post-procesamiento después de vim está hecho. Ahora voy a ate a todos juntos en mi programa principal, y he terminado! "

Parece que quieren canalizar la salida de su script en vim:

script | vim

Y a continuación, desea que el script para saber de alguna manera que Vim está terminado y reanudar. Así no es como E / S que funciona el redireccionamiento. El guión no tiene conocimiento de qué programa su salida se canaliza en.

Usted ha hablado de otros programas como crontab y cvs; una cosa éstos tienen en común es que invocan el editor de sí mismos . Se crean archivos temporales, leen las variables editor o el entorno visual (consulte el manual para obtener más información acerca de cómo eligen cuál), ejecute el programa dado, y esperar a que el programa termine. Luego siguen corriendo y utilizar el archivo que especificó anteriormente.

Resulta que he hecho exactamente eso en Perl. He creado un archivo temporal (con tempfile ), escribió un montón de texto en él, y luego se usa system para invocar el editor en el archivo. Ni siquiera tiene que cerrar el archivo mientras se ejecuta el editor.

Tubería la salida a vim - y no se olvide el guión al final.

script.pl | vim -

Esto abrirá vim con el contenido de la salida de los scripts. Simplemente guardarlo : w nombre de archivo y salida : q . No es así como funciona crontab -e, pero se acerca lo suficiente de una manera fácil.

Editar:
Echaba de menos esta parte (o tal vez la pregunta fue editado después):

  

A la salida, quiero que el original de Perl   script para procesar el archivo editado.

Esta no es la mejor manera de hacer esto, pero ir con mi respuesta original, esto funciona (si guarda el archivo como archivo.txt):

perl -le 'print "1234"' | vim - && perl -pe '' file.txt

basta con sustituir los comandos de Perl con sus comandos de Perl y debería funcionar. Como he dicho, esto no es la mejor respuesta, pero debería funcionar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top