vimscript – ¿Cómo puedo agregar texto a la línea actual?

Pregunta:

Actualmente estoy tratando de averiguar vimscript y me encontré con la función append() . La documentación indica que puede especificar la línea a la que se debe agregar una expresión, así que intenté:

:call append(line('.'), Foo())

Foo() devuelve una cadena.

Lo extraño es que la cadena se agrega a la siguiente línea después de la actual. Así que probé la line('.') - 1 , solo para ver que se agrega a la línea sobre la actual.

Estoy asombrado, confundido y sin palabras en este momento.

Espero que alguien pueda arrojar algo de luz sobre esto.

Respuesta:

append() inserta varias líneas de texto debajo de la línea especificada como primer argumento. Esto está en línea con el comando append ex. Por ejemplo, puede escribir :append (e ingresar al modo ex), luego escribir varias líneas de texto y salir del modo ex (presionando <cc> por ejemplo), las líneas aparecerán después de la línea en la que se encuentra el cursor. En otras palabras, el comando append significa: agregar las líneas de texto que escribiré debajo de la actual.

La función append() VimScript permite especificadores de línea, lo que la hace más útil que el comando ex. Las cosas útiles que vienen a menudo son formas de insertar fragmentos de texto al principio y al final de un archivo. por ejemplo, para LaTeX esto puede ser útil:

call append(line('^'), [ '\documentclass[12pt]{article}'
\                      , '\begin{document}'])
call append(line('$'), '\end{document}')

Donde la line('$') es la última línea en el archivo y la line('^') siempre devuelve 0 (y podría haber escrito eso sin problemas).

Para obtener el comportamiento de A de Vim, o cualquier otro comando de modo normal de Vim, puede usar normal . Hacer que la salida de Foo() aparezca al final de una línea puede ser un poco más complicado, una forma es usar execute :

execute ':normal! A' . Foo()

O puede usar append y luego realizar J :

call append(line('.'), Foo())
normal! Jx

(Tenga en cuenta que se necesita x para eliminar el espacio generado por J , pero es posible que esto no funcione como se esperaba si la cadena generada por Foo() comienza con espacios).

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım