Un poco de… Emacs (III): comandos básicos

Algunos lectores me han sugerido que escriba un poco sobre las operaciones y comandos básicos en emacs, ya que les está costando seguir los artículos de esta serie (un poco de… emacs). De hecho, si no has usado nunca antes emacs, cuando trabajas con él la primera vez tienes dificultades para -por ejemplo- salir de la aplicación si no conoces bien el funcionamiento del mismo.

Aunque ya comenté al principio que esta serie no quería que fuera un tutorial de emacs (más que nada, porque existen muchos ya -y muy buenos- por internet (I)), en este artículo voy a explicar algunos de los aspectos más básicos de emacs. Empecemos.

Estructura de emacs

A continuación mostramos una captura de pantalla de emacs, en concreto en su versión 24, aunque es similar que las versiones inmediatamente anteriores:

emacs1

En la parte superior tenemos el menú y justo debajo una barra de herramientas con las opciones usuales (abrir archivo, guardar, cortar, copiar, imprimir…). Justo debajo tenemos la parte más importante de la aplicación, el buffer, que es precisamente donde escribimos (hablamos de esto más abajo).

En la parte inferior de la pantalla tenemos dos líneas: la superior, llamada “modeline”, es donde aparecen los datos del estado (nombre del fichero, número de línea, modo activo -ya veremos qué son los modos en otro artículo-); la inferior, llamada minibuffer, se usa para “hablar” con emacs, es decir, para llamar a las funciones (por ejemplo: print-buffer, para imprimir el buffer actual).

Buffers y ficheros

Cuando arrancas emacs, lo que se muestra es un buffer llamado scratch. Un buffer no es más que el texto que se muestra en emacs. Podéis tener varios buffers abiertos, cada uno para una cosa (uno para escribir un documento, otro para probar combinaciones de teclas y funciones de emacs…).

Un buffer puede estar asociado a un fichero o no. Por ejemplo, si abrimos un fichero en emacs (ver apartado “Funciones más usuales en emacs” para ver cómo hacerlo), lo que hará será crear un buffer con el contenido del fichero. Luego, si modificamos el texto y salimos sin guardar, el fichero estará igual que al abrirlo, es decir, no reflejará los cambios, pero si guardamos, lo que hará es copiar el contenido del buffer en el fichero; dicho con otras palabras, guardará el fichero con las nuevas modificaciones (como en cualquier editor de texto).

Se puede tener un buffer para escribir y no guardarlo, que es lo mismo que abrir otro editor/procesador de texto, escribir en un documento nuevo y salir sin guardar.

Combinaciones de teclas

Emacs está pensado para trabajar 100% con el teclado. Se puede usar el ratón, sí, pero lo cierto es que si estás quitando la mano del teclado para coger el ratón “pierdes tiempo”. Si por el contrario aprendes a hacer las cosas directamente desde el teclado, aumentas tu productividad.

En emacs la mayoría de las funciones están asociadas a combinaciones de teclas (II). La simbología usada para representarlas es la siguiente:

C-g     --> Pulsas la tecla Control y, sin soltarla, pulsas la tecla G.
C-x C-f --> Pulsas la tecla Control y, sin soltarla, pulsas la tecla X. A 
            continución, pulsas la tecla Control y, sin soltarla, pulsas la tecla 
            F. Esto es lo mismo que pulsar la tecla Control y, sin soltarla, 
            pulsar la tecla X y, a continuación, la tecla F.
M-x     --> Pulsas la tecla ALT y, sin soltarla, pulsas la tecla X.

Cada función hemos dicho que se puede usar mediante su correspondiente combinación de teclas, pero también podemos llamar a la función directamente mediante el uso del minibuffer.

Arrancando y saliendo de Emacs

Para arrancar la aplicación, nada más simple, o bien desde el menú de aplicaciones (normalmente dentro de la categoría utilidades, o editores, o similar), o bien desde la propia línea de comandos (III):

$ emacs

Para salir de la aplicación pulsaremos la combinación de teclas:

C-x C-c

Si hemos hecho alguna modificación (si hemos escrito algo, vaya), nos preguntará si queremos guardar antes de salir, algo que hace cualquier editor que se precie (incluso Word lo hace :-P).

Funciones más usuales en emacs

Abrir archivo: C-x C-f
Guardar archivo: C-x C-s
Guardar archivo como: C-x C-w

Desplazar cursor derecha: C-f
Desplazar cursor izquierda: C-b
Desplazar cursor línea abajo: C-n
Desplazar cursor línea arriba: C-p
Desplazar cursor principio línea: C-a
Desplazar cursor final línea: C-e

Avanzar cursor una palabra: M-f
Retroceder cursor una palabra: M-b
Situar cursor al principio del texto: M-<
Situar cursor al final del texto: M->

Imprimir buffer actual: M-p
Eliminar buffer actual: C-x k    (IV)
Entrar en el minibuffer para introducir comandos: M-x
Cancelar combinación de teclas: C-g

Muchas combinaciones de teclas, aunque os resultarán extrañas al principio, están estudiadas para que sean sencillas de usar sin necesidad de levantar las manos del teclado. Por ejemplo, para desplazarnos por el documento podemos usar los cursores, pero tenemos que levantar la mano de la posición normal para usarlos. Además, las combinaciones de teclas, en la medida de lo posible, usan un carácter que recuerda la función que realizan. Por ejemplo:

C-f (move Forward)
C-b (move Backward)
C-n (move Next line)
C-p (move Previous line)

Se pueden realizar muchas opciones con los frames y ventanas de forma que podéis dividir una ventana en 2 horizontalmente, abrir un buffer distinto en cada uno, dividir de nuevo verticalmente… pero no vamos a entrar en estos detalles ya que esto pretende ser una pequeña introducción. Otro artículo hablaremos, si procede, de la gestión de frames y ventanas con emacs.

NOTA: Aunque aquí pongo la combinación de teclas, tened en cuenta que cada función tiene un nombre y que podéis ejecutarla directamente en el minibuffer. Obviamente, para las opciones más usuales, lo suyo es usar una combinación de teclas para agilizar, pero si no conocéis la combinación de teclas o bien no hay ninguna asociada, podéis usar la función en el minibuffer. Por ejemplo, para imprimir el buffer podéis introducir la función “print-buffer” (para entrar en el minibuffer podéis pulsar M-x). Otra función que os puede resultar curiosa es “tetris”, sin las comillas (que os divirtáis ;-)).

Si comenzáis con una combinación de teclas o bien entráis en el minibuffer y os dáis cuenta que queréis cancelar, que no queréis ejecutar la función que habíais pensado, podéis usar C-g (muy útil).

¿Necesitáis ayuda en emacs?

Como se comenta en la nota (I), existe un tutorial que podéis seguir para adquirir los conceptos básicos (algo como lo que he intentado transmitiros aquí). Podéis acceder a él pulsando C-h t

Si queréis saber qué función realiza una combinación de teclas podéis usar esta función en el minibuffer (ya sabéis: pulsando M-x váis al minibuffer (V)): where-is. Por ejemplo:

where-is <INTRO> print-buffer

os motrará esto:

Print buffer is on M-p.

También os dice cómo encontrar la función dentro de los menús de la aplicación.

Si, por el contrario, queréis saber qué función hay asociada a una combinación de teclas, usaréis la siguiente función: describe-key. Ejemplo:

describe-key <INTRO> M-p

que abrirá otro buffer (en un frame nuevo -veremos esto en otro artículo-) mostrándonos la información requerida.

También es posible que nos suene un comando, una palabra, pero no sabemos ni la combinación de teclas ni el nombre exacto de la función. En este caso podemos usar la función “apropos”. Ejemplo:

apropos <INTRO> print

Esto nos mostrará todas las funciones que contienen “print” en ella.

Conclusión

Con este pequeño artículo quería mostraros unas pequeñas pinceladas sobre cómo funciona emacs. Obviamente, me he dejado muchas, muchísimas cosas en el tintero, pero para una introducción sencilla creo que no son necesarias (echarían a muchos para atrás ;-)).

A partir de aquí, si os pica el gusanillo de emacs, podéis echarle un vistazo al tutorial de emacs (recordad: C-h t). En internet tenéis mucha información. También hay libros, de los que yo os recomiendo “Learning GNU Emacs -Third Edition-“.

En esta misma web intentaré escribir de vez en cuando -cuando el tiempo me lo permita-, artículos sobre emacs, sobre cosas concretas, así que si os gusta emacs… ¡no os los perdaís! 😉

Por último, os dejo una hoja de referencia con las combinaciones de teclas y más usuales para que la imprimáis y la tengáis cerca de vuestro equipo para consulta. Es la que viene con la propia instalación de emacs. Aquí la tenéis de la página oficial de GNU, donde viene la misma hoja pero en plan… “envejecido” (cosas de RMS).

 

(I) Además, el propio emacs tiene su tutorial al que se puede acceder pulsando C-h t.

(II) En cualquier caso, las que no lo están también se pueden asociar a las combinaciones que queramos. También se pueden cambiar las asociaciones de teclas por defecto. Todo es personalizable, incluso en tiempo real (sin tener que salir de la aplicación, modificar configuraciones, recompilar, etc.). Esto es, sin embargo, materia para otros artículos.

(III) El “$” al principio, por si alguien se pierde, es el prompt de la línea de comandos. Es como el “C:\>” de Windows. A continuación del mismo escribimos los comandos que queremos ejecutar.

(IV) (Control y X al mismo tiempo, soltamos ambas y pulsamos “K”)

(V) En el minibuffer, de forma similar a como sucede en la consola de Linux, se puede usar el tabulador para autocompletar el comando. Así, si escribir “print” y le dáis al tabulador os dará como opciones “buffer” y “region”. En cuanto pulséis las teclas suficientes para que sepa cuál queréis podéis pulsar de nuevo tabulador y se completará entera. Así, si pulsáis “print”, le dáis a tabulador, y escribís “b”, se completará a “print-buffer”.