Visita guiada a Emacs
El Manual de GNU Emacs bautiza a Emacs como el editor extensible, personalizable, auto-documentado y que se muestra en tiempo real, pero esta descripción le dice poco a los principiantes acerca de lo que Emacs es capaz de hacer. Para proporcionar una idea más cabal, presentamos aquí un surtido de cosas que se pueden hacer con Emacs:
Además de ser capaz de editar ficheros de texto plano, Emacs incluye características especiales que ayudan a escribir en muchos idiomas humanos distintos y en lenguajes de programación/marcado:
|
…así como herramientas para la compilación, ejecución y prueba de programas. Emacs se integra con GDB para proporcionar un IDE (M-x gdb):
Emacs puede comparar dos ficheros y resaltar sus diferencias (M-x ediff):
Emacs es un administrador de ficheros (M-x dired):
Emacs puede leer las noticias, el correo, los canales RSS (M-x gnus):
Incluso se puede jugar al Tetris en Emacs (M-x tetris):
Ahora se puede entender por qué algunas personas consideran que Emacs no es meramente un editor de texto, sino casi un sistema operativo completo. Algunos usuarios piensan que pueden hacer casi todo su trabajo desde dentro de Emacs.
¿Por qué Emacs?
Emacs ayuda a la productividad proporcionando entornos integrados para muchos tipos distintos de tareas:
- Todos los comandos de edición básicos (y hay montones) están disponibles sin importar lo que se esté pretendiendo hacer: escribir código, leer un manual, usar una shell o componer un correo electrónico.
- Todas las herramientas que Emacs proporciona para la apertura, guardado, búsqueda y procesamiento de texto (y más) están disponibles sin importar lo que se esté haciendo.
Esta uniformidad significa que el trabajo desde Emacs es con frecuencia más sencillo que tener que aprender a usar cada programa por separado, especialmente cuando ese programa tiene su propio conjunto de capacidades de edición y atajos.
Si Emacs no funciona de la manera que el usuario desea, se puede usar el lenguaje Emacs Lisp (Elisp) para personalizar Emacs, automatizar tareas comunes o añadir características nuevas. Es muy fácil comenzar a usar Elisp y aún así es considerablemente poderoso: se lo puede usar para alterar y extender casi cualquier característica de Emacs. Se puede hacer que Emacs se convierta en lo que uno quiera con tan solo escribir código Emacs Lisp; una muestra de esto es el hecho de que todas las características reseñadas arriba (y muchas más que se describirán más adelante en este tour) están escritas en Elisp.
Emacs también es portable. Se puede usar el mismo editor (con la misma configuración) en GNU/Linux, Windows, Mac OS y muchas otras plataformas.
Antes de empezar…
Si se instala Emacs por primera vez, se pueden seguir los ejemplos presentados aquí. Cuando el lector se decida a empezar con el uso de Emacs, debería tomar la Tutoría de Emacs. Es una guía interactiva que familiarizará al lector con muchas cosas, que incluyen:
- El inicio y finalización de Emacs
- Los comandos básicos de movimiento y edición de texto
- La apertura y guardado de ficheros
- Los conceptos de Emacs: ventanas, marcos, ficheros y búferes
- La invocación de comandos a través de asociaciones de teclas y con M-x
Para ejecutar la Tutoría, se arranca Emacs y se teclea C-h t, esto es Ctrl-h seguido de una t.
Todas las características descritas en este tour funcionan en GNU Emacs 23. Algunas de las características descritas no se incluyeron en las versiones previas de Emacs, pero se pueden instalar por separado.
Ocasionalmente diremos cosas como esta:
Véase más información en (info "(emacs)Using Region").
Esto remite a una página en el manual de Emacs que se puede leer siguiendo el enlace. Pero también se pueden leer tales páginas directamente en Emacs empleando el lector integrado de documentación, llamado Info. Para hacerlo, se presiona M-: y después se escribe (info "(emacs)Using Region") seguido de RET:
El manual de Emacs es un recurso excelente para aprender acerca de este programa; se puede leer desde Emacs presionando C-h r. También se puede leer el manual en la web.
Emacs posee numerosas características de ayuda complementarias, algunas de las cuales se describirán más tarde. Se puede ver la lista de todas las posibilidades presionando C-h C-h.
El poder de la manipulación de texto
Emacs proporciona una gran colección de herramientas para la manipulación de texto, que lo convierte en una navaja multiusos de todo tipo porque Emacs también tiene vías para presentar toda suerte de información en el texto. Este es un ejemplo:
M-x dired invoca a Dired, el modo de administración de ficheros, en un directorio a elección del usuario. Entonces C-x C-q (o M-x wdired-change-to-wdired-mode) cambia al modo Editable Dired:
En este modo, el cambio de los nombres de los ficheros de la columna derecha y la posterior presión de C-x C-s ("guardar") renombra los ficheros indicados. Renombrar ficheros es tan fácil como editar texto. El renombrado por lotes (v.g., renombrar todos los ficheros que contengan icon_* a backup_icon_*) es tan fácil como realizar una búsqueda y reemplazo (M-x query-replace o M-%); no hay necesidad de aprender a usar una herramienta separada de renombrado por lotes.
Desde Emacs se puede interactuar no tan sólo con ficheros y directorios, sino con utilidades del sistema, compiladores, depuradores, gestores de información personal, la web, el correo electrónico, el chat, otros servicios diversos de internet y más; y existe todo un ecosistema de herramientas de terceras partes para hacer accesible incluso más funcionalidad. Debido a esta integración, los beneficios de aprender a usar cualesquier de las características de edición de Emacs (supongamos que la de búsqueda y reemplazo) tienen efectos multiplicadores.
Comandos de edición básicos
Una de las vías en que Emacs permite a los usuarios trabajar con rapidez y eficiencia es proporcionando comandos de alto nivel para moverse por y manipular el texto. Existen comandos que operan sobre los caracteres, las palabras, las líneas, las frases, los párrafos, las páginas, las definiciones de funciones, los espacios en blanco y más. Se pueden usar en cualquier sitio donde se esté leyendo o editando texto: código fuente, páginas web, intérpretes de comandos, listados de directorios, mensajes de correo, etc.
Movimiento a lo largo de los búferes
Los comandos más básicos de movimiento por el búfer mueven el punto (el cursor) por filas (líneas) o columnas (caracteres):
|
Ahora algunas maneras de moverse en torno a segmentos más largos:
|
Una vez habituado a estas teclas, son más rápidas que sus equivalentes en otras aplicaciones (Inicio, Fin, Ctrl+Izq, etc.) porque no hay que mover las manos de la posición de mecanografiado. Y estas teclas son con mucho más rápidas que usar un ratón para moverse en un búfer.
Emacs proporciona con frecuencia comandos suplementarios para moverse de manera específica al contexto (v.g. en el código fuente, los comandos para moverse a la siguiente o anterior definición de función).
Muchos de los comandos de arriba se mueven a una ubicación relativa a la posición del momento en el búfer, así que se pueden usar repetidamente (v.g. C-p C-p C-p para moverse hacia atrás tres líneas). Se puede usar el argumento prefijo para ahorrarse tiempo: C-u seguido de un número y un comando de movimiento repite el comando ese número dado de veces. También se puede usar M-[dígito] en vez de C-u [dígito]. Si se usa C-u sin especificar un dígito, el predeterminado será 4. La omisión del dígito puede ahorrar tiempo cuando no se conoce con precisión cuántas unidades hay que saltarse.
|
Se puede saltar a una línea en particular dentro del búfer:
M-g g | Salta a la línea especificada |
La búsqueda de texto es una manera útil de moverse en un búfer. Se puede pensar en la búsqueda como si fuera otra facilidad para el movimiento. Cuando se está buscando algo específico, se puede usar la búsqueda incremental para ir directamente allí en vez de tener que escanear las líneas o páginas. Después habrá más sobre las búsquedas.
C-s | Búsqueda incremental hacia adelante |
C-r | Búsqueda incremental hacia atrás |
Otra manera de moverse en los búferes es empleando la marca:
La Marca
Emacs recuerda algo denominado la marca, que es una posición previa del cursor. Se puede establecer la marca para indicar un sitio en particular en el búfer tal que se pueda regresar a él con facilidad. C-x C-x en un momento posterior hace regresar el punto a la marca. De hecho, el comando también mueve la marca a donde acababa de estar el punto; por tanto, un segundo C-x C-x devuelve el punto a su posición original.
C-SPC | Establece la marca en la posición del momento |
C-x C-x | Intercambia el punto y la marca |
Se puede establecer la marca de manera explícita, pero ciertos comandos lo hacen automáticamente, proporcionando bastiones convenientes según uno se mueve por el búfer:
Cuando el usuario… | la marca se pone en… |
Escribe C-SPC | la ubicación del momento |
Salta al principio o final del búfer (M-< o M->) | la ubicación previa |
Sale de la búsqueda incremental | donde se comenzó la búsqueda |
Pega texto | el comienzo de la región pegada |
Inserta un búfer o fichero | el comienzo del texto insertado |
Como se puede observar, Emacs intenta ser de utilidad: muchos comandos que tienen el potencial de llevar al usuario a un lugar distante, establecen la marca tal que un simple C-x C-x lo devuelve a donde estaba. Emacs dificulta perder la pista en el búfer: incluso si uno se toma una excursión, no hace falta deslizarse mucho para volver donde se estaba.
Emacs guarda muchos de los valores anteriores de la marca. Se puede rotar en el histórico de la marca, que contiene las últimas 16 marcas puestas en el búfer en uso:
C-u C-SPC | Rota a través del histórico de la marca |
La Región
La marca sirve a otro propósito: la marca y el punto juntos delimitan la región. Muchos comandos operan sólo sobre el texto de la región (e.d. entre la marca y el punto). Se puede establecer la región explícitamente poniendo la marca (C-SPC) y después moviendo el punto a otro sitio, o pulsando y arrastrando con el ratón. Emacs proporciona algunos comandos que establecen automáticamente la región moviendo el punto y la marca apropiadamente, por ejemplo:
C-x h | Hace que la región contenga al búfer entero ("Seleccionar todo") |
M-h | Hace que la región contenga el párrafo en curso |
Otros comandos ayudan estableciendo la región como parte de lo que se está haciendo. C-y (pegar), la inserción de ficheros y la inserción de búferes todos establecen la región para que abarque el texto insertado.
El Estrechamiento restringe la vista (y la edición) de un búfer a una cierta región. Esto es útil cuando se está trabajando tan sólo en una parte del búfer (v.g. un capítulo de un libro). Entonces los comandos como el de búsqueda incremental, o beginning-of-buffer o end-of-buffer no conducen fuera de la región de interés y los comandos como los de búsqueda y reemplazo no afectan a todo el fichero.
C-x n n | Estrecha el búfer a la región activa |
C-x n w | Restaura ("abre") el búfer |
Para más información véase (info "(emacs)Narrowing").
Corte de texto
Como en el caso del movimiento a través del texto, Emacs proporciona comandos para su eliminación en cantidades varias.
C-k corta la porción de la línea tras el punto (o elimina el salto de línea que sigue al punto si éste se encuentra al final de una línea). El argumento prefijo con C-k se puede usar para cortar múltiples líneas:
C-k | Corta la línea |
C-u 10 C-k | Corta 10 líneas |
Los comandos siguientes operan en la región y son los análogos más cercanos de "cortar" y "copiar" en Emacs:
C-w | Corta la región |
M-w | Guarda la región en el histórico de recortes sin borrarla ("copiar") |
Estos comandos también son útiles:
M-d | Corta la palabra siguiente |
M-k | Corta hasta el final de la frase |
Todos los comandos de arriba cortan el texto que se está eliminando, lo que significa que Emacs lo remueve y lo conserva en otro sitio para su posterior recuperación ("pegar"). La mayoría de los comandos que eliminan cantidades significativas de texto lo cortan en vez de simplemente eliminarlo, tal que se puedan usar esos comandos ya sea para "eliminar" texto o para "cortarlo" para su posterior uso.
Pegado de texto
Después de que una pieza de texto ha sido borrada, va a un lugar llamado el histórico de recortes que es análogo al "portapapeles": se puede pegar un elemento para restaurarlo desde el histórico de recortes con C-y. A diferencia del portapapeles, sin embargo, el histórico de recortes es capaz de albergar muchos elementos distintos. Si el elemento que se quiere pegar no se inserta cuando se presiona C-y, se escribe M-y (tantas veces como sea necesario) para rotar a través de los elementos cortados con anterioridad.
C-y | Pega el último texto cortado |
M-y | Reemplaza el texto pegado con el del anterior corte |
Recuerda la mayoría de los comandos que eliminan una buena porción de texto cortándolo (e.d. poniéndolo en el histórico de recortes) tal que se pueda restaurar más tarde. Emacs hace que sea muy difícil perder permanentemente grandes trozos de texto: en los editores que sólo tienen un portapapeles único, uno puede eliminar con facilidad y accidentalmente un fragmento largo de texto o destruir el contenido del portapapeles (cortando dos elementos sucesivamente). Pero en Emacs, en cualquiera de esos casos, el texto perdido puede recuperarse fácilmente desde el histórico de recortes.
Deshacer
La facilidad para deshacer de Emacs funciona de manera ligeramente distinta a la de otros editores. En la mayoría de ellos, si se deshace algún cambio, y entonces se hacen algunos cambios nuevos, ¡los estados accesibles anteriormente con "rehacer" ya no pueden recuperarse! Así que cuando se usa extensamente "deshacer" y "rehacer", uno tiene que ser muy cuidadoso para evitar la destrucción accidental de la lista de rehacer.
Emacs emplea un modelo diferente para deshacer que no posee esta deficiencia. Después de cualquier secuencia consecutiva de deshacer, Emacs hace que todas las acciones previas se puedan deshacer, incluyendo las propias operaciones de deshacer. (Esto ocurrirá siempre que una secuencia de deshacer se interrumpa por cualquier otro comando.)
Si esto suena complicado, recuérdese simplemente que "deshacer" siempre es capaz de regresar a cualquier estado previo en el que estuviera el búfer (a menos que Emacs haya desbordado la memoria de almacenamiento del historial de deshacer). Aquí, el concepto es que Emacs hace muy difícil que se pierda accidentalmente el trabajo.
El deshacer está disponible por medio de tres combinaciones de teclas distintas:
C-/ | Deshace |
C-_ | Deshace |
C-x u | Deshace |
Así que, si se necesita retroceder a un estado anterior del búfer, simplemente se mueve el cursor (interrumpiendo así cualquier secuencia existente de deshacer) y se presiona C-/ hasta que se alcance lo que se quiere.
Para aprender más acerca del deshacer, véase (info "(emacs)Undo").
Búsqueda incremental
C-s | Búsqueda incremental |
Al presionar C-s seguido de algún texto, se inicia la búsqueda incremental. Emacs salta a la siguiente presencia de lo que quiera que se haya escrito, en la medida en que se va escribiendo (se puede observar un comportamiento similar en Mozilla Firefox u otros navegadores web), y todas las coincidencias visibles en pantalla quedarán resaltadas.
Dentro de la búsqueda incremental, se puede presionar C-s de nuevo en cualquier momento para saltar a la siguiente coincidencia.
Cuando se localice lo que se está buscando, se puede teclear RET (o usar casi cualquier comando de movimiento) para salir de la búsqueda en la coincidencia que se haya encontrado, o C-g ("cancelar") para regresar a donde se comenzó la búsqueda. Si se finaliza la búsqueda en la coincidencia encontrada, se puede regresar fácilmente a donde se empezó con C-x C-x, ya que la búsqueda incremental pone la marca apropiadamente.
Los comandos siguientes ayudan a re-emitir las consultas empleadas anteriormente:
C-s C-s | Busca el elemento buscado por última vez |
C-s M-p | Elemento previo en el historial de búsquedas |
C-s M-n | Elemento siguiente en el historial de búsquedas |
C-h k C-s | Guía a más comandos disponibles en la búsqueda incremental |
Se puede hacer una búsqueda incremental hacia atrás con C-r. (Todos los comandos de arriba pueden activarse de manera similar para la búsqueda hacia atrás.) En cualquier momento durante una búsqueda hacia adelante (o hacia atrás), se puede teclear C-r (C-s) para intercambiar el sentido (adelante o atrás) de la búsqueda.
C-r | Búsqueda incremental hacia atrás |
Véase más información en (info "(emacs)Incremental Search").
Búsquedas y reemplazos
M-% | Reemplazo interactivo |
El comando de reemplazo interactivo pide una cadena de búsqueda y un reemplazo. Entonces, por cada coincidencia en el búfer, el usuario puede elegir si reemplaza la cadena de búsqueda. Estas son algunas de las opciones disponibles en cada indicador:
- Se presiona y para reemplazar la coincidencia del momento.
- Se presiona n para saltar a la siguiente coincidencia sin reemplazar esa en particular.
- Se presiona q para salir sin hacer más reemplazos.
- Se presiona . para reemplazar esa coincidencia y después salir.
- Se presiona ! para reemplazar todas las coincidencias restantes sin más preguntas.
Véase más información en (info "(emacs)Query Replace") acerca de estas (y otras) opciones. También se puede presionar ? en cualquier momento dentro de una operación de búsqueda y reemplazo para visualizar una guía.
Búsqueda mediante expresiones regulares
Emacs permite la búsqueda mediante expresiones regulares:
C-M-s | Búsqueda incremental con expresiones regulares |
Las expresiones regulares son una manera sucinta de buscar muchas cadenas distintas a la vez empleando un lenguaje especial para describir la forma de lo que se está buscando. La sintaxis de las expresiones regulares va más allá del alcance de esta visita guiada; véase la información de (info "(emacs)Regexps").
Si el lector es nuevo en el mundo de las expresiones regulares o está construyendo una expresión regular particularmente complicada, podrá usar el constructor de expresiones regulares (M-x re-builder). Este comando hace emerger una ventana separada en la que se puede probar la expresión regular con lo que cualquier coincidencia en el búfer original quedará resaltada según se edita la expresión regular.
En vez de saltar a través de las coincidencias de una en una, también se puede optar por mostrarlas todas a la vez. M-x occur pide una expresión regular y después muestra en un búfer separado la lista de todas las líneas del búfer en uso que concuerden con esa expresión regular (así como sus números de línea). Al pulsar en cualquiera de las coincidencias, irá a esa línea en el búfer.
Búsqueda y reemplazo con expresiones regulares
Las expresiones regulares son incluso más poderosas en la búsqueda y reemplazo, porque Emacs permite que el texto de reemplazo dependa del texto encontrado. Se puede controlar el reemplazo mediante la inserción de secuencias de escape especiales en la cadena de reemplazo, que Emacs sustituirá apropiadamente:
Cuando se escribe esto en una cadena de reemplazo: | Emacs lo reemplaza con: |
\& | el texto original encontrado |
\1, \2, etc. | el primer, segundo, etc. subgrupo entre paréntesis en el texto encontrado |
\# | la cantidad de reemplazos hechos hasta el momento |
\? | una cadena obtenida preguntándole al usuario en cada coincidencia |
\,(expresión-lisp …) | el resultado de evaluar una función dada |
Ahora un ejemplo. Supongamos que tenemos un búfer que contiene estos nombres:
Andrés Bello Ricardo Palma José Martí Agustín Millares Concepción Arenal
Si ejecutamos M-x replace-regexp y reemplazamos la expresión regular \(\w+\) \(\w+\) with \,(upcase \2), \1), nuestro búfer pasará a verse así:
BELLO, Andrés PALMA, Ricardo MARTÍ, José MILLARES, Agustín ARENAL, Concepción
Como se puede observar, el reemplazo mediante expresiones regulares es capaz de hacer algunas transformaciones bastante sofisticadas. (A grosso modo, la expresión busca dos palabras; la cadena de reemplazo inserta una versión en mayúsculas de la segunda palabra, seguida de una coma y seguida a su vez de la primera palabra.)
Macros de teclado
Las macros de teclado son una manera de recordar una secuencia fija de teclas para su posterior repetición. Son muy útiles para automatizar algunas tediosas tareas de edición.
F3 | Inicia la grabación de la macro |
F4 | Detiene la grabación de la macro |
F4 | Reproduce la macro una vez |
M-5 F4 | Reproduce la macro 5 veces |
M-0 F4 | Reproduce la macro una vez y otra hasta que falle |
Por ejemplo, esta secuencia de teclas hace exactamente la misma transformación que se hizo antes con el reemplazo mediante expresiones regulares, esto es transforma una línea que contenga George Washington en WASHINGTON, George:
M-d C-d M-u , [SPC] C-y C-n C-a
Después de grabar esa secuencia de teclas como macro, podemos escribir M-0 F4 para transformar el búfer dibujado anteriormente; en este caso, Emacs ejecuta la macro de manera repetida hasta que alcance el final del búfer.
Véase más información en (info "(emacs)Keyboard Macros").
Ayuda con los comandos
Si ha leído hasta aquí, el lector probablemente esté intimidado por la perspectiva de tener que recordar tantos comandos de teclado y nombres de comandos. Afortunadamente, Emacs incluye una documentación exhaustiva y de fácil acceso. La documentación no es tan sólo para principiantes. Emacs tiene miles de comandos, de los cuales la mayoría de las personas sólo usan una pequeña cantidad. Así que incluso los expertos en Emacs consultan con frecuencia los documentos en orden de aprender acerca de comandos nuevos o refrescar la memoria sobre los antiguos.
Cuando no se recuerda lo que hace una tecla o comando particulares, se puede leer su descripción empleando uno de los comandos siguientes:
- C-h k
- Muestra la documentación del comando asociado a una tecla en particular.
- C-h f
- Muestra la documentación de un comando en particular, por nombre (e.d. lo que se escribe después de M-x).
Por ejemplo, C-h k C-s y C-h f isearch-forward RET ambos muestran una ventana que describe la búsqueda incremental:
Esto es útil, por ejemplo, si no se recuerda lo que hace C-s, o si se recordara que invoca la búsqueda incremental, pero se quiere saber más acerca de la característica. La documentación proporciona el nombre completo del comando, muestra las teclas (si las hubiera) asociadas a él y proporciona una descripción completa de lo que hace.
Por otra parte, si no se recuerda cómo invocar una característica particular, se puede usar apropos para buscarla:
- C-h a
- Busca comandos por palabras clave o expresiones regulares
Por ejemplo, si recuerdo que quiero activar el estrechamiento (narrowing), pero no recuerdo cómo, puedo escribir C-h a narrow RET que mostrará una lista breve de comandos que tienen que ver con narrow, uno de los cuales es M-x narrow-to-region. [NdT: el usuario hispano-parlante, no obstante, tendría que recordar la palabra en inglés, pues aún no hay un método creado para la presentación en castellano. La creación de tales métodos es el objetivo principal de la página gnu.manticore.es]
Más características útiles
Integración con herramientas comunes
Emacs es notable por su integración con muchas herramientas comunes. No sólo es que se puedan invocar desde dentro del propio editor, sino que Emacs ayuda a usar su salida de manera más efectiva. Estos son algunos ejemplos:
- M-x shell
-
Inicia una shell en el búfer llamado *shell*, cambiando a él si ya existiera. Se emplea C-u M-x shell para usar un búfer de shell con distinto nombre.
- M-x compile
-
Invoca a make (con destinos y opciones a elección del usuario) y muestra la salida en un búfer nuevo. Emacs identifica las líneas de error que contienen nombres de ficheros y nombres de línea, y se puede pulsar facilmente sobre ellas para saltar directamente al búfer y línea correspondientes.
- M-x gdb
-
Invoca gdb en un búfer nuevo. Se puede usar la línea de comandos usual de gdb en ese búfer. Sin embargo, Emacs permite poner puntos de ruptura directamente desde los búferes de fuentes y muestra la ejecución marcando la línea activa de dichos búferes. Emacs también puede mostrar los puntos de ruptura, la pila y las locales simultáneamente y cada uno en su propia ventana.
- M-x grep
-
Invoca grep e imprime los resultados en un búfer nuevo. Como M-x compile, cuando se pulsa en una coincidencia, Emacs abre el fichero correcto y lleva al usuario a la línea concordante.
- M-x man
Muestra páginas man.
Este es un surtido de herramientas diversas:
M-x calculator | Una Calculadora simple. |
M-x calc | Una poderosísima Calculadora. |
M-x calendar | Un calendario. |
M-x phases-of-moon | Muestra los cuartos de la Luna próximos. |
Invocación de comandos de la shell
Si se necesita ejecutar un mandato simple en la shell, estos comandos pueden ahorrar el fastidio de tener que cambiar a una terminal de texto o una xterm o tener que empezar un nuevo búfer de la shell:
- M-x shell-command o M-!
Ejecuta un comando y muestra su salida en un búfer nuevo.
- M-x shell-command-on-region o M-|
Ejecuta un comando, entubando la región en curso como entrada; muestra la salida en un búfer nuevo.
En cualquiera de ellos, un prefijo C-u insertará la salida en el búfer en uso en vez de hacerlo en un búfer temporal.
Control de versiones
Emacs ayuda a manipular y editar los ficheros almacenados bajo el control de versiones. Emacs admite RCS, CVS, Subversion, bzr, git, hg, y otros sistemas, pero ofrece una interfaz uniforme, llamada VC, independientemente del sistema de control de versiones que se esté usando.
Emacs detecta automáticamente si un fichero en edición está bajo el control de versiones y muestra algo como esto en la línea de modo: CVS-1.14, para indicar el sistema de control de versiones en uso y la versión del momento.
M-x vc-next-action o C-x v v compulsa el fichero en uso (pidiendo un mensaje de registro) si se ha modificado. (Bajo los sistemas de control de versiones que requieren el bloqueo, este comando también activa el bloqueo.)
VC proporciona otros comandos para tareas relacionadas con el control de versiones:
- C-x v =
Muestra un diff con los cambios hechos al fichero en uso.
- C-x v ~
Pide al usuario un número de versión y muestra esa versión del fichero en uso en otra ventana.
- C-x v g
Muestra una versión anotada del fichero, mostrando, para cada línea, la compulsa donde esa línea fue cambiada por última vez y por quién. En cualquier línea se puede presionar L para ver el mensaje de registro para esa compulsa o D para ver las diff asociadas.
- C-x v l
Muestra un log de los cambios previos en el fichero. Cuando el punto esté en una entrada de log particular, se puede presionar d para ver las diff asociadas con ese cambio o f para ver esa versión del fichero.
Para más información, véase (info "(emacs)Version Control").
Hay algunas características especiales activas cuando se están buscando las diferencias (ya sea en un fichero o en uno producido por VC). Emacs permite moverse en torno a las diferencias por trozos o ficheros, aplicar fragmentos individuales a un fichero, revertir diferencias y hacer otras operaciones útiles para la lectura o la edición manual de las diferencias.
Más información en (info "(emacs)Diff Mode").
Edición remota de ficheros
Emacs puede editar ficheros remotos como si fueran locales empleando una característica llamada Tramp. Siempre que Emacs pide un fichero, se le puede indicar uno remoto así: /minombre@anfitrionremoto:/ruta/remota/al/fichero. Emacs obtiene el fichero mediante SSH, FTP u otro método y se cuida de guardarlo cuando se haya finalizado con él. Con Tramp se pueden editar ficheros existentes en computadoras distintas en una sola sesión de Emacs, incluso si Emacs no estuviera instalado en el lado remoto.
También se puede usar Tramp para editar ficheros locales con los permisos de otro usuario. Se pueden editar los ficheros con privilegios de root por medio de `sudo': /sudo::/etc/file o con `su': /root@localhost:/etc/file.
Más información en (info "(TRAMP)").
Emacs como servidor
A algunas personas les gusta mantener tan solo una instancia abierta de Emacs y editar en ella todos sus ficheros. Esto tiene algunas ventajas:
- Se puede cortar/pegar texto entre los búferes de la misma instancia de Emacs.
- Emacs recuerda los historiales de los argumentos (qué comandos se usaron, qué ficheros se abrieron, las palabras que se buscaron, etc.), pero sólo dentro de cada instancia.
- Si se tienen configuradas muchas personalizaciones, el arranque de instancias nuevas de Emacs es lento.
Lamentablemente, cuando se escribe emacs en una shell para editar un fichero (o cuando se invoca el $EDITOR con un programa externo), se inicia una instancia nueva de Emacs. Esto se puede evitar usando el emacsclient, que en su lugar abre un marco conectado a la instancia ya existente de Emacs:
- En la instancia existente de Emacs se escribe M-x server-start. También se puede añadir (server-start) al fichero .emacs para que se haga automáticamente en el inicio.
- Para editar un fichero se escribe emacsclient -t NOMBRE-FICHERO en el indicador de comandos. También se puede cambiar el $EDITOR a emacsclient -t si se están usando programas que invocan automáticamente $EDITOR. (emacsclient -t abre un marco nuevo en la terminal; como alternativa, emacsclient -c abre un nuevo marco X.)
- Cuando se finalice, se teclea C-x C-c, con lo que se cierra el marco.
Para más información, véase (info "(emacs)Emacs Server").
Cómo ser improductivo con Emacs
Emacs viene incluso con entretenimientos:
M-x tetris | Tetris |
M-x hanoi | El juego las Torres de Hanoi |
M-x doctor | El psicoterapeuta de Emacs |
Conceptos comunes de Emacs
Argumentos prefijos
Como se ha visto, en ocasiones los argumentos prefijos se usan para indicar repetición:
C-u 10 C-f | 10 caracteres hacia adelante |
C-u M-a | 4 frases hacia atrás |
También hemos visto un argumento prefijo empleado para modificar el comando siguiente (se ignora el argumento numérico, aunque se proporcione):
M-x shell | Crea o salta a un búfer llamado *shell* |
C-u M-x shell | Crea o salta a un búfer con una shell que lleve por nombre el especificado |
Si el lector se siente confundido, la documentación de cualquier comando (accesible con C-h f o C-h k) describe el efecto del argumento prefijo, si lo hubiera.
Más información en (info "(emacs)Arguments").
Modos mayores
Cada búfer tiene un modo mayor asociado, que altera ciertos comportamientos, asociaciones de teclas y visualización del texto en ese búfer. La idea es personalizar la apariencia y características disponibles basándose en el contenido del búfer.
Emacs se entrega con docenas de modos mayores para la edición de lenguajes de programación, lenguajes de marcado y formatos de ficheros de configuración de amplio uso. Estos modos mayores le dicen a Emacs cómo:
- Sangrar el código correctamente (lo normal es que baste presionar una sola vez TAB para que Emacs sangre correctamente la línea en curso).
- Resaltar la sintaxis
- Identificar los límites de las funciones
- Invocar intérpretes, compiladores o depuradores para el código.
Algunos comandos ya vistos, como M-x dired, M-x compile, y M-x shell, de hecho usan sus propios modos mayores especiales para conseguir que sus búferes proporcionen ciertas características (tales como el resaltado de los errores de compilación y hacerlos pulsables).
El modo mayor presente se visualiza en la línea de modo. En ella se verán uno o más elementos entre paréntesis, como (Python Narrow). El primero de ellos es el nombre del modo mayor.
Se pueden intercambiar los modos en un búfer empleando M-x y el nombre del modo:
M-x java-mode | Modo para la edición de ficheros Java |
M-x python-mode | Modo para la edición de ficheros Python |
M-x text-mode | Modo para la edición de ficheros de texto |
M-x fundamental-mode | Modo sin especialización |
Emacs es muy bueno a la hora de determinar el modo correcto cuando se abre un fichero, así que raramente hay que usar los comandos de arriba.
Los siguientes son ejemplos de comandos proporcionados por modos mayores de lenguajes:
Lenguaje | Algunos comandos especiales disponibles |
Lisp | Manipulación de s-expresiones de diversas maneras; ejecución de expresiones |
Python | Sangrado y desangrado de bloques; ejecución de código en la shell de Python |
HTML | Inserción y cierre de etiquetas; previsualización en un navegador |
En casi todos los casos, los modos mayores para formatos no reconocidos por la distribución oficial poseen paquetes de extensión en algún sitio. Se pueden encontrar muchos de ellos en EmacsWiki.
Para más información, (info "(emacs)Major Modes") for more information.
Modos menores
Cada búfer también puede tener cualquier número de modos menores, que son piezas de funcionalidad extra que se puede activar, independientemente de las restantes y del modo mayor. Los modos menores se listan en la línea de modo después del modo mayor, entre paréntesis. Estos son algunos de los más comunes:
- M-x auto-fill-mode
Ajusta las líneas automáticamente cuando superan un número dado de caracteres (por ejemplo, 70).
- M-x flyspell-mode
Resalta las palabras mal escritas según se teclean.
- M-x follow-mode
-
Si se tiene un búfer visible en dos ventanas paralelas, el follow-mode las fuerza a que se deslicen juntas tal que el texto mostrado en la segunda ventana sea el que vaya justo después del de la primera, y el movimiento del punto más allá de la parte inferior de la ventana izquierda provoca que aparezca en la parte superior de la derecha:
Algunos modos menores son globales, e.d. afectan al comportamiento de todo el editor, en vez de tan sólo el de un búfer específico.
M-x icomplete-mode | Muestra los completados según se escribe |
M-x iswitchb-mode | Muestra todos los nombres de los búferes cuando se cambia de búfer con C-x b |
Más información en (info "(emacs)Minor Modes").
Si se precisa de ayuda con un modo en particular, C-h m describe los modos mayor y menores activos. La descripción de los modos con frecuencia lista comandos importantes que son de utilidad en ese modo, lo que es muy interesante cuando se está aprendiendo a usar un modo nuevo.
El minibúfer
El minibúfer (el espacio en la zona inferior del marco) es donde Emacs pide entrada al usuario en la mayoría de las situaciones: el nombre de un comando, cuando se teclea M-x; el de un fichero, cuando M-x find-file; una expresión en Elisp, cuando se hace M-x eval-expression, etc. Las siguientes son algunas características comunes a la mayoría de los indicadores del minibúfer:
- Se pueden usar la mayoría de los comandos de edición y movimiento. Es posible moverse a través del texto, cortarlo y pegar texto en los minibúferes.
- Se pueden explorar entradas anteriores al tipo de indicador de ese momento usando M-p y M-n.
- El completado mediante tabulación está disponible con frecuencia. Por ejemplo, el indicador M-x ofrece completado con el tabulador, así que no hay que preocuparse de tener que escribir nombres de comandos largos como M-x wdired-change-to-wdired-mode cuando M-x wdired-ch TAB es suficiente.
Consejos para los principiantes
En el caso de emergencias…
Esto es lo que hay que hacer si se presiona accidentalmente una tecla equivocada:
- Si se ejecutó un comando y Emacs ha modificado el búfer, se usa C-/ para deshacer ese cambio.
- Si se presionó una tecla prefijo (v.g. C-x) o se invocó un comando que está pidiendo se le suministre entrada (v.g. Find file: …), se presiona C-g, repetidas veces si fuera necesario, para cancelar.
C-g también cancela las operaciones de larga ejecución si Emacs aparentemente se ha congelado.
Configuración del teclado y de la terminal
Algunos usuarios de Emacs remapean su tecla de Bloqueo de Mayúsculas para que actúe como una tecla Control adicional, porque es más fácil de alcanzar. Véanse las instrucciones para mover la tecla Ctrl.
A causa del teclado o de la configuración de la terminal, el usuario puede descubrir que algunas teclas parecen hacer cosas no esperadas:
Si la tecla DEL no borra (a veces la presión de la tecla DEL brinda una pantalla de ayuda, como si se hubiera tecleado C-h), pruébese con M-x normal-erase-is-backspace-mode.
Si la tecla Meta no funciona cuando se intenta escribir una combinación que la contenga, se puede presionar en su lugar ESC y después las teclas restantes. Por ejemplo, ESC x es lo mismo que M-x y ESC C-s es lo mismo que C-M-s.
Preguntas frecuentes
Emacs viene con unas FAQ que explican cómo realizar muchas tareas comunes; se presiona C-h C-f para leerlas. [NdT: actualmente esto conduce a las FAQ en inglés, pues aún no han sido traducidas al español. Dicha traducción también está programada en el sitio de Emacs en español].
Migración a Emacs
Emacs posee una cierta cantidad de opciones para facilitar la transición desde otros entornos de edición.
Emacs para usuarios de Windows
En Windows, la flor y nata de los comandos de edición son C-z, C-x, C-c y C-v. En Emacs estas teclas se usan de manera predeterminada para otros propósitos (suspender, teclas prefijos y página siguiente). Se puede hacer que esas teclas hagan Deshacer, Cortar, Copiar y Pegar activando el modo "CUA" en el menú Options. El modo CUA también permite hacer selecciones empleando la tecla Mayúsculas en combinación de las teclas de movimiento, como se haría en Windows.
Como C-x y C-c están tan integradas en el funcionamiento de Emacs (son las teclas prefijo de muchos comandos), el modo CUA sólo asocia C-x y C-c a Cortar y Copiar, respectivamente, cuando se haya seleccionado algún texto.
Se puede saber más acerca del modo CUA escribiendo C-h f cua-mode RET.
Emacs para usuarios de vi/vim
Viper (M-x viper-mode) es un conjunto de modos para la emulación del comportamiento de edición de vi en Emacs. Proporciona diferentes niveles de conformidad con vi, dependiendo de cuánto quiera el usuario que Emacs se parezca a vi.
Más información acerca de Viper en (info "(viper)").
Recursos para Emacs
En español
El Manual de GNU Emacs (C-h r) es la guía definitiva si se quiere aprender mucho más acerca de este programa. Algunas de sus características poseen un manual propio y separado (C-h i d).
En español, la lista de correo emacs-es.
En general, el sitio web Emacs en español para usuarios finales está centrado en el mundo de Emacs en español.
En inglés
El Manual de GNU Emacs (C-h r) es la guía definitiva si se quiere aprender mucho más acerca de este programa. Algunas de sus extensiones poseen un manual propio y separado (C-h i d).
Las FAQ de GNU Emacs (C-h C-f) responden muchas cuestiones que los principiantes tienen acerca de cómo funciona Emacs y cómo configurarlo para hacer cosas particulares.
EmacsWiki contiene información acerca de muchas extensiones descargables para Emacs, así como consejos de uso y de personalización del programa. Hay algunas páginas en español.
En inglés, se pueden hacer preguntas en la lista de correo help-gnu-emacs.