Spacemacs: el oh-my-zsh para Emacs

Hace poco tiempo decidí dejar de intentar vivir de la luthería en el país de la ingeniería comercial, en favor de volver a la administración de sistemas y desarrollo web. Ya volveré a la construcción de instrumentos musicales, pero este no es el momento todavía.

Fue una decisión dura, pero sensata; morirse de hambre haciendo algo hermoso deja de ser hermoso, y bien se puede volver hermoso dedicarse a otra cosa, pero bien hecha. Es menester, ante todo, no perder la capacidad de reinventarse.

Como en todo oficio, para ejecutar bien una tarea se requieren herramientas que te la faciliten, y el desarrollo de software no es excepción.

Para construir violines y guitarras se necesitan sierras, formones, gubias, rasquetas, prensas y adhesivos; para desarrollo de software o web necesitas un sistema operativo, una terminal o línea de comandos, y un editor de código que te facilite la tarea de escribirlo.

Para recomenzar desde la ruina, logré conseguir una ThinkPad de 3ra mano para trabajar en Linux, a CLP$ 85000 (casi US$ 140); i5 de 2.4Ghz, 4Gb de RAM (bien aprovechados gracias a zram), video dual video dual Intel + NVidia NVS3100M (que pueden interoperar gracias a DRI_PRIME en Linux).
Instalé oh-my-zsh, un conjunto de scripts para agilizar el trabajo en la terminal / línea de comandos [zsh], y listo, no?

oh-my-zsh
oh-my-zsh; permite resaltado de contexto / sintaxis, completación de expresiones con TAB, entre muchas otras funcionalidades extensibles.

Casi.

Al momento de elegir editor de código, había 2 opciones mainstream: Sublime Text (descarga gratuita pero de licencia pagada), y Atom (open source, gratuita).
Bueno, 3 opciones mainstream si consideramos Microsoft Visual Studio Code (gratuito, modular, intuitivo.)

Si bien había utilizado Sublime anteriormente, varios plugins que utilicé en ese entonces ya no eran mantenidos por sus comunidades originales, por lo que había algunas inconsistencias funcionales que me tomaría más tiempo enmendar.

Probé Atom nuevamente, 3 años después de las primeras versiones beta, y se acercaba a lo que busco en un editor.
Pero cargando algunos plugins me estaba consumiendo 1Gb de RAM, de los 4Gb de los que tiene instalada la máquina; considerando que Chrome, con las 8 a 10 pestañas que suelo tener abiertas, se apropia de casi 2Gb, el footprint de Atom es todavía demasiado alto para la funcionalidad que requiero (y lo que mi hardware permite).

Visual Studio Code anduvo muy bonita, pero también requiere bastante RAM que no puedo facilitarle.

Hasta que un ex-colega, usuario avanzado de Emacs (un editor de código / IDE / «sistema operativo» de fines de los ’70s), me recomendó, obviamente, utilizar Emacs.

Emacs
«Emacs. Much flexible, so text, very foo.»

Pero bajo la forma de Spacemacs.

Qué es Spacemacs?
En términos simples, Spacemacs es oh-my-zsh para Emacs: un conjunto de configuraciones modular y flexible.

Spacemacs welcome screen
«A wild Spacemacs appears!»

En la cultura geek es conocida la guerra santa de editores entre usuarios de Vi(m) y Emacs, y lo que busca Spacemacs es brindarle la flexibilidad a Emacs para utilizar comandos de Vi(m) y modularizar la instalación de funcionalidades (como Visual Studio Code).

Vamos a explorar muchos detalles sobre Spacemacs en futuras publicaciones; hoy por hoy, quisiera mostrarles cómo instalarlo y comenzar a utilizar Emacs bajo su efecto.

Primero nos vamos a enfocar en Emacs, que es un editor de código / IDE / «sistema operativo» de fines de los ’70s, y como tal tiene diferencias conceptuales con las interfaces de usuario contemporáneas: las cosas se llaman distinto y algunos comandos mediante combinaciones de teclas, si bien son mnemotécnicamente eficaces, no son los comandos a los que crecimos acostumbrados (sí, adiós Ctrl-C & Ctrl-V por ahora), e.g. un buffer es una «ventana» para escribir texto, sin que sea todavía un archivo, la tecla Alt se llamaba Meta, etc.
Y también porque como recién lo estoy descubriendo, lo estoy usando todavía en modo Emacs (holy mode, ya les comentaré qué es eso). Soy un tipo práctico. Bueno, casi.

Como regla general, en holy mode las funciones de Emacs se ejecutan con M-x (Meta-x, o sea, Alt-x), y en evil mode se reemplaza M-x por SPC (barra espaciadora).
Se dieron cuenta ahora? Spacemacs es por SPC / M-x.

Pero vamos al grano. Primero debemos instalar Emacs:


Ubuntu y derivados:
– Vía APT:
sudo apt install emacs

– Via snap:
sudo snap install emacs --stable --classic

Fedora / Red Hat:
sudo yum install emacs

Suse:
sudo zypper install emacs

Arch: qué les voy a explicar, si ya saben.

Gentoo: (ver Arch)

Lo siguiente es clonar el repositorio de git para Spacemacs:
git clone -b develop https://github.com/syl20bnr/spacemacs ~/.emacs.d

Después abrimos Emacs, que va a tomar los archivos dentro de su tradicional directorio de configuración ~/.emacs.d y la configuración de ~/.spacemacs como propia, y seleccionar el estilo de edición (comandos de teclado).

Tenemos 2 opciones: holy mode (estilo Emacs puro), o evil mode (híbrido Emacs + Vim); Vim mode se puede elegir también, pero en forma manual post-instalación

spacemacs - holy or evil mode
Evil? Holy? Qué brujería es esta?

Personalmente elegí holy mode, ya que nunca usé Emacs, y era una forma de aprender a usarlo, sólo que más flexible en implementación de paquetes de funcionalidades gracias a Spacemacs.

La gracia de Spacemacs es que organiza estas funcionalidades en capas, o layers, que se definen en el archivo de configuración ~/.spacemacs .

De ahora en adelante, todo cuanto se indique aquí como M-x en holy mode, se activa con SPC  (barra espaciadora) si eligieron el evil mode.

Donde se indique M se referirá a la tecla Alt . Todo aquello que se indique como S se referirá a la tecla Shift, s (minúscula) se referirá a la tecla Super (tecla Windows en PC, Command en Mac), C a la tecla Control, and so on and so on and so on.

Resumen: M = Alt | C = Control | S = Shift | s = Windows / Command

La configuración se realiza editando el archivo ~/.spacemacs. Aquí añadimos o quitamos opciones y/o paquetes a instalar. Dentro de Spacemacs se accede a la edición de este archivo presionando M-m f e d. Para grabar los cambios, C-x C-s. Para aplicar los cambios guardados, M-m f e R.

Se van dando cuenta, no?
Emacs no utiliza un menú en una interfaz gráfica de usuario (salvo en la versión compatible con GTK / Gnome / KDE), porque existe desde antes que se popularizara la interfaz gráfica de usuario. Pero no se asusten por no tener menús de opciones, que dentro de poco pasaremos a la referencia rápida de comandos para operaciones cotidianas, y el flujo de trabajo comienza a volverse rápido y productivo apenas comenzamos a internalizar estas convenciones de combinaciones de teclas (de verdad, no es tan difícil como parece).

.spacemacs - configuration layers & additional packages
Configuración de Spacemacs en el archivo .spacemacs – configuration-layers y additional-packages. Acá se activan / desactivan grupos de paquetes a instalar.

En dotspacemacs-configuration-layers (arriba a la izquierda) se agregan los grupos de funcionalidades layers«). Más abajo, en dotspacemacs-additional-packages, se pueden agregar paquetes individuales personalizados.

Cómo se instalan estos paquetes, se preguntarán?

Bueno, Emacs se conecta a repositorios remotos (tal como lo hace Debian, Ubuntu, Fedora, Arch, etc.), desde donde descarga e instala los paquetes solicitados en ~/.spacemacs para cada una de las layers.

(Por eso lo de “Emacs, más que un editor, un sistema operativo”.)

Al presionar M-m f e R, se activa la configuración guardada en el archivo ~/.spacemacs.

Ahora, lo importante: los comandos de uso cotidiano más frecuentes.

AYUDA

En cualquier contexto: C-h C-h

ARCHIVOS

Abrir / crear: C-x C-f  («x» de «eXecute», «f» de «file»)

Guardar archivo actual: C-x C-s («s» de «save»)

Guardar archivo actual como: C-x C-w («w» de «write»)

Guardar *todos* los archivos abiertos: C-x s (la «s» sola)

EDICIÓN

Seleccionar: C-SPC (desplazar cursor hacia los costados para seleccionar texto)

Cortar: C-w o S-supr (en Mac OS: Command-x)

Copiar: M-w o C-insert (en Mac OS: Command-c)

Pegar: C-y o S-insert (en Mac OS: Command-v)

Deshacer: C-_

Rehacer: M-_

Buscar: C-s («s» de «search»)

Continuar búsqueda: C-s (hacia adelante) o C-r (hacia atrás)

Buscar y Reemplazar: M-% (ingresar expresión a buscar, y luego a reemplazar)

OPERACIONES DE BUFFER

Cambiar de buffer: C-x b («b» de «buffer», y seleccionar buffer en la lista)

Rotar al buffer siguiente: C-x ⇒

Rotar al buffer previo: C-x ⇐

Cerrar / destruir buffer: C-x k («k» de «kill», y seleccionar buffer en la lista)

OPERACIONES DE VENTANA

Cambiar foco de ventana: C-x o (letra «)

Cerrar ventana activa: C-x 0 (cero)

Maximizar ventana activa: C-x 1

Dividir pantalla horizontalmente en 2 ventanas: C-x 2

Dividir pantalla verticalmente en 2 ventanas: C-x 3 (práctico para hacer diff)

Para salir o cancelar cualquier opción o diálogo: C-g

Para guardar todo y salir: C-x C-c

Espero que esta pequeña y resumida guía les haya sido útil para iniciarse en Emacs + Spacemacs.
Saben cuánta RAM utiliza con los paquetes adicionales instalados, para asemejar el flujo de trabajo web al que tenía en Atom o Sublime?

My Spacemacs workflow
Mi configuración, con tema solarized-light para el día, más mode-icons y minimap.

Debajo de los 256Mb.
Sí: Mb. Con 3 sets de archivos HTML y 4 sets de CSS, smem me muestra esa cantidad de RAM en uso.
Me sobra suficiente RAM como para abrir Spotify mientras trabajo (mi laptop tiene sólo 4Gb de RAM).

Y además se puede editar archivos remotamente via SSH usando TRAMP, pero eso queda pendiente para otra publicación.

Ahora, la pregunta de fondo que seguramente se están haciendo si llegaron al final de la publicación: por qué aprender a usar Emacs hoy en día, año 2017, Era de la Nanotecnología?

  • Porque utiliza poca memoria (menos de 256 Mb de RAM)
  • Ergo, se puede reutilizar hardware antiguo, en desuso, o de baja potencia.
  • La comunidad de desarrollo ha sido siempre activa, y los paquetes de software se actualizan periódicamente
  • Por su extensibilidad se convierte en algo más que un mero editor, pudiendo abrir una terminal, realizar una conexión ssh, o manejar la actividad en git desde el mismo Emacs (gracias a magit, una herramienta imperdible).
  • Activando el Org-mode, hasta se puede ir organizando calendario, agenda, hasta documentación del mismo proceso creativo o de programación.
  • Porque hasta se puede jugar Tetris dentro de Emacs (M-x tetris).
  • Si es por la falacia de apelación a la autoridad, entonces porque lo usa gente talentosa en el área.

Estas fueron mis razones para intentarlo con Emacs + Spacemacs.

En otra publicación les contaré mi exploración del evil mode, para usar Emacs con los comandos de teclado de Vi(m).

Nos leemos pronto.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s