Editores (Vim)

Escribir palabras en español y escribir código son actividades muy diferentes. Cuando programas, gastas más tiempo cambiando de archivos, leyendo, navegando y editando código en vez de escribir largas secuencias de texto. Tiene sentido que existan diferentes tipos de programas para escribir palabras en español y código (e.g. Microsoft Word comparado con Visual Studio Code).

Como programadores, gastamos la mayoría del tiempo editando nuestro código, por lo que es valioso invertir tiempo en dominar un editor que se ajuste a tus necesidades. Acá esta la forma de cómo aprender un nuevo editor:

Si sigues el método de arriba al pie de la letra, comprometido totalmente a usar el nuevo programa cada vez que tu proposito sea editar un texto, la línea de tiempo para aprender el sofisticado editor de texto será algo como lo siguiente: en una o dos horas, aprenderas lo básico de las funciones de edición como abrir y editar archivos, guardar/salir, y navegar por los buffers. Una vez que lleves 20 horas de práctica, deberías ser igual de rápido como eras con tu antiguo editor. Luego de esto, comienzan los beneficios: tendrás suficiente conocimiento y memoria muscular de tal manera que al usar el nuevo editor ahorrarás tiempo. Los editores de texto modernos son herramientas sofisticadas y poderosas, por lo que el aprendizaje nunca termina: y te volveras incluso más rápido a medida que aprendas más.

¿Qué editor aprender?

Los programadores tienen fuertes opiniones acerca de sus editores de texto.

¿Qué editores son populares hoy? Echa un vistazo a esta encuesta de Stack Overflow (puede haber sesgos debido a que los usuarios de Stack Overflow no necesariamente son una muestra representativa de todos los programadores). Visual Studio Code es el editor más popular y Vim es el editor más popular basado en la consola (línea de comandos).

Vim

Todos los instructores de esta clase usan Vim como editor. Vim tiene una gran historia; fue creado a partir del editor Vi (1976) y aún hasta el día de hoy sigue siendo desarrollado. Vim tiene algunas ideas realmente interesantes detras de él, y por esta razón, muchas herramientas soportan un modo de emular Vim (por ejemplo, 1.4 millones de personas tienen instalado el modo de emulación de Vim para VS code). Es probable que valga la pena aprender Vim incluso si decides finalmente cambiarte a otro editor de texto.

No es posible enseñar todas las funcionalidades de Vim en 50 mínutos, por lo que nos enfocaremos en explicar la filosofía de Vim, enseñarte lo básico, mostrarte algunas de las funcionalidades más avanzadas y darte los recursos necesarios para que domines la herramienta.

La filosofía de Vim

Cuando programas gastas la mayor parte de tu tiempo leyendo, o editando, y no escribiendo. Por esta razón, Vim es un editor modal: tiene diferentes modos para insertar texto y manipular texto. Vim es programable (con Vimscript y otros lenguajes como python) y la interfaz de Vim en sí es un lenguage de programación: teclas designadas (con nombres mnemónicos) que son comandos, y con estos comandos se pueden crear composiciones. Vim evita el uso del mouse porque es muy lento, incluso evita el uso de las flechas del teclado porque requieren de mucho movimiento.

El resultado final de esto es un editor que puede igualar la velocidad a la que piensas.

Modos de edición

El diseño de Vim esta basado en la idea de que la mayor parte del tiempo de un programador se utiliza leyendo, navengado, realizando pequeñas ediciones, contrario a escribir texto de forma regular, en los que se escriben grandes secuencias de texto. Por esta razón, Vim tiene multiples modos para operar:

Las teclas tienen un significado distinto según el modo en el cuál se esta operando. Por ejemplo, la letra x en el modo Inserción solo va a insertar el carácter ‘x’, pero en modo Normal va a borrar el carácter que se encuentra debajo del cursor, y en modo Visual se borrará todo lo que se encuentra seleccionado.

En la configuración por defecto, Vim te muestra el modo actual abajo a la izquierda. El modo por defecto es el modo Normal. La mayoría de tu tiempo estarás entre los modos Normal e Inserción.

Desde cualquier modo al apretar <ESC> (tecla escape) regresas al modo Normal. Desde el modo Normal te puedes cambiar al modo Inserción con la tecla i. Para ir al modo Remplazo debes utilizar la tecla R, al modo Visual con v, al modo Visual Línea con V, al modo Visual Bloque con <C-v> (Ctrl-V, a veces como ^V), y finalmente al modo Comando con :.

Utilizaras un monton la tecla <ESC> cuando estes usando Vim: considera reasignar la tecla bloq mayús a escape (instrucciones para macOS).

Básico

Insertar texto

Desde el modo Normal, presiona la tecla i para entrar al modo Inserción. Ahora Vim se comporta como cualquier otro editor de texto hasta que presiones la tecla <ESC> para regresar al modo Normal. Esto, con lo básico explicado anteriormente, es todo lo que necesitar para comenzar a editar archivos usando Vim (aunque no particularmente eficiente, si estás todo el tiempo editando desde el modo Insertar).

Buffers, pestañas, y ventanas

Vim mantiene un conjunto de archivos abiertos llamados buffers. Una sesión de Vim tiene un número de pestañas, de las cuáles cada una tiene un número de ventanas (paneles separados). Cada ventana muestra un único buffer. A diferencia de otros programas con los que puedes estar familiarizado, como los exploradores web, no hay una correspondencia 1-a-1 entre buffers y ventanas; Las ventanas son simplemente vistas. Un buffer puede estar abierto en múltiples ventanas, incluso dentro de la misma pestaña. Esto puede ser útil para ver diferentes partes de un mismo archivo.

Por defecto, Vim se inicia con una única pestaña abierta y esta contiene una única ventana.

Modo comando (o línea de comandos)

Se ingresa al modo Comando tipeando : en modo Normal. El cursor se posicionará en la línea de comandos que se encuentra en la parte inferior de la pantalla cuando presiones :. Este modo tiene muchas funcionalidades, incluyendo las de abrir, guardar y cerrar archivos, además de salir de Vim.

I've been using Vim for about 2 years now, mostly because I can't figure out how to exit it.

— I Am Devloper (@iamdevloper) February 17, 2014

La interfaz de Vim es un lenguaje de programación

La idea más importante en Vim es que su interfaz de comando es un lenguaje de programación en sí. Las teclas (con nombres mnemónicos) son comandos, y con estos se puede componer. Lo que permite moverse y editar de manera eficiente, especialmente cuando los comandos son asimilados por la memoria muscular.

Movimiento

Deberías pasar la mayor parte de tu tiempo en modo Normal, usando comandos de movimiento para navegar en el buffer. Los movimientos en Vim son llamados “sustantivos” porque hacen referencia a fragmentos del texto.

Selección

Modo visual (visualización):

Se pueden usar las teclas de movimiento para realizar selección.

Edición

Todo lo que solías hacer con el mouse, lo puedes hacer con el teclado usando los comandos de edición y a través de los comandos de movimiento. Aquí es donde la interfaz de Vim comienza a parecerse a un lenguaje de programación. Los comandos de edición de Vim también se conocen como “verbos” porque actuan sobre “sustantivos”.

Conteo

Puedes combinar sustantivos y verbos con un conteo, esto hará que la acción se realice el número de veces especificado.

Modificadores

Los modificadores se pueden utilizar para cambiar el significado de un sustantivo. Algunos modificares son i, que significa “interior” o “dentro”, y a que significa “alrededor”.

Demo

Aquí una implementación incorrecta del juego infantil fizz buzz:

def fizz_buzz(limit):
    for i in range(limit):
        if i % 3 == 0:
            print('fizz')
        if i % 5 == 0:
            print('fizz')
        if i % 3 and i % 5:
            print(i)

def main():
    fizz_buzz(10)

Arreglaremos los siguientes problemas:

Ve el video de la clase en el mínuto exacto de la demostración. Compara como los cambios de arriba se aplican usando Vim respecto a cómo aplicarías las mismas ediciones usando algún otro programa. Nota que tan pocos tipeos de teclas requiere Vim, permitiendote editar a la velocidad que piensas.

Personalizando Vim

Vim es personalizable a través de un archivo de configuración de texto-plano en ~/.vimrc (que contiene comandos Vimscript). Probablemente existen un monton de configuraciones básicas que quieras activar.

Nosotros proporcionamos una configuración básica bien documentada que puedes usar como punto de partida. Recomendamos usarla porque arregla alguno de los comportamientos por defectos raros de Vim. Descarga nuestra configuración aquí y guardala en ~/.vimrc.

Vim es altamente personificable y vale la pena gastar tiempo explorando las opciones que se pueden modificar. Puedes dar un vistazo a los dotfiles de personas en GitHub para usarlas como inspiración, por ejemplo, las configuraciones de Vim de los instructores (Anish, Jon (usa neovim), Jose). Existen también muchas entradas de blog sobre estos temas. Intenta no copiar y pegar configuraciones completas de otras personas, sino que leelas y entiéndelas, y toma lo que te sirva.

Extendiendo Vim

Existen cientos de complementos para expandir las funcionalidades de Vim. Contrario al desactualizado consejo que puedes encontrar en internet, no es necesario utilizar un gestor de complementos para Vim (desde Vim 8.0). En vez de eso, puedes utilizar el sistema de gestión de paquetes incorporado en el sistema. Simplemente debes crear el directorio ~/.vim/pack/vendor/start/ y poner los complementos ahí (e.g. vía git clone).

Aquí algunos de nuestros complementos favoritos:

Tratamos de evitar dar una lista abrumadoramente larga de complementos. Puedes revisar en los dotfiles de los instructores (Anish, Jon, Jose) para ver que otros complementos usamos. Revisar el sitio Vim Awesome para más complementos geniales de Vim. Adicionalmente existen cientos de entradas de blog sobre estos temas: solo tienes que buscar por “best Vim plugins” (en inglés se máximiza el contenido de la búsqueda).

Modo Vim en otros programas

Muchas herramientas soportan emular Vim. La calidad varía de buena a excelente; Dependiendo de la herramienta, esta puede no soportar las caracteristicas más elaboradas de Vim, pero la mayoría cubre lo básico bastante bien.

Consola (Shell)

Si eres usuario de Bash, usa set -o vi. Si usas Zsh, bindkey -v. Para Fish, fish_vi_key_bindings. Adicionalmente, no importa cual consola ocupes, puedes usar export EDITOR=vim. Esta es la variable ambiente utilizada para decirle a la consola cual editor debe abrir cuando un programa requiera uno. Por ejemplo, git utilizará Vim como editor para los mensajes de los commits.

Readline

Muchos programas usan la librería GNU Readline para su interfaz de línea de comandos. Readline también soporta emular Vim (básica), la cual se puede activar agregando la siguiente línea al archivo ~/.inputrc:

set editing-mode vi

Esta configuración permite que, por ejemplo, el REPL de Python soporte las combinaciones de teclas de Vim.

Otros

Existen extensiones para los exploradores web para usar las combinaciones de teclas de Vim - algunos de los más populares son Vimium para Google Chrome y Tridactyl para Firefox. Incluso puedes usar las combinaciones de teclas de Vim con Jupyter notebooks.

Vim avanzado

Aquí algunos ejemplos para demostrar el poder del editor. No podemos enseñarte todo este tipo de cosas, pero las aprenderás a medida que avances. Una buena heurística es: siempre que estés usando el editor y pienses “debe existir una mejor forma de hacerlo”, probablemente exista: búscala en internet.

Buscar y remplazar

:s (sustituir) comando (documentación).

Multiples Ventanas

Macros

Recursos

Ejercicios

  1. Completar vimtutor. Nota: se ve mejor si la ventana del terminal esta en 80x24 (80 columnas por 24 líneas).
  2. Descargar nuestro vimrc básico y guárdalo en ~/.vimrc. Leer a través del archivo documentado (usando Vim!), y observa como Vim se ve y comporta un poco diferente con la nueva configuración.
  3. Instalar y configurar el complemento: ctrlp.vim.
    1. Crear el directorio para el complemento con mkdir -p ~/.vim/pack/vendor/start
    2. Descargar el complemento: cd ~/.vim/pack/vendor/start; git clone https://github.com/ctrlpvim/ctrlp.vim
    3. Leer la documentación del complemento. Intenta usar CtrlP para localizar un archivo navegando en el directorio de un proyecto, abriendo Vim, y usando el modo comando para comenzar :CtrlP.
    4. Personaliza tu Vim modificando el archivo de configuración ~/.vimrc para que el complemento CtrlP se abrá al teclear Ctrl-P.
  4. Para que practiques con Vim, rehace la Demo de la clase en tu propio equipo.
  5. Usa Vim para todas tus ediciones de texto el mes siguiente. Siempre que algo parezca ineficiente, o cuando pienses “debe existir una mejor forma de hacerlo”, intenta Googlear, probablemente exista. Si te quedas entrampado, envíanos un correo.
  6. Configurar tus otras herramientas para usar las teclas de Vim (ver instrucciones arriba).
  7. Personaliza aún más tu archivo ~/.vimrc e instala complementos adicionales.
  8. (Avanzado) Convierte XML a JSON (archivo de ejemplo) usando macros de Vim. Intenta hacerlo por tu cuenta, pero puedes mirar la sección macros más arriba si te quedas entrampado.

Editar esta página.

Licensed under CC BY-NC-SA.