- Convenciones
- Términos
- Cómo ejecutar
- Comandos Emacs
- Operaciones sobre comandos
- Keybindings
- Comandos de ayuda
- Elementos de Emacs
- Modos de edición y línea de modo
- Elisp
- Gestión de sesiones
- Gestión de ventanas
- Gestión de buffers
- Mover el cursor
- De palabra en palabra
- Líneas y oraciones
- Mover a lo largo del texto completo (buffer)
- Seleccionar texto y regiones
- Edición de texto
- Borrar
- Cortar
- Copiar, pegar y killring
- Transponer
- Codificación de caracteres
- Buscar y reemplazar
- Macros de teclado
- Conexiones remotas
- Bookmarks
- Administrar una instalación de Emacs
- Fichero de configuración
- Backups de ficheros
- Paquetes Emacs
- Servidor
- Emacs en entorno Wintel
- Servidor emacs
- Tramp mode y ssh
- Fichero de configuración .emacs
- XKeymacs
- Emacs como IDE
- Java
- Recursos de GNU/Emacs y Emacs Lisp
Convenciones
- C. Abreviatura para la tecla de control, en PC normalmente <<Control>>.
- M. Abreviatura para la tecla meta, en PC normalmente es pulsar <<Esc>> y soltar o <<Alt>> pulsada.
- SPC. Barra espaciadora.
- RET. Enter o return.
- LEFT, RIGHT, UP, DOWN. Fechas de posición.
- SHIFT, BACKSPACE, Supr, etc.
- -. Separador en una combinación de teclas que se presionan a la vez.
ejemplo
.- valor. El valor normalmente se pasa como parámetro dentro de un comando Emacs.
- <<término>>. Un término, nombre propio, nombre de comando, anglicismo etc.
Términos
- Secuencia. Varias teclas o combinaciones que se evalúan al presionar RET y constituyen un comando.
- Buffer. Área de memoria sobre la que se trabaja. Se puede asignar a una ventana para ver el contenido. Un buffer es una zona de memoria en la que se vuelca el texto en el que estamos trabajando y que se puede guardar en un fichero. Hay buffers especiales como *Help*, *scratch*, *messages*, *GNU Emacs*.
- Cursor y marca: La marca es un punto en el buffer que se fija mediante comandos y el cursor es el puntero que movemos con las teclas de cursor. La marca es útil para definir regiones y como punto de retorno.
- Regiones: Emacs define regiones usando dos vértices: la marca y el cursor.
- Oración. Una oración termina por defecto en punto espacio espacio.
(setq sentence-end-double-space nil)
para que sea un solo espacio. - <<Kill-ring>>. es el equivalente al portapapeles.
Cómo ejecutar
Si lanzamos GNU/Emacs desde un entorno de ventanas se hará automáticamente en modo de interfaz gráfica. Podemos forzar la ejecución en modo terminal con el modificador -nw.
También podemos usar le modificador -q para ejecutar emacs sin leer el fichero init.el y -Q tampoco lee la configuración global por lo que lanzaría una instancia "vanilla", sin configurar.
Comandos Emacs
Emacs dispone de comandos internos en forma de palabras separadas por guiones medios. Se puede ejecutar cualquier comando directamente con la opción M-x nombre-comando
. Cuando ejecutamos comandos así, Emacs llama internamente al meta comando <<execute-extended-command>>. Las otras dos formas de ejecutar comandos es pulsando la combinación de teclas asociadas si es que las tiene o mediante el menú o barra de herramientas si tuviera una entrada.
Operaciones sobre comandos
- C-g. (keyboard-quit). Abortar secuencia.
- C-u parámetro. Comando universal. Envía el parámetro al siguiente comando de la secuencia.
- C-u n. repetición comando n veces, 4 por defecto. Otra forma de repetir un commando en n veces es M-n.
- C-x u. También C-/ o C-_. Deshace cambios (undo).
Keybindings
Algunos comandos tienen mapeado una combinación de teclas (keybindings). Si ejecutamos un comando mediante el método M-x
y este tuviera asignada una combinación, Emacs nos avisará de su existencia.
- M-x nombre-comando. Ejecutar nombre-comando.
- M-x describe-bindings. Mostrar mapeo actual.
- M-x describe-key. Muestra la ayuda del comando asociado a una combinación de teclas.
- C-h k tecla. Para ver mapeo de la tecla.
- C-q TAB. Para forzar una tabulación.
Comandos de ayuda
- C-h. Ayuda.
- C-h a término. Busca ayuda a cerca de un término.
- C-h k comando. Ayuda de un comando concreto.
- C-h f función. Ayuda de una función concreta.
- C-h v variable. Ayuda de una variable concreta.
- C-h t. Lanzar el tutorial.
- C-h r. Lanzar el manual de Emacs.
En debian muchos ficheros de documentación pueden no existir debido al conflicto entre DFSG y la licencia GFDL. Instalar el paquete emacs24-common-non-dfsg.
Elementos de Emacs
- Frame o marco. Es una instancia de Emacs, por lo que solo se abre un frame por cada sesión, la cual incluye el menú, el minibuffer y al menos una ventana. La imagen que ves abajo es un frame de Emacs.
- Menu (8). Un menú con las principales opciones. En el formato gráfico también suele mostrarse una barra de herramientas debajo de menú. Se accede al menú presionando F10.
- Minibuffer (2). O área de eco es una interfaz entre el usuario y Emacs, aquí insertamos comandos y Emacs nos responde.
- Window o ventana (9). Es el área de edición de un archivo. Dentro de un frame Emacs, cada ventana abierta tiene asociada un buffer, por lo tanto una ventana muestra el contenido que estamos editando. Además del buffer, muestra la línea de modo con el estado del mismo.
- Cursor (1). El cursor muestra la posición en un buffer en la que se trabaja. Esta posición internamente se denomina punto.
- Línea de modo o mode line (7).
- Indicador de codificación
- Indicador de modificación (3).
- Nombre de buffer (4).
- Posición en el buffer y cantidad de buffer que se muestra (5).
- Modo de trabajo (6). Cada modo hace que Emacs se comporte de forma distinta.

Modos de edición y línea de modo
Existen dos tipos de modos de edición: modos mayores y menores. Los modos mayores afectan al buffer en términos generales y solo puede haber uno cargado. El menú cambia de opciones según el modo mayor.
- normal-mode.
- fundamental-mode.
- latex-mode.
- eshell. Ejecuta una shell.
- dired. El buffer funciona como un navegador de archivos.
- magit y vc. Modos para el control de versiones.
Los modos menores pueden cargarse los que se necesiten y son independientes del resto y del modo mayor.
- ispell: Corrector ortográfico. ispell-change-dictionary. Cambia diccionario ispell.
- linum: Mostrar número de líneas. C-x l, muestra líneas por página.
- indent-tabs-mode: Usa carácter tabulador en la identación, es la opción por defecto. Para hacer que fije a espacios, en vez de a tabuladores, (setq-default indent-tabs-mode nil).
- sh-mode: Shell highlight.
Comandos para gestionar modos
- M-x: modo activa/desactiva el modo sea mayor o menor.
- <<-*-nombre-modo -*->> al principio de un fichero, en la primera línea.
- M-: (message "%s" major-mode). muestra el nombre de modo.
- C-h m. (describe-mode). Lista y describe los modos abiertos.
- M-: (nombre-modo 0). Para descargar un modo. Ejecutar el intéprete de elisp en el minibuffer y pasar cero a la función.
La línea de modo presenta esta información:
- codificación.
--
no se ha modificado, **
se ha modificado el buffer.- nombre fichero.
- posición (Top, Bot, All, %).
- L número de línea.
- modo de edición.
Elisp
Elisp o Emacs lisp es un subconjunto del lenguaje Lisp que es interpretado por Emacs.
- M-:. Ejecutar Elisp en el minibuffer.
- C-x C-e. Llamar a <<eval-last-sexp>> que evalúa la expresión a la izquierda del cursor y muestra el resultado en el minibuffer.
- C-j. En *scratch*, llamar a <<eval-last-sexp>> que evalúa la expresión a la izquierda del cursor y deja el resultado en el buffer.
- M-x ielm. Ejecuta el intérprete interactivo.
Trabajar con variables
- M-: setq variable valor. En tiempo real.
- M-x set-variable. Solo para variables de usuario.
- (setq variable valor). Formato elisp. En cualquier intérprete (M-:, en el *scratch* o también en .emacs).
- C-h v variable. Muestra el valor de la variable.
- M-x describe-var. Lista las variables defnidas.
Trabajar con funciones
Algunas variables importantes
- (set-face-attribute 'default nil :height 200). Tamaño fuente a 20pt. C-x C--/C-+ keybinding que ajusta tamaño de fuente.
- (setq inhibit-startup-message t). No spash al inicio.
Gestión de sesiones
- C-x C-c. Cerrar sesión.
- C-x C-z. Salir a la shell (background).
- C-z. Hacer fg.
- C-x RET f. (set-buffer-file-coding-system). Seleccionar codificación.
Gestión de ventanas
- C-x 0. (delete-window). Cierra ventana actual.
- C-x 1. (delete-other-windows). Cierra todas las ventanas excepto con la que estamos trabajando (dejar solo ventana actual).
- C-x 2. (split-windows-verticaly). Divide la ventana en dos ventanas en horizontales (nueva venta abajo).
- C-x 3. (split-windows-horizontaly). Divide la ventana en dos ventanas en verticales (nueva ventana derecha).
- C-x o. (other-window). Posicionarse siguiente ventana.
Redimensionar y ajustar tamaños
- C-x ^. Ajusta alto hacia arriba.
- C-u -n C-x ^. Ajusta alto hacia abajo n posiciones.
- C-x {. Ajusta largo a la izquierda.
- C-x }. Ajusta largo a la derecha.
- C-x +. Igualar todas las ventanas de forma proporcional.
- C-M-v. (scroll-other-window). Desplaza la ventana inferior sin que haya que cambiar a esta. Útil para leer contenido de otra ventana.
- C-x C-+. Aumenta tamaño de fuente.
Gestión de buffers
- C-x b nombre_buffer. Crea si no existe o visita nombre_buffer.
- C-x C-f. (find-file). Buscar fichero para asignarlo al buffer actual (visitar fichero).
- C-x C-b. (list-buffers). Lista los buffers asociados a un fichero y los especiales. No lista aquellos cuyo nombre de buffer empieza por un espacio.
- C-x LEFT y C-x RIGHT. Recorre listado de buffers.
- C-x rename-buffer. Renombra.
- C-x k nombre_buffer. Elimina (mata) nombre_buffer.
- C-x C-s. (save-buffer) Salvar el buffer.
- C-x C-w. (write-file) Salvar el buffer con otro nombre de fichero.
- C-x s. (save-some-buffer). Salvar todos los buffers con cambios. Pide confirmación.
- C-x d. (dired). modo dired.
- M-x rever-buffer. Recargar buffer.
Mover el cursor
De forma predeterminada la tecla C se emplea en caracteres y líneas mientras que la tecla M se emplea en palabras y oraciones:
- C-f. forward. Hacia adelante.
- C-b. backward. Hacia atrás.
- C-n. next. Siguiente línea.
- C-p. previous. Anterior línea.
- C-C C-n. Fija la columna para moverse línea a línea.
- C-l. envía cursor arriba, abajo y al medio de la pantalla.
C-u 0 C-l
Pone el cursor en lo alto de la ventana (parámetro 0).
De palabra en palabra
- M-f. forward. Hacia adelante.
- M-b. backward. Hacia atrás.
- M-n. next. Siguiente palabra.
- M-p. previous. Anterior palabra.
- M-c. capitalize.
- M-l. lowercase.
- M-C. uppercase.
Líneas y oraciones
- C-a. Inicio. También tecla Inicio.
- C-e. Fin. También tecla Fin.
- C-n. Fin de linea incluyendo retorno de carro.
C-e intro
comienza nueva línea (similar comando o
en vi). - M-a. Inicio de oración.
- M-e. Fin de oración.
Mover a lo largo del texto completo (buffer)
- M-<. Inicio. También C-Inicio.
- M->. Fin. También C-Fin.
- C-v. Equivalente Av. Pg.
- M-v. Equivalente Re. Pg.
- M-g g. Ir a línea.
- C-l. Limpia desplazamiento.
Seleccionar texto y regiones
- delete-selection-mode. Activado, cuando escribimos texto sobre la selección lo reemplaza borrando el texto previo, al igual que se comportan muchos editores.
- M-x transient-mark-mode. Visibiliza la selección del texto.
- M-h. Selecciona párrafo.
- C-x h. Selecciona todo el buffer.
- C-SPC. (set-mark-command). Fija la posición de la marca a la posición del cursor.
- C-x C-x. ( exchange-point-and-mark ). Cambia el cursor por la marca.
- C-u C-SPC. Retorna a la marca anterior. El buffer de marcas guarda las 16 últimas.
- C-x SPC. La selección actúa de forma absoluta sobre el buffer, no sobre el texto.
Para trabajar con regiones de columna el primer vértice se marca con C-SPC y en el segundo:
- C-x r y. Copiar.
- C-x r k. Cortar.
- C-x r d. Borrar.
- C-x r c. limpiar.
- C-x r t cadena. Insertar la cadena indicada por parámetro.
- C-x r N. Inserta (como contenido) el número de línea, útil para hacer enumeraciones.
Edición y trabajo con texto
En Emacs se diferencian dos borrados <<erase>> borra de forma que los datos son irrecuperables y <<kill>> que sería el equivalente a cortar en muchos editores (los caracteres se borran pero quedan en el buffer <<kill-ring>>).
Borrar
- BACKSPACE. Borra el carácter anterior del cursor.
- C-d (delete-char) o también Supr. Borra el carácter bajo el cursor.
- C-x C-o. Borra siguientes línea en blanco.
Cortar
- C-w. (kill-region). Corta región o hasta inicio de línea.
- C-k. (kill-line). Corta desde el cursor a fin de línea, sin incluir el salto de línea.
- C-BACKSPACE. (backward-kill-word). Corta la palabra completa.
- C-SHIFT-BACKSPACE. Corta la línea completa.
- M-k. Corta oración.
- M-d. (kill-word). Corta palabra.
Puede ser útil la secuencia C-SPC marcar región con el cursor y C-w para borrarla.
Copiar, pegar y killring
- M-w. (kill-ring-save). Copiar Añade la región al <<kill-ring>> para que se pueda usar posteriormente.
- M-y. Recorre el <<kill-ring>>.
- C-y. Pegar.
Para copiar una línea al estilo yy de vi no hay definida ni una función ni un keybinding por defecto. Se podría hacer de varias formas c-a c-k c-k
o C-a C-SPC C-n M-w
Transponer
Toma el elemento anterior al cursor y lo transpone n unidades, siendo 1 por defecto.
- C-t. Transponer caracteres. C-3 c-t transpone el carácter anterior al cursor 3 posiciones.
- M-t. Transponer palabras.
- C-x C-t. transponer líneas.
Codificación de caracteres
- C-x c-m f. Cambia la codificación.
- C-x c-m c. Cambia la codificación y salvar o realizar otra acción.
- C-q. (quoted-insert). Inserta un carácter de control si no lo hace por defecto. Algunos caracteres de control C-j (salto de línea), C-l (salto de página).
- C-x 8 (caracter unicode). Introducir cualquier carácter unicode directamente.
Útil para introducir cualquier carácter arbitrariamente. Por ejemplo, cuando el sistema no está en español podemos introducir caracteres no anglosajones así:
c-x 8 'a -> á
c-x 8 'e -> é
c-x 8 'i -> í
c-x 8 'o -> ó
c-x 8 'u -> ú
c-x 8 ? -> ¿
c-x 8 '! -> ¡
Columnas
- M-x fci-mode: marca límite de columna.
- M-x fci-rule-column columna.
- M-x column-number-mode. Añade información del numero de columna al minibuffer.
Líneas
- M-x linum-mode. Añade el número de línea a cada una.
- M-x line-number-mode. Muestra en el modeline el número de línea en el que nos posicionamos .
- M-x what-line. Número de línea actual en minibuffer.
- C-x l. Número de líneas totales en el minibuffer.
Buscar y reemplazar
- C-S patrón. Buscar patrón hacia adelante en el texto.
- C-R patrón. Buscar patrón hacia atrás en el texto.
C-S y C-R Sin patrón repiten la búsqueda desde la última ocurrencia. Cuando comienza una búsqueda se actualiza la marca al punto previo del cursor.
- C-%. (replace-string). Reemplaza texto desde el cursor en adelante. Para reemplazar todo el texto, mover el cursor arriba, para reemplazar en un zona, establecer una región.
- M-l. Reemplazar la palabra a minusculas.
- M-u. Reemplazar la palabra a mayúsculas.
- M-C. Capitalizar palabra.
Eliminando saltos de línea C-x h M-% C-q C-j INTRO INTRO !
Macros de teclado
- F3 o C-x (. Iniciar grabación de macro.
- F4 o C-x ). Finalizar grabación de macro.
- F4 o C-x e. Ejecuta la macro. Para ejecutarla varias veces operador de repetición. Ejemplo ESC 12 F4, repite la macro 12 veces.
Conexiones remotas
Con Emacs se puede trabajar en hosts remotos sin X Window (normalmente serán servidores) de varias formas:
- Desde una conexión de consola ya establecida telnet o ssh, y ejecutando Emacs en el host remoto. Para forzar la ejecución de Emacs en modo consola existe la opción -nw. Si necesitamos instalarlo, el paquete emacs-nox es más ligero y no depende de X Window.
apt-get install emacs-nox
. - Conectarnos a un servidor desde nuestro Emacs en local como cliente, para esto hay varios modos pero tramp unifica casi todos los protocolos y viene instalado por defecto en las últimas versiones de Emacs.
C-x C-f /ssh:[usuario@]host[#puerto]:[fichero]
.
tramp ejecuta la Shell definida en la variable shell-file-name. Para recorrer el historial C-Up, C-Down.
Bookmarks
Los marcadores son un atajo y sirven para memorizar un destino. Son muy útiles para accesos a hosts remotos:
- C-x r m bookmark. Añadir el directorio de trabajo actual a un marcador (nombre de marcador opcional por parámetro). Si el marcador ya existía se sobrescribe.
- C-x r b. Ir a un marcador.
- C-x r l. lista todos los marcadores.
Administrar una instalación de Emacs
- M-x customize. Lanza un asistente que ayuda a personalizar nuestra instalación.
Fichero de configuración
Al iniciarse, emacs intenta abrir un fichero con un programa en lisp que se encuentra en /.emacs, /.emacs.el, o /.emacs.d/init.el. La variable user-init-file contiene el fichero que está usando una instancia emacs. (ver con C-h v).
Backups de ficheros
- backup-directory-alist. Gestionar directorio y forma en la que se realizan los backups.
Paquetes Emacs
Los paquetes Emacs llamados ELPA se pueden instalar desde un servidor repositorio. Por defecto el repositorio ELPA está configurado, aunque podemos añadir más.
- M-x list-packages. Lista los paquetes de los repositorios, desde esta opción se pueden instalar o desinstalar.
- M-x package-install. Instala paquete elpa.
Añadir repositorios de paquetes en .emacs (setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")("marmalade" . "https://marmalade-repo.org/packages/")("melpa" . "https://melpa.org/packages/")))
Servidor
Ejecutar Emacs como servidor presenta varias ventajas como que se inicia más rápido y se mantiene la sesión.
- emacs --daemon. Ejecuta el servidor como demonio desde la línea de comandos.
- emacsclient. Ejecuta el cliente desde el terminal. -c o --create-frame intentará abrir un frame gráfico.
- M-x server-start. Convierte la instancia abierta en un servidor, pero al cerrarla el servicio finaliza.
Podemos definir la variable EDITOR o crear un alias alias em="emacsclient -c".
Emacs en entorno Wintel
Particularidades que nos encontramos en una instalación de GNU/Emacs en sistemas Microsoft.
Servidor Emacs
La forma correcta de ejecutar Emacs es mediante un servidor Emacs. Preparar una tarea que inicie emacs.exe con el parámetro --daemon y asociar los ficheros de texto a emacsclientw.exe, en luagar a emacs.exe. Cada fichero que abarmos se hará en un buffer. Para ejecutar Emacs como servidor el directorio /.emacs.d/server tiene que ser propietario del usuario de la sesión. (cambiar en propiedades, pestaña seguridad, avanzado, pestaña propietario).
Tramp mode y ssh
En Windows no suele haber clientes ssh nativos. Instalar los clientes ssh y plink de putty. Añadir a la variable PATH, la ruta donde se instalaron los ejecutable de putty, ejemplo C:\Program Files\putty.
C-x C-f /plink:[usuario@]host[#puerto]:[fichero]
o
C-x C-f /pscp:[usuario@]host[#puerto]:[fichero]
Otra posibilidad que puede funcionar según la instalación. En .emacs agregamos (setq tramp-default-method "plink")
Fichero de configuración .emacs
El fichero de configuración .init.el se llama .emacs en entornos Microsoft. Un truco para encontrar nuestro .emacs es abrir C-x C-f ~/.emacs
y ya podemos ver la ruta. Por ejemplo en la última instalación se guardó en C:\Users\nombre\AppData\Roaming.
XKeymacs
Combinacines de teclas Emacs en otras aplicaciones en sistemas operativos Windows de Microsoft.
XKeymacs
Emacs como IDE
Java
- jdee
- emacs-eclim
- malabar-mode: pendiente probar.
Recursos de GNU/Emacs y Emacs Lisp
Wikis, manuales y howtos
Tutoriales, podcasts y screencasts
Blogs y páginas personales
Post de personas involucradas en la comunidad Emacs trucos, recetas, actualidad y noticias: