intro_2_emacs/intro_2_emacs.org

15 KiB

Introducción a (GNU) Emacs

Por: kempii Para: Software Freedom Day 2022 Desde: Autodefensa Digital del Norte Hackerspace

¿Qué es Emacs?

Emacs es un editor de texto (de software) libre, que es extendible, personalizable y mucho más. Además, en un sentido más avanzado, es un interpretador de Emacs Lisp (dialecto del lenguaje de programación Lisp) con extensiones que facilitan la edición de texto.

Es uno de los software libres más antiguos que siguen en desarrollo. Originalmente escrito en 1976 por David A. Moon y Guy L. Steele Jr., mientras que la variante más popular, GNU Emacs, fue originalmente escrita por Richard Stallman.

(GNU) Emacs tiene licencia de GPL 3.0 o posterior (General Public License), por lo que se pueden ejercer las cuatro (4) libertades del software libre:

  1. la libertad de usar el programa, con cualquier propósito (uso).
  2. la libertad de estudiar cómo funciona el programa y modificarlo, adaptándolo a las propias necesidades (estudio).
  3. la libertad de distribuir copias del programa, con lo cual se puede ayudar a otros usuarios (distribución).
  4. la libertad de mejorar el programa y hacer públicas esas mejoras a los demás, de modo que toda la comunidad se beneficie (mejora).

Nota: Las libertades 1 y 3 requieren acceso al código fuente, porque estudiar y modificar software sin su código fuente es muy poco viable.

¿Qué ofrece Emacs?

  • Gran experiencia en edición de texto
  • Poderosos atajos de teclado (keybindings)
  • Completamente personalizable
  • Funciones para casi todo, y para lo que no, tú las puedes crear
  • Mucha y muy accesible documentación
  • Mucha comunidad activa
  • Infinidad de paquetes para cualquier cosa

Ya entré a Emacs, ¿ahora cómo me salgo?

Existen dos teclas muy importantes para trabajar en Emacs:

  • CONTROL: También llamada CTRL o CTL
  • META: También comúnmente llamada META

Estas dos teclas se utilizan para realizar los comandos y atajos de teclado.

En lugar de escribir completamente esto en cada ocasión, usaremos las siguientes abreviaturas:

C-<car> significa mantener presionada la tecla CONTROL mientras teclea el carácter <car>. Por lo tanto C-f será: Mantenga presionada la tecla CONTROL y teclee f. M-<car> significa mantener presionada la tecla META o ALT mientras teclea <car>. Si no hay teclas META o ALT, en su lugar presione y libere la tecla ESC y luego teclee <car>. Escribimos <ESC> para referirnos a la tecla ESC.

Ahora sí, ¿cómo me salgo de Emacs? El comando para salir es:

  • C-x C-c -> Este atajo de teclado corre el comando save-buffers-kill-terminal, que también pueden ejecutar de la siguiente manera M-x save-buffers-kill-terminal

-> Nota importante: Para cancelar un comando parcialmente introducido, teclee C-g.

Navegación

Para ver pantallas completas

Los siguientes comandos son útiles para ver pantallas completas:

C-v Avanzar una pantalla completa M-v Retroceder una pantalla completa C-l Limpiar la pantalla y mostrar todo el texto de nuevo, moviendo el texto alrededor del cursor al centro de la pantalla (Esto es CONTROL-L, no CONTROL-1.)

Movimiento básico del cursor

Nota: La ubicación del cursor en el texto se llama también «punto». En otras palabras, el cursor muestra sobre la pantalla donde está situado el punto dentro del texto.

Línea anterior, C-p :: :: Atrás, C-b…. Posición actual del cursor …. Adelante, C-f :: :: Línea siguiente, C-n

Resulta más fácil recordar estas letras por las palabras que representan en inglés:

  • P de Previous (anterior)
  • N de Next (siguiente)
  • B de Backward (atrás)
  • F de Forward (adelante).

Vamos a estar usando estos comandos de posicionamiento básico del cursor todo el tiempo.

Nota importante: También puede mover el cursor con las teclas de flecha si su terminal dispone de ellas. Recomendamos aprender C-b, C-f, C-n y C-p por tres razones. Primero, funcionan en todo tipo de terminales. Segundo, una vez que gane práctica usando Emacs, encontrará que teclear estos caracteres Control es más rápido que usar teclas de flecha (porque no tendrá que mover las manos de la posición para mecanografiar). Tercero, una vez tenga el hábito de usar estos comandos Control, también puede aprender a usar otros comandos avanzados de movimiento del cursor fácilmente.

Extendiendo el movimiento

Si moverse por caracteres es muy lento, puedes moverte por palabras. M-f (META-f) mueve adelante una palabra y M-b mueve atrás una palabra.

Este paralelo se aplica entre líneas y oraciones: C-a y C-e para moverse al comienzo o al final de la línea; y M-a y M-e para mover al comienzo o al final de una oración.

Checa cómo la repetición de C-a no hace nada, pero la repetición de M-a sigue moviendo una oración más. Aunque no son muy análogas, cada una parece natural.

Otros dos comandos importantes de movimiento del cursor son M-< (META Menor que), el cual se mueve al comienzo del texto entero, y M-> (META Mayor que), el cual se mueve al final del texto entero.

Argumentos numéricos

La mayoría de comandos de Emacs aceptan un argumento numérico; para la mayoría de comandos esto sirve como un factor de repetición. La manera de pasarle un factor de repetición a un comando es tecleando C-u y luego los dígitos antes de introducir los comandos. Si tiene una tecla META (o ALT), hay una manera alternativa para ingresar un argumento numérico: teclear los dígitos mientras presiona la tecla META. Recomendamos aprender el método C-u porque éste funciona en cualquier terminal. El argumento numérico es también llamado un «argumento prefijo», porque usted teclea el argumento antes del comando al que se aplica.

Por ejemplo, C-u 8 C-f mueve hacia adelante ocho caracteres.

La mayoría de comandos usan el argumento numérico como un factor de repetición, pero algunos comandos le dan otros usos. Varios comandos (pero ninguno de los que ha aprendido hasta ahora) lo usan como una bandera: la presencia de un argumento prefijo, sin tener en cuenta su valor, hace que el comando actúe de forma diferente.

Buscar texto por coincidencias

Emacs puede hacer búsquedas de cadenas (una «cadena» es un grupo de caracteres contiguos) hacia adelante a través del texto o hacia atrás en el mismo. La búsqueda de una cadena es un comando de movimiento de cursor; mueve el cursor al próximo lugar donde esa cadena aparece.

El comando de búsqueda de Emacs es «incremental». Esto significa que la búsqueda ocurre mientras teclea la cadena para buscarla.

El comando para iniciar una búsqueda es C-s para búsqueda hacia adelante, y C-r para la búsqueda hacia atrás. ¡PERO ESPERE! No los intente aún.

Cuando teclee C-s verá que la cadena «I-search» aparece como una petición en el área de eco. Esto le indica que Emacs está en lo que se conoce como búsqueda incremental, esperando que teclee lo que quiere buscar. <Return> termina una búsqueda.

Si usted teclea lo que quiere buscar y luego presiona de nuevo C-s, saltará a la siguiente coincidencia.

Resumen de la navegación

C-f Avanzar un carácter C-b Retroceder un carácter

M-f Avanzar una palabra M-b Retroceder una palabra

C-n Avanzar a la línea siguiente C-p Retroceder a la línea anterior

C-a Retroceder al comienzo de la línea C-e Avanzar al final de la línea

M-a Retroceder al comienzo de la oración M-e Avanzar al final de la oración

C-v Avanzar una pantalla completa M-v Retroceder una pantalla completa

M-< Moverse al inicio del texto entero M-> Moverser al final del texto entero

C-u <digito> Argumento numérico

C-s Búsqueda incremental C-r Búsqueda hacia atrás (también incremental)

Ventanas, ayuda, archivos y buffers

Hay toda una serie de comandos que comienzan con CONTROL-x; muchos de ellos tienen que ver con ventanas, archivos, buffers y cosas relacionadas. Estos comandos son de una longitud de dos, tres o cuatro caracteres.

Ventanas

Emacs puede tener varias «ventanas», cada una mostrando su propio texto. Aquí van algunos comandos para realizar gestión de ventanas:

C-x 1 Una ventana (elimina todas ventanas, excepto en la que está el cursor) C-x 2 Abre una ventana en la parte de abajo C-x 3 Abre una ventana en la parte de la derecha C-x o Cambia el cursor de ventana

Ayuda

El comando de ayuda en Emacs es C-h

Aquí hay algunas opciones útiles de C-h:

C-h x Describe un comando. Usted teclea el nombre del comando. C-h k Describe un atajo de teclado C-h v Describe una variable C-h f Describe una función C-h a Comando Apropos. Teclee una palabra y Emacs hará una lista de todos los comandos que contengan esa palabra. Todos estos comandos pueden ser invocados con META-x. Para algunos comandos, el Comando Apropos también listará una secuencia de uno o dos caracteres la cual ejecutará el mismo comando.

Archivos

Una cosa especial acerca del comando para encontrar un archivo es que tendrá que decir qué nombre de archivo desea. Decimos que el comando «lee un argumento» (en este caso, el argumento es el nombre del archivo). Después de teclear el comando:

C-x C-f Encontrar un archivo

Emacs le pide que teclee el nombre del archivo. El nombre de archivo que teclee aparece en la línea final de la pantalla. A la línea final de la pantalla se la denomina minibuffer cuando se utiliza para este tipo de entradas. Puede usar comandos de edición ordinarios de Emacs para editar el nombre del archivo.

Mientras está ingresando el nombre del archivo (o cualquier otra entrada al minibuffer) puede cancelar el comando con C-g.

Cuando haya finalizado de ingresar el nombre del archivo, teclee <Return> para terminarlo. El minibuffer desaparece, y el comando C-x C-f trabaja para encontrar el archivo que escogió.

En seguida aparecerá el contenido del archivo en la pantalla, y puede editarlo. Cuando quiera que sus cambios sean permanentes, teclee el comando

C-x C-s Guardar el archivo C-x C-w "Guardar como" el archivo

Esto copia el texto dentro de Emacs al archivo. La primera vez que haga esto, Emacs renombrará el archivo original con un nuevo nombre para que éste no se pierda. El nuevo nombre se hace agregando «~» al final del nombre del archivo original. Cuando guardar haya terminado, Emacs mostrará el nombre del archivo escrito.

Puede encontrar un archivo existente, para verlo o editarlo. También puede hacerlo con un archivo que no exista. Ésta es la forma de crear un archivo en Emacs.

Buffers

Emacs almacena cada archivo que abra dentro de un objeto llamado «buffer». Al encontrar un archivo se crea un nuevo buffer dentro de Emacs. Para mirar la lista de los buffers que existen actualmente, teclee:

C-x C-b Lista de buffers

Cuando tenga varios buffers, solo uno de ellos es «actual» en algún momento. Ese buffer es el que actualmente edita. Si quiere editar otro buffer, necesita «cambiar» a él. Si quiere cambiar a un buffer que corresponde a un archivo, puede hacerlo visitando el archivo de nuevo con C-x C-f. Pero existe una manera más rápida: use el comando C-x b. En ese comando, necesita teclear el nombre de buffer.

C-x b Para cambiar a otro buffer, insertando como argumento el nombre del buffer C-x s Guarda todos los buffers sin tener que tener el cursor en ellos

Edición de texto

Insertar

Si quieres insertar un texto, basta con que lo teclees. Los caracteres normales, como A, 7, *, etc. se insertan nada más al teclearlos, al igual que los saltos de línea.

Borrar y eliminar

Para borrar el carácter que precede al cursor, oprime <DEL>. Es una tecla alargada, normalmente etiquetada como «Backspace» o «Del», o con una flecha apuntando a la izquierda; la misma que sueles utilizar fuera de Emacs para borrar el último carácter introducido.

Puede haber otra tecla llamada «Del» o «Supr» en otra parte, pero ésa no es <DEL>.

Otras maneras de borrar:

<DEL> Borra el carácter justo antes del cursor C-d Borra el siguiente carácter después del cursor

M-<DEL> Elimina la palabra inmediatamente antes del cursor M-d Elimina la siguiente palabra después del cursor

C-k Elimina desde el cursor hasta el fin de la línea M-k Elimina hasta el final de la oración actual

Nota: Nota que <DEL> y C-d, comparados con M-<DEL> y M-d, extienden el paralelismo iniciado por C-f y M-f

También puede eliminar un segmento contiguo de texto con un método uniforme. Muévase a un extremo de ese segmento de texto, y teclee C-@ o C-<SPC> (cualquiera de los dos). (<SPC> es la barra espaciadora.) Luego, mueva el cursor al otro extremo del texto que desea eliminar. Al hacerlo, Emacs resaltará el texto situado entre el cursor y la posición en la que tecleó C-<SPC>. Finalmente, teclee C-w. Eso elimina todo el texto entre las dos posiciones.

La diferencia entre «eliminar» y «borrar» es que el texto «eliminado» puede ser reinsertado (en cualquier posición), mientras que las cosas «borradas» no pueden ser reinsertadas (sin embargo, es posible deshacer el borrado; ver más abajo). La reinserción de texto eliminado se llama «yanking» o «pegar».

Copiar y pegar <yanking>

Reinsertar texto eliminado se denomina «yanking» o «pegar». (Piense en ello como pegar de nuevo, o traer de vuelta, algún texto que le fue quitado.) Puede pegar el texto eliminado, ya sea el lugar en que fue eliminado, o en otra parte del buffer, o hasta en un archivo diferente. Puede pegar el texto varias veces, lo que hace varias copias de él. Algunos editores se refieren a eliminar y reinsertar como «cortar» y «pegar» (consulte el Glosario en el manual de Emacs).

El comando para pegar es C-y. Reinserta el último texto eliminado, en la posición actual del cursor.

¿Qué hacer si tiene algún texto que quiere pegar, y entonces elimina otra cosa? C-y pegaría la eliminación más reciente. Pero el texto previo no está perdido. Puede regresar a éste usando el comando M-y. Después de haber tecleado C-y para conseguir la eliminación más reciente, tecleando M-y reemplaza el texto pegado con la eliminación previa. Tecleando M-y una y otra vez traerá las eliminaciones anteriores. Cuando haya encontrado el texto que buscaba, no tiene que hacer nada para conservarlo. Solo siga con su edición, dejando el texto pegado en donde está.

Si teclea M-y suficientes veces, regresa al punto inicial (la eliminación más reciente).

En resumen los comandos son:

C-y Pega el texto <eliminado> o copiado M-y Una vez presionado C-y, reemplaca el texto pegado con la eliminación previa M-w Copia el texto delimitado por una área marcada (usando C-<SPC>)

Deshacer y rehacer

Si hace un cambio al texto, y luego decide que fue un error, puede deshacer el cambio con el comando deshacer, C-_

C-_ Deshace cambios hechos al texto, también puede usar el comando C-/ C-M-_ Rehace el cambio hecho (si inicialmente se deshizo un cambio)

Personalización de Emacs

Hay muchos paquetes que te ayudan a personalizar la experiencia en Emacs.

Aquí dejo un archivo de configuración básico: Configuración básica para Emacs

¿Qué más puedo hacer?

  • Modos (modes) y modos menores (minor modes)
  • Calendario
  • Correo
  • Lector de noticias
  • IRC / mensajería
  • Navegación web
  • Debugger
  • Personalización de IDE
  • Magit (interface para git)
  • Org mode

Emacs comic