vimscript-python – ¿Cómo ejecutar la declaración de Python para cada línea?

Pregunta:

Tengo el siguiente código de muestra que modifica la línea actual usando la declaración de Python:

:py import vim; vim.current.line="["+vim.current.line+"]"

¿Cómo puedo ejecutar esta declaración para cada línea en el archivo actual?

Relacionado: ¿Cómo se puede usar Python en Vim? en stackoverflow

Respuesta:

Puede usar el comando pydo disponible desde Vim 7.4, el manual describe cómo funciona mejor que yo:

: [rango] pydo {cuerpo}

Ejecute la función de Python "def _vim_pydo (line, linenr): {body}" para cada línea en el [rango], con los argumentos de la función configurados en el texto de cada línea, sin un <EOL> final, y el actual número de línea. La función debe devolver una cadena o Ninguno. Si se devuelve una cadena, se convierte en el texto de la línea en el turno actual. El valor predeterminado para [rango] es el archivo completo: "1, $".

Para su ejemplo, puede usar un comando como:

:python import vim
:pydo vim.current.buffer[linenr - 1] = '[%s]' % line

El linenr - 1 está ahí porque las líneas en vim.current.buffer están indexadas con 0, pero Vim comienza a contar líneas desde 1.

Lo bueno es que puede definir fácilmente un comando personalizado para ejecutar su código Python en un rango de líneas:

command! -range=% BracketLines 
    \ <line1>,<line2>pydo vim.current.buffer[linenr - 1] = '[%s]' % line

Leave a Comment

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

web tasarım