Tag Archives: vim

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:

sudo apt-get install vim-nox

Para comprobar que efectivamente se encuentre habilitado el soporte para Python ejecutar Vim y en modo comando escribir:

:echo has("python")

Un 1 indica que Vim interpreta Python ;)

Es muy recomendable leer la ayuda en línea:

:help python

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:

:[range]py[thon] {stmt}

Ejemplo:

:python print "hello world"

Aquí el prompt mostrará el mensaje “hello world”.

En cambio para escribir código en varias líneas hay que usar la siguiente forma:

[range]:py[thon] < < {endmarker}
{script}
{endmarker}

Ejemplo:

:python < < EOF
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:

:py user = get_user()

Tambien es posible cargar y/o ejecutar código desde un archivo externo. La sintaxis es:

:[range]pyf[ile] {file}

Ejemplo:

:pyfile myscript.py

Simyscript.pynecesitara parámetros la forma de pasárselos es la siguiente:

:py import sys
: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:

:python import vim

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.


Read more »

Tags: , ,

Snippets en Vim con snipMate

Basado en el editor TextMate (mac), snipMate.vim es un plugin que permite insertar pedazos de código de uso frecuente simplemente tipeando parte del mismo y apretando<tab>.

Por ejemplo, supongamos que estamos editando un programa en C y queremos agregar un ciclo for, simplemente escribimosfor<tab>y esto se expandirá en un típico bucle de C

for (i = 0; i < count; i++)
{
    /* code */
}

Inmediatamente después el cursor quedará resaltando la palabra “count” para que podamos reemplazarla por nuestra condición de fin. Un par de tabs más nos llevarán al cuerpo del ciclo donde podremos seguir utlizando snippets comopr<tab>, lo que expandirá en la función printf

for (i = 0; i < 10; i++)
{
    printf("%s\n");
}

snipMate tiene una sintáxis muy sencilla (según dicen, muy similar a la usada por TextMate) lo que permite crear nuestros propios snippets, o mejorar los existentes. La versión actual (0.77) trae una colección de snippets para los siguientes lenguajes: C, Obj-C, C++, Sh, TeX, Java, Ruby, Perl, Python, PHP, JavaScript, y HTML.

El proyecto parace estar bastante activo y la última versión es del 30/03/2009.

Tags:

Exuberant Ctags con Vim

Exuberant Ctags es una reimplementación de Ctags, originalmente escrito para Unix, el cual genera un índice de palabras clave (tags) encontradas en archivos de código fuente. Dependiendo del lenguaje y el modo en que sea usado Ctags, esas palabras clave pueden ser funciones, variables, clases, interfaces, etc. Luego este índice puede ser usado por Vim (u otro editor de código que soporte Ctags) para llevarnos rápidamente de un lugar a otro dentro de nuestro código, incluso entre distintos archivos.

Exuberant Ctag, escrito por Darren Hiebert, fue distribuído con Vim hasta la versión 6 de este último. Actualmente es un proyecto independiente. Soporta 34 lenguajes de programación y la posibilidad de utilizar expresiones regulares POSIX para afinar nuestra indexación.

Instalación

sudo apt-get install exuberant-ctags

El nombre del programa difiere del nombre del paquete y se llamactags-exuberant. Aunque puede ser invocado mediante el link simbólicoctagscreado durante la instalación.

Creación del archivo tags

La forma más sencilla de crear un índice es movernos al directorio donde tenemos los archivos fuente y ejecutar

ctags -R

Esto creará el archivotagsconteniendo el índice de todo el código reconocido. La opción-Rindica que recorra recursivamente los subdirectorios bajo el actual. Podemos reemplazarla por*para evitar que explore subdirectorios.

Luego de generar el índice sólo nos resta indicarle a Vim el archivo de tags a usar. Esto podemos hacerlo desde el modo comando::set tags=~/my_project/tags; o bien definirlo en~/.vimrc. También funciona el ejecutar Vim desde el mismo directorio donde se encuentra el archivo de tags.

Uso desde Vim

  • Ctrl-]sobre el nombre de clase o método nos lleva al archivo con su definición.
  • Ctrl-Tnos regresa al archivo anterior.
  • Ctrl-W ]sobre el nombre de clase o método abre el archivo con su definición en la mitad superior de la ventana.

Tags:

Cambiar tamaño de ventana en Vim

Teniendo en cuenta las teclas de dirección de VIM:

  • hizquierda
  • jarriba
  • kabajo
  • lderecha

Atajos útiles para redimensionar ventanas horizontales (:split)

:map &lt;C-j&gt; &lt;C-W&gt;+
:map &lt;C-k&gt; &lt;C-W&gt;-

Atajos útiles para redimensionar ventanas verticales (:vsplit)

:map &lt;C-h&gt; &lt;C-W&gt;&lt;
:map &lt;C-l&gt; &lt;C-W&gt;&gt;

VIM en 1440×900 píxeles:
Vim 1440×900

Tags:

Librándonos del ^M – mezclando dos y unix

Traducción Getting rid of ^M – mixing dos and unix

Al abrir archivos de otros SO podemos encontrarnos con^Mal final de cada línea:

import java.util.Hashtable; ^M
import java.util.Properties; ^Mimport java.io.IOException;
import org.xml.sax.AttributeList; ^M
import org.xml.sax.HandlerBase; ^Mimport org.xml.sax.SAXException;

/**^M
  * XMLHandler: This class parses the elements contained^M
  * within a XML message and builds a Hashtable^M

Algunos programas no son consistentes en la manera de insertar saltos de línea, entonces te encontrarás con algunas líneas que tienen un salto de línea y un^My algunas que tengan un^My no un salto de línea… con Vim la limpieza se realiza en dos pasos:

1. reemplazar los ^M al final de cada línea:

:%s/^M$//g

Usar"C-v C-m"para escribir^M.

2. reemplazar todos los ^M’s que necesitan un salto de línea:

:%s/^M/n/g

Voila! Archivo limpio.

Mas info en

:help ffs

Tags: , ,

Comfortable editing with VIM

Tomado del blog de Tobias Schlitt

Next occurrence of a word

If you hit*in command mode and your cursor resides on a word, you are taken to the next occurrence of the word. This is quite nice, if you like to know, where a function is called again.

Find matching brace

VIM 7.0 luckily highlights matching parenthesis, if your cursor resides on a brace, but sometimes you need to quickly jump to that matching brace. You can achieve this by hitting the%sign in command mode.

Repeat the last change

It often occurs, that you need to perform 1 change several times, but not often enough to write a short script or to address the changes with a complex regex. In those cases you can perform the change once, move the cursor to the next place and hit the.(dot) char, in command mode.


Read more »

Tags: , ,