Vim scripting con Python
Vim permite agregar funcionalidades mediante varios lenguajes externos, entre ellos Perl, Python, Ruby y Tcl. Para poder hacer uso de esta característica es necesario haber compilado Vim con el soporte para el lenguaje necesario (con el flag-python, para soporte python). En debian existe un paquete llamado vim-nox (no X) que contiene una versión compilada con soporte para los cuatro lenguajes mencionados:
Para comprobar que efectivamente se encuentre habilitado el soporte para Python ejecutar Vim y en modo comando escribir:
Un 1 indica que Vim interpreta Python ;)
Es muy recomendable leer la ayuda en línea:
También se puede acceder vía web desde http://vimdoc.sourceforge.net/htmldoc/if_pyth.html
Ejecución de código Python
La ejecución de una línea de código Python se realiza según la sintaxis:
Ejemplo:
Aquí el prompt mostrará el mensaje “hello world”.
En cambio para escribir código en varias líneas hay que usar la siguiente forma:
{script}
{endmarker}
Ejemplo:
def get_user():
import os
return os.getenv('USER')
EOF
De esta manera la función queda guardada en la memoria de la sesión actual. Luego su uso podría ser el siguiente:
Tambien es posible cargar y/o ejecutar código desde un archivo externo. La sintaxis es:
Ejemplo:
Simyscript.pynecesitara parámetros la forma de pasárselos es la siguiente:
:py sys.argv = ['foo', 'bar']
:pyf myscript.py
El módulo vim
La comunicación entre Python y Vim se realiza a través del módulo vim, el cual hay que importar antes de usar:
Como indica la ayuda de Vim, el módulo implementa dos métodos (vim.command(str)yvim.eval(str)), tres constantes (vim.buffers,vim.windowsyvim.current) y un objeto error (vim.error). Las tres constantes mencionadas no son realmente constantes sino variables que pueden ser reasignadas pero, como dice también la ayuda, esto sería absurdo ya que se perdería acceso a los objetos de Vim que referencian. Por otra parte cabe recordar que no existen constantes en Python. Como cita el libro "Inmersión en Python":
Todo puede cambiar si lo intenta con ahínco. Esto se ajusta a uno de los principios básicos de Python: los comportamientos inadecuados sólo deben desaconsejarse, no prohibirse.




