Author Archives: idcmardelplata

Programación pointfree en javascript

Javascript es realmente un lenguaje muy flexible. Tiene tanto características funcionales como de orientación a objetos y permite la programación en una gran cantidad de estilos diferentes.
En este post vamos a ver lo que se llama el estilo de programación PointFree y vamos a ir a trabes de algunos escenarios comunes para demostrar sus beneficios.

Un paso atrás.

En primer lugar permitanme mostrarles la forma imperativa estándar para extraer información de una matriz. El bucle for.

¿Qué hace esta función? Vamos a analizarla. Tengo un array de emails vacío. Luego recorro todos los usuarios y verifico si rol de un usuario es igual a “admin”, y si es así añadimos el correo electrónico del usuario al array para finalmente retornar dicho array. ¿bastante familiar no?.

Aunque acabo de describir el código de la función paso a paso, todavía no esta muy claro lo que hace. Una manera mucho mas clara de decir lo que haría seria así: devuelve todos los mensajes de correo electrónico de los usuarios con rol de administrador.

Vamos a reescribir esto de una manera un poco mas funcional, utilizando las funciones propias de Javascript como filter y map. (Estoy usando la sintaxis ECS6, tienes que amar estas funciones de flecha) xd.

El análisis de esta función es mucho mas fácil.
1. Se obtienen solamente los usuarios con el rol del admin.
2. luego se extraen solamente los mensajes de correo electrónico.

El primer punto fuerte de este estilo de programación es que el código de la función se acerca mucho mas a la descripción de lo que hace la función . Esto hace que sea mucho mas fácil entenderla y razonar sobre ella, y al ver una nueva pieza de código se comprende rápidamente lo que se supone que debe hacer dicha función sin la necesidad de entrar en detalle sobre como lo hace.

Los filtros y los mapas nos sirven para iterar sobre los elementos de un array, al igual que el bucle for, pero tienen propósitos específicos: regresan subconjuntos y transformaciones de elementos , respectivamente.
Por el contrario, cualquier cosa puede suceder dentro de un bucle for. Eso significa que cada vez que te encuentres con un código for se tendrá que investigar un poco mas para saber si lo que se desea obtener es un subconjunto o no, si se transformara un elemento , si se agregaran los valores , o cualquier combinación de estos resultados.

Cuando se utilizan filtros y mapas, uno tiene una comprensión mas rápida sobre la función, y se puede profundizar en la comprensión poco a poco a medida que lo necesite. Lo se getAdminEmails retorna un array, ya que tiene filter y map. En una segunda mirada uno ve que primero filtra a los usuarios y luego los transforma.
Ahora uno puede investigar solamente filter y entender que elementos van a ser transformados y comprender que sucede durante la transformación en si.

Componible

Algo que me parece muy interesante sobre este código en su versión funcional, es que uno pude entender fácilmente pieza por pieza lo que hace en las diferentes capas.  Voy a tratar de hacerlo aun mas claro ahora.

Vamos a comenzar por tratar de escribir el código lo mas cerca posible a lo que hace la función. Queremos transformar una lista filtrada, así que vamos a empezar por la composición de estas 2 piezas.

compose es una función que toma 2 funciones como argumento, y ejecuta una después de la otra, su definición mas simple es así:

Ahora vamos a ver las 2 funciones que van a estar compuestas.

getTheEmailsOf es una función que transforma una lista retornando la propiedad email.  “Transformar una lista” es lo que hace map  y obtener una propiedad de un objeto suena como una tarea muy común, así que vamos a implementar map desde un punto de vista un poco diferente y una función prop para obtener una propiedad de un objeto fácilmente.

Esto da lugar a:

onlyTheAdminRoleUsers es un filtro. La prueba para decidir que elementos serán retornados implica comparar si una propiedad es igual a algún valor.

Y la versión definitiva de la función:

Esto es lo que se llama programación PointFree o programación tacita.
Lo que mas sorprende de esta versión es que esta enteramente compuesta de otras funciones mas pequeñas genéricas y reutilizarles. Estas funciones no solamente le ayudaran con sus próximas funciones, sino que le ayudara a comprender mas rápido cualquier función con solo un vistazo.
Después de saber lo que hace prop, se hace mas fácil de entender prop(“algo”) que obj => obj.algo  ademas de que no es necesario entrar en el stress de tener que elegir un nombre para la variable temporal obj.

Nota: La mayoría de estas funciones mas pequeñas son genéricas y lo suficientemente útiles para utilizarlas en casi todos los proyectos.  Ramda es una librería que tiene exactamente eso: un montón de funciones muy pequeñas y genéricas.

Para ir terminando vamos a ver otra situación bastante común.

Este código lo podemos entender rápidamente debido a la familiaridad. Pero el flujo del código es por todo el lugar. Aquí lo que se hace es: Calcular el total de las promociones del primer producto del carrito de compras.

Mira el orden de esta ultima frase, y compara el orden del código anterior con la siguiente función:

Leer el código y entender lo que va a ocurrir es mucho mas sencillo! 🙂

Conclusión
PointFree programming tiene que ver con la modularización de funciones a trabes de la composición. El uso de funciones mas pequeñas, genéricas, bien definidas y bien probadas para construir las funciones que necesitamos. Dentro de compose o composeP, una función es llamada, luego la otra, y esto es lo que pasa. No importa si la función tiene 17 lineas o 3. Esto funciona siempre de la misma manera, y la complejidad del código no se incrementa.

Tampoco tenemos porque preocuparnos acerca de las variables temporales, lo que hace que sea mucho mas fácil de entender el código y mas difícil introducir errores. Ademas, es mas fácil de entender y poner a prueba las partes mas pequeñas del código, lo que hace que sea mas fiable.

Por supuesto que no es una bala de plata, y existen una gran cantidad de veces que uno termina escribiendo una función que no es totalmente pointfree. Me parece que su principal debilidad se produce cuando la función tiene mas de un parámetro (de ahí que usemos curring);  muy a menudo se llega a tener un código no pointfree. Pero, dicho esto, en mi experiencia personal es que la parte pointfree del código es mucho mas robusta y los errores son identificados mas fácilmente durante la fase de desarrollo. Los errores casi nunca se encuentran en código pointfree!!.

Secretos del texto en vim.

Objetos de texto en Vim (como el maestro yoda lo usa).

texto en vim

En este articulo voy a mostrarte como manejar el texto en vim mas fácilmente.

Una de las ventajas que vim nos pone a disposicion es el modo en que ve el contenido del archivo que estamos editando.
Si bien para nosotros “el texto es texto”, para vim no es tan asi.

Vim entiende y trata el texto no como una simple cadena de caracteres como la mayoria de los editores, sino que lo “ve” como objetos.
Esto nos provee de varias ventajas frente a otros editores de texto. ¿Porque? pues porque al saber de que tipo de texto se trata vim puede manejarlo de diferentes maneras.

Imaginate que en tu editor de textos tenes que moverte entre parrafos enteros solamente, ¿que tan facil te resulta hacer eso?. Si tienes que usar el mouse ya pierdes tiempo, y si tienes que pulsar varias teclas tambien… En otro caso ¡Seguro que estas usando vim! 🙂

En este articulo no pretendo poner la tipica lista de super comandos de vim con lo que haces un monton de cosas, sino enseñarte que todas esas combinaciones no tenes porque aprenderlas de memoria ya que (aunque no lo parezca) tienen un sentido y un significado que no es para nada dificil de aprender.

Lo primero que necesitamos aprender es ver como vim identifica el texto para que podamos movernos mas facilmente sobre el.

Ok ok, eso ya lo se geniecillo… ¿y que con eso?, pues que vim usa las siglas
de esas palabras como comandos… 😛

Osea que si deseas moverte entre palabras, lo unico que tenes que hacer es presionar en
modo comandos la letra w (de word), si deseas ir una palabra hacia atras
presiona b (de back ), si deseas ir al final de una palabra simplemente presiona
e (de end). Aja! ¿y que pasa con las sentencias? pues para las sentencias y
parrafos vim tambien usa las siglas (pero de otra manera).

Simplemente quedate con el concepto de que te podes mover mas facilmente usando ( para las
sentencias y { para los parrafos por ahora… 🙂

Y de que me sirve saber todo esto?. Ya lo vas a ver no te impacientes…

Resulta que vim tambien usa siglas para referirse a los comandos mas usados,
siguiendo con las tablitas estas serian:


borrar = delete en ingles
copiar = yank en ingles
cambiar = change en ingles
buscar = find en ingles
visual = visual ¿impensable verdad?

mmm ya estas captando el concepto verdad?

Siguiendo con el ejemplo…

d para borrar.

c para cambiar.

y para copiar.

f para buscar una letra en la linea.

v para seleccionar.

Existen mas ordenes que no las listo aca para no salirnos demasiado de tema,
pero que son de mucha utilidad conocer.

Si presionas alguno de las ordenes anteriores vas a notar que no pasa nada
(excepto en la de seleccionar “v” y en la de buscar una letra “f“).

Esto pasa porque estas ordenes esperan que pulsemos una tecla de movimiento las
cuales pueden ser las que vimos arriba (w b e s p).

Por ejemplo si quisieramos borrar una palabra tendriamos que pulsar dw o cw si
deseamos cambiarla…

Pero aun hay mas asique no te apresures joven padawan…

vim-baby.jpeg

Los objetos de texto en vim tienen 2 modos de trabajar.

Estos 2 ¿nuevos? operadores le dicen a vim el ambito donde queremos realizar la operacion.

inner significa interior

a tiene varios significados pero para el caso significa incluyendo.

Osea que si tenemos esta linea.

>”Una linea de texto”<

y tecleamos la orden da” dentro de la linea se eliminaria todo el texto (junto con las comillas).
En caso contrario si tecleamos di” se eliminaria solamente el texto dentro de
las comillas pero no las comillas, quedando asi:

>< Comando ( da” )

>””< Comando ( di” )

De esta manera podemos formar comandos y recordarlos muy facilmente como vemos:

Ok ok pero si eso es todo te mato ¡quiero mas!! 🙂

mas.jpeg

Estas ordenes pueden hacerse tambien de forma explicita, por ejemplo:

¿y si deseo borrar una etiqueta html o xml como hago?

simple, supongamos la siguiente etiqueta:

<article>Mi articulo

Si nos posicionamos en alguna parte de la declaracion del div y ejecutamos dit
vim se va a dar cuenta de que lo que queremos borrar es todo lo que esta dentro
de del div dejandolo asi:

<div id=”contenedor”></div>

Por el contrario, si nos posicionamos en alguna parte de la declaracion del
article y ejecutamos dit vim va a borrar todo el contenido del articulo
dejandolo asi:

<div id=”contenedor”><article></article></div> ¿genial no?

mmmm y solo puedo borrar texto en vim? bahh…

Por supuesto que no solamente podes borrar texto en vim ¿de que serviria si fuera solo eso?

Con los comandos que aprendimos recien podemos borrar facilmente objetos de
texto, ahora si remplazamos la orden de eliminar d por la c de change la cosa
tomaria todavia mas color ya que no necesitariamos estar presionando i en cada
momento para pasar al modo insercion, y adivina que.. ¡Todo lo que vimos para
borrar se aplica para cambiar!!

Si desearamos cambiar una sentencia seria:

etc… y como te imaginaras todo el resto es igual.. 🙂

mmm hasta ahora me venis convenciendo… ¿pero que mas puede hacer con el texto vim?

Bueno, las ordenes de movimiento son siempre las mismas como te habras dado cuenta, (espero sino…)

w = word para moverse entre palabras.

b = back para ir al comienzo de una palabra.

e = end para ir al final de una palabra.

f = find para ir a la posicion del caracter que presionemos

s = sentence para referirse a la sentencia completa.

( para moverse desde donde estamos al comienzo de la sentencia.

) para moverse desde donde estamos al final de la sentencia.

{ para moverse al comienzo del parrafo

} para moverse al final del parrafo.

Y que pasaria si usaramos estos comandos de movimiento para seleccionar el texto en vim?, ¿funcionaria? ¡pues claro!

viw y vaw seleccionan una palabra (incluyendo o no los espacios segun sea i o a )

vip y vap seleccionan un parrafo completo.

vis y vas seleccionan una sentencia completa.

vi( y va( seleccionan una sentencia a partir de la posicion actual hasta el comienzo.

vi) y va) seleccionan una sentencia a partir de la posicion actual hasta el final.

vi{ y va{ seleccionan un parrafo a partir de la posicion actual hasta el comienzo.

vi} y va} seleccionan un parrafo a partir de la posicion actual hasta el final.

En el modo de seleccion, existe un operador que sirve para decirle a vim hacia
adonde orientar el cursor de seleccion, este operador es la o y con pulsarla
simplemente, veremos como vim cambia la orientacion del cursor para facilitarnos
seleccionar texto (muy util). 🙂

Y como te imaginaras, para copiar es el mismo rollo que con las demas
operaciones, asique te lo dejo a tu investigacion… 🙂

texto en vim Con este articulo pretendo aclararte un poco las dudas acerca de los objetos de
texto en Vim y mostrarte la manera sencilla de recordarlos. Como sabras quedaron muchos comandos (no tan relevantes para el tema) en el tintero, asique te aconsejo investigarlos y tenerlos siempre a mano para
asi poder editar texto en vim de una manera mas eficiente y rapida, aca te dejo algunos enlaces de interes que te pueden interesar sobre le tema,

Un pequeño manual sobre vim echo por la gente de hackxcrack muy recomendado

Un articulo sobre algunos comandos de vim (tambien recomendable)

Un tutorial interactivo para aprender vim (muy muy bueno)

Una guia de como instalar plugins facilmente en vim

Un tutorial de EasyMotion (para moverse fácilmente por el texto)

 

espero que no te hayas aburrido mucho y que lo hayas disfrutado leyendo tanto como yo
haciendolo. ¡Vimvenido a la fuerza! 🙂

WordPress desde VIM.

Publicando en wordpress desde VIM fácilmente y sin complicaciones.

Hace unos días que inaugure este nuevo blog con la intención de ir publicando
todo lo que voy aprendiendo en mi día a día con el software libre y la
programación en general. Me decidí a usar wordpress por la cantidad de plugins
que tiene disponible y por ser bastante flexible (cosa que no logre encontrar en
blogger)

Ahora bien, como programador uno se acostumbra a trabajar con varios lenguajes
diferentes (C++, Python, Javascript, Asm y hasta vbs en una triste época de
antaño… ).

Todos estos lenguajes poseen sintaxis diferentes y formas de
trabajar diferentes ya que algunos como javascript son enfocados a la web
(aunque ahora esta en todos lados) y otros mas a entornos de escritorio o
hardware (como Asm que lo usaba para programar PIC en una época para mi dorada… 🙂 )

Para trabajar cómodamente con cada uno de estos lenguajes tuve que instalar unos
cuantos editores de código (cada uno enfocado a un lenguaje en particular) hasta
que un amigo me recomendó que aprenda a utilizar VIM. ¿ṕorque? fue lo primero
que le pregunte y la respuesta no se hizo esperar… “porque como programador
pasas demasiadas horas escribiendo código y lo que menos necesitas es tener que aprender a usar 4 o 5 editores distintos para lograr algo…”
.

aunque me pareció que estaba exagerando y no le preste mucha atención le dedique un tiempo a aprender VIM, y admito que la curva de aprendizaje no fue tan simple como con
otros editores (y hasta muchas veces lo mande a la mierda… ). Persevere y pude llegar a aprender a utilizarlo.

Me encanto poder usar C++ con algunas rutinas inline de asm y a la vez poder programar
también usando un toolkit como Qt (creo que era la 3.1 por aquel entonces…) todo desde un mismo sitio sin tener que andar enroscándome en boludeces de los IDES
(lo digo porque sufrí kdevelop en su momento…).

Ahora bien… ¿para que $%&/ me contas todo esto?, pues porque una vez mas VIM
fue la respuesta que necesitaba…

Al terminar de instalar y configurar wordpress, lo primero que hice fue ir
alegremente a “Todas las entradas/Añadir nueva” directamente con la intención de
comenzar a escribir un articulo y me tope con esta horrible escena:

captura.png

 

 

¿Que carajos es esto? ¿es una broma de mal gusto o que?

 

 

 

¿como pretenden los de wordpress que pueda editar mis artículos poniéndome al todopoderoso bloc de notas como editor…? Aja dije! hay un botón que de seguro va a desplegar un libreoffice de opciones para editar!, le doy clic y me encuentro con esto 🙁

 

captura2.png

 

 

 

Ok ok… me quede impresionado con lo que vi, ¿pegar desde word es mas
importante que la opción de cambiar el tamaño de la fuente?, ¿sera que poner un
par de botones mas consumiría demasiados recursos del navegador?…
instantáneamente puse a buscar un plugin que me permitiera cambiar ese
insulso editor por algo mas decente, y me encontré con TinyMCE Advanced

captura3.png

 

 

 

 

Con lo cual la cosa ya cambiaba un poco, ya podía agregarle un poco mas de opciones al editor por defecto de WordPress, pero aun seguía siendo un problema agregar fragmentos de código fuente sin necesidad de tocar el html del post.

Resignado decidí escribir algunos post usando este plugin y otro mas
que me permitía colorear un poco la sintaxis de los lenguajes que usaba WP-Syntax
(aunque todavía no publique nada que necesitara un resaltado de sintaxis
especial…).

Ahora bien… llegado a este punto recordé las palabras de mi amigo:
“porque como programador pasas demasiadas horas escribiendo código y
lo que menos necesitas es tener que aprender a usar 4 o 5 editores distintos para lograr algo…”.

Dije por dentro… naaa no creo que se pueda usar wordpress desde vim y sin dudar escribí en el
todopoderoso duckduckgo “vim wordpress !gh” y me quede como
culo en el agua (anonadado) con lo que encontré… ¡Si se puede!, y es mas, no
solamente se pueden escribir post usando VIM! sino que también se pueden
administrar varios blogs y escribir entradas o actualizarlas usando Markdown directamente, sin necesidad de complicarse la vida para nada. ¡Una vez mas VIM demostró ser la solución!.

El plugin al que me refiero se llama VimRepress
y nos permite gestionar fácilmente los artículos que deseemos,podemos editarlos
borrarlos crearlos publicarlos directamente o almacenarlos como borradores para
publicarlos luego.

Para instalarlo primero hay que tener instalado el paquete python-markdown

(en debían y derivados)

Una vez instalado este paquete iniciamos VIM y instalamos VimRepress (si usas
Vundle simplemente escribí

si no sabes como usar Vundle mira este este articulo done explico como usar Vundle para gestionar nuestros plugins. 🙂

Una vez instalado, necesitamos crear en nuestro $HOME un archivo llamado .vimpressrc con el siguiente contenido:

Una vez creado el archivo, lo rellenamos con los datos del blog:

Ahora bien, una vez echo esto para poder usar wordpress desde vim simplemente reiniciamos VIM disfrutamos… 🙂

Para crear un nuevo post escribimos

e inmediatamente vemos como se nos habré una
plantilla como esta para crear rápidamente un articulo.

Como te podrás imaginar, esta cabecera contiene los datos mas relevantes de tu post (como el nombre y las etiquetas entre otros). Basta con rellenar el campo “nombre” y los “Tags” ya que cuando publiquemos el post vim automáticamente
rellenara el campo StrID con el ID del post.

Una vez que completemos la cabecera estamos listos para escribir nuestro post, para ello vemos que el formato de edición es Markdown:

Si no sabes Markdown no te preocupes, es realmente muy sencillo de aprender y como veras agiliza muchísimo la edición de tus artículos.

Markdown es un lenguaje de marcado ligero (de ahí el nombre) que trata de equilibrar la legibilidad como hacer sencilla su publicación en diferentes formatos (ya sea html, pdf, etc…) su sintaxis es realmente sencilla y existen infinidad de cursos y guías en castellano donde podes aprenderlo en menos de 1 hora. 🙂

Aquí te dejo algunos enlaces para que lo aprendas rápidamente y sin
complicaciones:

Markdown: Enfocate en el texto

Markdown: Tutorial en español

Markdown: Tutorial interactivo

Una vez que terminamos de escribir nuestro post, escribimos en VIM el comando:

Para guardarlo como borrador o

Para publicarlo directamente 🙂

Si quisiéramos listar todos los post que tenemos en el blog debemos escribir:

y posicionarnos sobre el nombre de la entrada que deseamos editar, si presionamos (Enter) la abrimos y la podemos editar, pero si presionamos delete la borramos (asique ojo ahí)

O si quisiéramos ver todas las paginas escribimos:

Los mismos comandos se utilizan para las paginas (Enter para editar e delete para borrar).

¿Y si queremos ver como va quedando nuestro post?
Para eso esta el comando

¿y como hacemos con las imágenes?
La verdad es que esto fue una de las cosas que mas me gusto de este plugin 🙂
Para subir una imagen hay que usar el comando:

Este comando sube la imagen seleccionada directamente al almacén de medios de WordPress y inserta la imagen dentro del post 🙂

¿Y si quisiera trabajar con otro blog?
Con

vamos cambiando por los blogs que tenemos configurados en nuestro .vimpressrc 🙂

¿Algo mas?
¡Pues claro!, ¡El #$%&/ resatado de sintaxis! (Ese era el meollo de la cuestión no?)

Eso se logra simplemente escribiendo

Si escribimos

a secas interpreta el texto como un texto con un leve
resaltado, pero si escribimos

colorea el código como bash u el lenguaje que queramos…
tiene soporte para muchísimos lenguajes, solo es cuestión de ir
probando 🙂

Bueno, por ahora esto fue todo (aunque lo hice largo creo que esta medianamente completo ). Si sos tan amante de Vim como yo te aconsejo que aprendas a usar Markdown y VimRepress (de echo este post esta echo con esas herramientas) y disfrutes publicando desde nuestro editor favorito, ¡By Happy!! 🙂

Volando en Vim con EasyMotion

Una de las cosas que mas controversia genera entre los usuarios de Vim son los comandos de movimiento. Si bien algunos estamos acostumbrados a escribir cosas como

a otros les parece simplemente abominable, ya que  se entiende que para las personas que recién se están iniciando con Vim recordar estos comandos es algo aterrador (e incluso para muchos ya iniciados). Si bien estas combinaciones espantan a muchas personas, una vez que se sabe que hace cada cosa solamente es cuestión de combinarlas para moverse y armar comandos fácilmente.

Terminal - wp-mail.php + (~-blog-wordpress) - VIM_006

Vim (como siempre) trae en su arsenal de plugins uno muy particular llamado EasyMotion el cual nos permite navegar realmente rápido dentro del texto que estemos editando con solo pulsar algunas teclas y sin tener que recordar demasiados comandos (cosa que igualmente aconsejo)

Para ello el plugin asigna una letra en particular a cada palabra y basta con ir pulsando esa tecla para ir rápidamente a esa palabra sin mayores complicaciones como vemos en la imagen.

Instalar este plugin es realmente sencillo si utilizamos vundle (si no sabes como utilizar vundle mira este post).

Al instalarlo por defecto, EasyMotion usa la tecla por defecto de Vim ( la barra invertida \ ), para cambiar esto debemos editar nuestro fichero de configuración de Vim llamado ~/.vimrc
y agregar la siguiente linea:

Una vez guardado los cambios simplemente reiniciamos Vim y listo.

EasyMotion nos ofrece las siguientes opciones para navegar por el texto. (remplazar ,, por la tecla que hayamos configurado en el .vimrc), solamente voy a poner las que me parecen mas útiles, pero podes mirar aca para obtener el listado completo.

Como podemos ver, usar EasyMotion nos facilita enormemente la tarea a la hora de navegar por nuestro texto. Pero usarlo solamente para eso seria tristemente un desperdicio… 

EasyMotion es un plugin de movimiento con lo cual podemos usarlo con ordenes que esperan comandos de movimiento, por ejemplo podemos copiar texto si presionamos y,,w y seleccionamos la palabra deseada, o también borrar texto si presionamos d,,e y seleccionamos la palabra deseada o incluso seleccionar lo que deseamos simplemente presionando v,,e{letra}, las posibilidades como vemos son simplemente impresionantes!

Terminal - wp-login.php (~-blog-wordpress) - VIM_007EasyMotion es uno de los primeros plugins que suelo instalar cada vez que instalo Vim en alguna maquina, ya que hace que tareas comunes como seleccionar una linea o copiar un fragmento sea algo realmente sencillo, recomendado al 100%. 🙂

Gestion de plugins con Vundle!

Uno de las cosas que mas se criticaban de VIM, era que la instalación y la configuración de los plugins (extensiones) era bastante tediosa, tanto que la mayoría de los usuarios ni siquiera intentaba hacerlo por temor a caer en una crisis de nervios…
Esto es porque VIM usa por defecto un sistema de almacenamiento de plugins centralizado el cual  tiene esta estructura:

Pero con el pasar de los años nació Pathogen, un gestor de plugins bastante sencillo que nos permitía (y permite) que la instalación y configuración de estas extensiones sea bastante sencilla, creando una nueva manera de organizar los plugins de VIM en paquetes los cuales nos permite distribuir estos plugins mas fácilmente y gestionarlos de forma mas rápida, organizándolos de la siguiente manera:

.vim/bundle/
                              html/
                                         build/
                                                    html.vim
                                          syntax/
                                                  html.vim
                                          etc…/
                                                  html.vim

Como vemos, todo el código del plugin, reside dentro de una carpeta (en este caso llamada html), esto hace que las cosas mejoren un poco ya que podemos tomar la carpeta completa y copiarla a otra instalación de VIM y debería de funcionar sin problemas (siempre tocando .vimrc claro esta.) 🙂

Pathogen cumple bastante bien su función pero todavía hace que la gestión de plugins no sea del todo amigable… :'(

¿solución? ¡Vundle!

Vundle hace que instalar y configurar plugins sea un juego de niños como
veremos..

¿Que nos permite hacer?

Pues podemos hacer un seguimiento y configurar los scripts directamente dentro de nuestro .vimrc, nos permite actualizar los plugins directamente desde sus repositorios, podemos buscar todos los plugins que necesitemos directamente desde vim-scripts.org e instalarlos muy fácilmente, limpiar aquellos plugins que no usemos, etc…

¡Muy bien, me convenciste! ¿como lo instalo?

Lo primero es descargarlo desde el repositorio de esta forma:

git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

Una vez descargado necesitamos hacer algunos ajustes en nuestro .vimrc local

set nocompatible “esto hace que no se cargue el modo de compatibilidad con vi.
filetype off          “Requerido si o si 🙂
set rtp+=~/.vim/vundle.git/
call vundle#rc()

“Gestión sencilla de paquetes con Vundle!
Bundle ‘gmarik/vundle’

“Instala desde los repos originales en github.
estos son algunos de ejemplo aunque los recomiendo.
Bundle ‘tpope/vim-fugitive’
Bundle ‘Lokaltog/vim-easymotion’
Bundle ‘FuzzyFinder’

“Etc….
“Y todos los los otros plugins que deseemos gestionar.

“También podemos instalar plugins desde otros repositorios que no sean github
“Bundle ‘git://git.wincent.com/command-t.git’
“O también desde una ubicación
“Bundle ‘file:///Users/gmarik/path/to/plugin’

filetype plugin indent on     “Es requerido para que funcione.

 

El segundo paso es instalar los plugins (bundles) configurados, para ello guardamos la configuración de nuestro .vimrc y entramos a VIM y ejecutamos el comando :BundleInstall

Este comando se encarga de instalar todos los bundles que cargamos en el archivo .vimrc.

Ahora bien, para eso prefiero seguir usando Pathogen estarás diciendo… pues la verdad es que Vundle tiene un par de trucos que de seguro te van a gustar…

Para ver la lista de Bundles disponibles, solamente tenes que escribir en VIM
:BundleList este comando te va a listar todos los bundles disponibles.

Si deseas instalar algún bundle, solamente tenes que escribir el comando :Bundles
Este comando te va a listar todos los plugins existentes en vim-scripts.org/vim/scripts.html
Si necesitas buscar alguno en especial (cosa que pasa habitualmente) solamente pulsa “s” (sin comillas) y escribí el nombre del bundle que necesitas.
Una vez encontrado lo que buscas, simplemente pulsando “i” lo instalas.

Si te pasaste instalando plugins y queres borrar los que no usas, simplemente pulsando “c” podes elegir que plugin borrar.

Si ya tenes tus bundles instalados pero queres actualizarlos, simplemente con el comando :BundleUpdate podes descargar la ultima versión del plugin que usas ¡y conservando la configuración que tenias!.

Como habrás notado Vundle tiene muchas ventajas a la hora de gestionar nuestros plugins y pocas desventajas  (por ahora no le encontré ninguna), asique si sos VIMero y no queres complicarte a la hora de instalar plugins, Vundle es tu mejor aliado. 🙂