Spacemacs: el oh-my-zsh para Emacs

Hace poco tiempo decidí dejar de intentar vivir de la luthería en el país de los ingenieros comerciales, 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 Intel + NVidia NVS3100M, usando sólo el último, junto al driver nvidia-340.
Instalé oh-my-zsh, un conjunto de scripts para agilizar el trabajo en la terminal / línea de comandos, 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 (gratuita, open source; sí, open source de Microsoft. Sí, es cierto.)

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 acerca 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.

Spacemacs welcome screen
“A wild Spacemacs appears!”

En la cultura geek es conocida la guerra santa de editores entre usuarios de Vi y Emacs, y lo que busca Spacemacs es brindarle la flexibilidad a Emacs para utilizar comandos de Vi.

Eso lo vamos a explorar en otra publicación; hoy por hoy, quisiera mostrarles cómo instalarlo y comenzar a utilizarlo.

Por qué saltarme la exploración de la característica fundamental, se preguntarán?
Porque 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: sudo apt-get install emacs
Fedora / Red Hat: sudo yum install emacs
Suse: sudo zypper install emacs
Arch: qué les voy a explicar.
Gentoo: (ver Arch)

Lo siguiente es clonar el repositorio de git para Spacemacs:
git clone 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.
Tenemos 2 opciones: holy mode (estilo Emacs puro), y evil mode (híbrido Emacs + Vi).
Personalmente elegí holy mode, ya que nunca usé Emacs, y era una forma de aprender a usarlo, sólo que más agradable y flexible gracias a Spacemacs.

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

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

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 Alt-m  f  e  d. Para grabar los cambios, Ctrl-x  Ctrl-s. Para aplicar los cambios guardados, Alt-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 GTK / Gnome), porque existe desde antes que se popularizara la interfaz gráfica de usuario. Pero no se asusten por no tener menúes 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).

.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 en la imagen) se agregan los grupos de funcionalidades. Más abajo, en dotspacemacs-additional-packages, se pueden agregar paquetes individuales personalizados. Yo añadí sublimity (para smooth scrolling), minimap (para minimapa de código estilo Sublime, visible a la derecha), y rainbow-mode (similar a pigments para Atom, muestra en el código los colores hexadecimales).

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 seleccionados. Por eso lo de “Emacs, más que un editor, es un sistema operativo”. Al indicar los paquetes solicitados en ~/.spacemacs, son descargados desde los repositorios luego de presionar Alt-m  f  e  R, de ahora en más M-m  f  e  R.
(Alt es “Meta”, no olvidar)

.spacemacs - user-config
Configuración de Spacemacs en el archivo .spacemacs – user-config. Acá se activan / desactivan paquetes individuales instalados.

En la imagen, arriba a la izquierda se declara la activación de paquetes al inicio mediante el comando (require ‘nombre_del_paquete)  y (nombre_del_paquete t) (“t” de “toggle”, para activarlo de inmediato). En mi caso activé el smooth scrolling y el minimapa al inicio.

Ahora, lo importante: los comandos de uso cotidiano más frecuentes.
Por convención, vamos a definir las siguientes combinaciones de teclas:

C-x es Ctrl más la tecla “x”, M-x es Meta/Alt más la tecla “x”, M-m es Meta/Alt más la tecla “m”, and so on and so on and so on.

AYUDA

En cualquier contexto: C-h  C-h

ARCHIVOS

Abrir: C-x  C-f  (“x” de “eXecute, “f” de “file”)
Guardar: C-x  C-s
Guardar como: C-x  C-w

EDICIÓN

Seleccionar: C-SPC (desplazar cursor hacia los costados para seleccionar texto)
Cortar: C-w
Copiar: M-w
Pegar: C-y
Deshacer: C-_
Buscar: C-s
Continuar búsqueda: C-M-s (hacia adelante) o C-M-r (hacia atrás)
Buscar y Reemplazar: ESC-% (ingresar expresión a buscar, y luego a reemplazar)

OPERACIONES DE BUFFER

Cambiar de buffer: C-x  b
Ir al buffer a la derecha: C-x  ⇒
Ir al buffer a la izquierda: C-x  ⇐
Cerrar / destruir buffer: C-x  k (seleccionar buffer en la lista abajo)

OPERACIONES DE VENTANA

Cambiar foco de ventana: C-x  o (letra “o”)
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: 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 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 da un total de 182 Mb 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.
  • 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 capa.

Estas fueron mis razones para intentarlo con Emacs + Spacemacs.

Nos leemos pronto.

Anuncios

Responder

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. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s