Iniciando con Emacs

Desde hace ya un buen tiempo que mi buen amigo Oscar me andaba pidiendo un tutorial introductorio a Emacs para su blog «No toques mi código«. Su petición viene después de haber publicado un tutorial introductorio a Vim, el «rival» de emacs en una de las guerras sagradas en el mundo del software y de la informática.

La petición resulta ser bastante extraña, teniendo en cuenta que él ha sido siempre reacio a utilizar emacs, y se ha decantado siempre por Vi(m), al menos en  teoría, ya que en la práctica utiliza Sublime para desarrollar.

Empecemos entonces con esta introducción a emacs.

¿Qué es Emacs?

La GNU define a emacs como el editor extensible y [altamente] personalizable. Esta descripción podría perfectamente aplicarse a muchos otros editores si es que no se conoce de emacs, o nunca se ha trabajado en él.

Comenzaré por mencionar que Emacs fue desarrollador por Richard Stallman, un desarrollador de C y de Lisp, que llegó a ser usuario de máquinas Lisp, y emacs, en esencia, es una máquina virtual de Lisp enfocada a la implementación de un potente editor. Emacs es, por tanto, extensible en Emacs Lisp. La naturaleza altamente dinámica de [Emacs] Lisp, le permite modificar (y por tanto, personalizar) virtualmente cualquier parte Lisp. Esto lo diferencia de otros editores que, a pesar de poderse extender a través de otros lenguajes de programación, lo permiten de una manera muy limitada a lo que puede llegar a permitir emacs.

Si en su tutorial de Vim, Oscar llama a este editor un «cañón de neutrones» (lo que sea que esto quiera decir), Emacs vendría a ser algo así como la «piedra filosofal» de los editores de texto (manteniendo la proporción de las metáforas ;)).

Funcionalidades

Veamos entonces, qué se puede realizar con GNU Emacs:

  • Corrector ortográfico (hace uso del que venga instalado en el sistema, aspell o hunspell por ejemplo).
  • Autocompletado de texto.
  • Múltiples archivos pueden ser visibles al tiempo, dividiendo el marco de trabajo.
  • Resaltado de sintaxis, dependiendo del lenguaje de programación que se utilice.
  • Deshacer, «rehacer» (para emacs, rehacer es una forma de «deshacer». Esto es bastante poderoso, aunque sea diferente a los demás editores).
  • Emacs soporta una cantidad impresionante de lenguajes de programación y modos de resaltado. En su administrador de paquetes (SI, emacs tiene un administrador de paquetes al más puro estilo de apt-get o yum) es posible encontrar sintaxis tan exóticas como las de los archivos de configuración de Asterisk.
  • Extensible en Emacs Lisp. (Hay proyectos como Pymacs que permiten que emacs pueda ser extensible en Python).
  • Completado de comandos, palabras y uris de archivos. (Es posible instalar complementes como Ido y Helm, los cuales pueden funcionar juntos, que a su vez expanden enormemente las capacidades de autocompletado y búsqueda de emacs).
  • Compresión y descompresión de ficheros a la hora de ser editados. Puede también trabajar con ficheros cifrados a través de gpg.
  • Soporte para múltiples codificaciones de ficheros, y conversión entre los mismos.
  • Historial de comandos ejecutados recientemente. Igualmente, es posible instalar extensiones que facilitan que recuerdan los comandos más utilizados.
  • Grabación y reproducción de macros. (Las ediciones de código más complejas se pueden realizar en emacs lisp).
  • Guardado de la configuración entre sesiones.
  • Plegado (folding) de bloques de código.
  • Interfaz gráfica opcional (e innecesaria y poco recomendada).
  • Probablemente es el editor más configurable y personalizable que hay (alguien me indica uno más personalizable?.
  • Es capaz de emular a Vim con Evil, pero con la potencia de seguir en Emacs :). Hay que aceptar que lo único que un usuario de Emacs puede «envidiar» de un usuario de Vim son las combinaciones de teclas que no requieren de Control y Alt, pero, eso también se puede tener en emacs.
  • Compilación y depuración desde el mismo editor.

En esta lista traté de listar lo mismo que en el artículo de Vim fue listado. Ahora haré un breve repaso de características de Emacs que son únicamente fáciles gracias a su diseño altamente extensible:

  • Cliente de correo electrónico (rmail, gnus).
  • Lector de noticias.
  • Cliente de IRC (ERC).
  • Organizador personal (org-mode). Esta es probablemente una de las extensiones más impresionantes que tiene emacs, y por las que muchos usuarios deciden iniciar la carrera de aprendizaje de este editor. Yo lo uso como mi agenda personal, administrador de proyectos, y ofrece, por ahí derecho, la posibilidad de editar textos complejos que pueden ser exportados a formatos como HTML, LaTeX (y por tanto, a PDF), texto, plano, entre otros.
  • Con org-mode es posible realizar programación literata e investigación reproducible. Esto es sencillamente impresionante, y espero próximamente hacer uso de las características de investigación reproducible de emacs.
  • Interfaces a las aplicaciones de control de revisiones con VC (subversion, git, bazaar, mercurial, etc.).
  • Git tiene un modo especial para llamado magit, el cual es extremadamente poderoso. Yo lo uso constantemente y lo recomiendo. Mercurial tiene Monkey, el cuál trata de ser similar a Magit, pero la popularidad de Git hacen que Monkey no tenga tanto desarrollo como su contraparte.
  • Administrador de procesos (Proced).
  • Administrador de archivos (Dired). Este modo es especialmente interesante para realizar ciertas operaciones con archivos.
  • Administrador de paquetes (package.el). Ver esta entrada en mi blog: https://conciencialibreblog.wordpress.com/2013/06/06/emacs-administrando-las-extensiones-package-el/
  • Y muchas más funcionalidades.

Utilizando emacs

Dado que esta es una [no tan] corta introducción, solo indicaré el uso básico de emacs. A diferencia de Vim, que hace uso de distintos modos para trabajar, emacs utiliza [a veces complejas] combinaciones de teclas con Control, Alt, y otras (yo por ejemplo tengo configurada la tecla Win). La convención es que C-x quiere decir control junto con x, y C-x a quiere decir, primero Control-x, y posteriormente solo la tecla a. Igualmente, Alt se denota con M- por lo que M-x quiere decir, Alt junto con la tecla x (M quiere decir Meta, y se refiere a una tecla que tenían viejos teclados).

Para abrir emacs basta con ejecutar lo siguiente en la linea de comandos:

emacs

 

Una vez en el editor, pueden presionar C-x C-f para abrir o crear un nuevo archivo. Una vez realicen cambios, pueden presionar C-x C-s para guardar los cambios. Ahora, para salirse de emacs basta con que presionen C-x C-c

.

 

Otros comandos

  • C-SPC (Control + la barra espaciadora). Inicia la selección de texto.
  • C-w : Cortar.
  • M-w : Copiar.
  • C-y : Pegar.
  • C-a : Va al principio de la linea.
  • C-k : Corta desde la ubicación del cursor hasta el final de la linea.
  • M-7 C-k : Corta siete veces la linea.
  • C-u 5 0 C-y : Pega cincuenta veces lo recientemente copiado.
  • TAB: Tabula la linea actual.
  • C-_ : Deshacer.
  • C-x o : Cambia a la siguiente ventana.

Es importante mencionar que el comportamiento de las combinaciones de teclas pueden variar dependiendo del modo de edición en el que se encuentren.

Ya para terminar…

Una cosa importante que diferencia a emacs de otros editores, son los modos. Emacs tiene dos tipos de modos, los mayores y los menores. Yo por ejemplo utilizo bastante el python-mode, que es un modo para desarrollo en python, que ajusta las combinaciones de teclas por defecto de emacs para potenciar el desarrollo en este lenguaje de programación, y agrega toda una serie de funcionalidades nuevas que no tienen otros modos. En cada momento solo puede haber un modo mayor activador.

En cuanto a los modos menores, pueden haber, y usualmente hay, más de un modo activado a la vez, acompañando al modo mayor. Yo por ejemplo hago uso del flyspell-mode, que adiciona chequeo de errores de ortografía a los otros modos, o el auto-fill-mode, que hace que las lineas no sean de más de 80 caracteres en el archivo.

No quiero terminar esta entrada sin mencionar algunos inconvenientes que emacs puede tener. Creo que el más importante de estos es la curva de aprendizaje tan elevada que tiene. Hay que aceptar que tanto vim como emacs tienen curvas mucho más empinadas que otros editores, sin embargo, dada la cantidad de funcionalidad que emacs tiene, es necesario aprender más cosas sobre los modos que uno utiliza. Uno llega a acostumbrarse con el tiempo, y a hacerse más eficiente entendiendo los nuevos modos, y aprendiendo a utilizar la autoayuda de emacs (C-h), sin embargo, esto suele ser una barrera de entrada para nuevos usuarios.

 

Yo me atrevería a afirmar que el costo de aprendizaje de emacs lo amerita, sobre todo cuando uno llega a transformar emacs para apropiar un flujo de trabajo determinado. En mi caso, haciendo uso de elpy, me he llegado a acostumbrar al flujo de TDD (Test Driven Development), y he adaptado emacs para crear nuevos tests fácilmente (con snippets de código), y para testear, sin salir de emacs, los tests, desde que fallan, hasta que se implementa la funcionalidad, utilizando siempre Magit para hacer los respectivos commits y el respectivo push al terminar una tarea.

Otras personas publican en sus blogs personales desde emacs, por ejemplo, sin dejar nunca el editor, exportando a html y subiendo a plataformas como wordpress a través de sus apis (yo todavía no lo hago :/).

Eso es todo por ahora sobre emacs, aunque he publicado en mi blog otros artículos al respecto que pueden revisar.

Acerca de

Informático, desarrollador de software. Me gustan una gran variedad de temas.

Tagged with: , , ,
Publicado en emacs

Deja un comentario