07. Vim: listas III

Publicado por

En la entrada anterior vimos cómo se manipulan listas a través de expresiones y funciones. En esta ocasión y para cerrar este tema te platicaré de un par de operaciones más: desempacar e iterar sobre listas.

Desempacar listas

Al igual que en otros lenguajes, esta operación consiste en extraer los elementos de una lista, guardándolos en variables individuales.

:let par_de_valores = ['uno', 'dos']
:let [valor1, valor2] = par_de_valores
:echo valor1
uno
:echo valor2
dos

Esto es especialmente útil sobre todo cuando queremos descartar valores que no nos interesan.

Como ejemplo veamos la función getcurpos(), la cual nos devuelve la ubicación actual del cursor expresada como una lista con cinco elementos.

:let [buffer, linea, columna, offset, curswant] = getcurpos()

De estos elementos el segundo y el tercero corresponden a la línea y columna donde se encuentra actualmente el cursor. Suponiendo que solo nos interesan estos valores, la forma más sencilla de descartar el resto es enviándolos a una variable «desechable», en esos casos utilizo el identificador guión bajo.

:let [_, linea, columna, _, _] = getcurpos()

Si observas, al final de la lista, tenemos más de un elemento que no nos interesa, por lo que podemos ignorarlos de una vez utilizando ; justo después de columna:

:let [_, linea, columna; _] = getcurpos()

Al final, tendremos la información que nos interesa en las variables que queremos.

Iterando listas

Las cosas se siguen poniendo interesantes al iterar sobre listas, lo cual es muy sencillo. Esta es la sintaxis para recorrer cada elemento:

:for elemento in lista
: call Función(elemento)
:endfor

Cada uno de los elementos en la lista, puede ser de cualquiera de los tipos soportados, incluso listas:

:for [x, y] in [[1, 3], [4, 9], [2, 0]]
: call F(x, y)
:endfor

¡Y eso es todo! Ya puedes considerarte experto(a) en el manejo de las listas en Vimscript, espero que esta estructura de datos te sirva para explotar las capacidades de Vim a través de tus propios plugins. Nos vemos en la siguiente nota ¡Hasta entonces!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *