Está en la página 1de 19

Introduccin a Emacs o

Carlos Linares Lpez o Octubre, 2006

Resumen Este cap tulo describe el funcionamiento bsico del editor de textos Emacs. a Actualmente se distribuye la versin 21.4, que ya es estable. Todos los comandos o que se describen en las secciones que siguen, funcionarn en esta versin y se espera a o que en las futuras, puesto que GNU se esfuerza constantemente en mantener dentro de l mites razonables, la compatibilidad con las versiones anteriores.

1.
1.1.

Introduccin o
Qu s? ee

GNU Emacs es un editor avanzado, auto documentado, personalizable y ampliable. Con GNU Emacs, es posible editar varios cheros simultneamente, abrir varias vena tanas del mismo documento, denir macros de teclado, deshacer cambios y mucho ms. a Adems, tabula automticamente programas en lenguajes como C, Lisp, Pascal, y otros a a muchos. Tambin ofrece facilidades para leer y escribir correo electrnico y crea copias e o de seguridad. El ncleo de Emacs est escrito en C e incluye un intrprete de Lisp. Adems, como u a e a la mayor de los comandos de edicin estn escritos en Lisp, es posible crear nuevos a o a comandos en medio de una sesin de trabajo para ser utilizados inmediatamente. o

1.2.

Para qu sirve? e

A diferencia de cualquier editor de textos en cualquier sistema operativo, Emacs sirve para mucho ms que editar cheros. a Emacs intentar deducir el tipo de chero a partir de su extensin o de una indicaa o cin expl o cita que se coloca en la primera l nea. Si la deduccin no fue correcta, se puede o indicar desde la misma l nea de comandos. Gracias a este comportamiento, Emacs puede tabular automticamente el cdigo fuente que se teclea cada vez que se pulsa RET a o (retorno) e incluso ofrecer comandos adicionales para ajustarse a las necesidades de la edicin que se est llevando a cabo. o a 1

As por ejemplo, es posible utilizar el mismo entorno para programar en C, en , A HTML, escribir un art culo (con L TEX), o, de hecho, este documento. Adems, Emacs es GNU1 y muchos voluntarios en el mundo se esfuerzan en ama pliarlo. Gracias a ellos, es posible depurar programas desde Emacs, compilarlos, realizar un control de versiones, mandar correo electrnico, hacer telnet, o acceder a Internet a o travs de un browser denominado W3. e Evidentemente, la funcionalidad de Emacs es tan amplia que resultar inutil ina tentar explicar exhaustivamente todas sus posibilidades en pocas pginas, por ello, se a recomienda leer el manual original de Emacs, as como consultar, cada vez que se necesite, la ayuda en l nea que se ofrece desde www.gnu.org Sin embargo, estas pginas deber ser una descripcin suciente para el manejo a an o de Emacs y se espera que el lector, en poco tiempo, aprenda a utilizarlo. Sin embargo, slo se puede aprender practicando, por ello, ensaye todo lo que aqu aprenda. o

1.3.

Cmo funciona? o

Tal y como ya se ha dicho, Emacs es un editor de textos puesto que permite cargar cheros y modicarlos despus, para ser guardados de nuevo. e Est auto-documentado puesto que existen comandos para ofrecer informacin a o a propsito de cualquier cuestin. o o Es adaptable y extensible en la medida en que es muy fcil escribir cdigo Lisp a o para implementar nuevas funcionalidades o modicar las que ya existen. Adems, dispoa ne de comandos que pueden introducirse en la misma sesin y que sirven para especicar o la asociacin entre determinadas combinaciones de teclas y los comandos de edicin. o o Antes de entrar en la descripcin de Emacs se presenta, brevemente, la nomenclao tura que se seguir para la descripcin de las teclas y sus combinaciones. a o Emacs utiliza, prcticamente, todas las combinaciones del teclado, desde los caraca teres alfanumricos y numricos, hasta los cdigos especiales: Control, Meta, Retorno e e o y Tabulador, as como la barra espaciadora que puede tener diferentes propsitos. Para o facilitar la brevedad en la exposicin, cada una de estas teclas se indica con una sola o letra o con un nombre corto en vez de escribirlo entero. Dichas abreviaturas se muestran en la tabla 1. El resto de las teclas se indican con su nombre. La tecla Meta se identica, en las consolas de Sun con un rombo () y, en los teclados convencionales, como el de un PC, es la tecla Alt. Por otra parte, si se desea combinar la tecla Meta con la tecla de maysculas, tal vez sea necesario utilizar Escape (Esc) u antes de pulsar maysculas. u Las combinaciones de teclas se indican separando con guiones cada una de ellas. As , por ejemplo, M-> indica que se deben pulsar simultneamente las teclas Meta y >. a
1

GNU signica GNUs not Unix.

Control Meta Retorno Tabulador Espacio Suprimir

C M RET TAB SPC DEL

Cuadro 1: Abreviaturas de teclado Adems, en ocasiones ser necesario pulsar diferentes combinaciones para lograr un a a propsito determinado. En tal caso, cada una de las combinaciones se separan de un o espacio en blanco. Por ejemplo, C-u 1 8 C-x v representa la pulsacin simultnea de las o a teclas Control y u primero. Luego, el 1, el 8, Control y x al mismo tiempo y nalmente v. Por ultimo, porque con frecuencia la conguracin de los teclados en mquinas di o a ferentes puede deparar grandes sorpresas, todos los comandos incluyen el nombre de la funcin Lisp que invocan. Por ello, si no es posible reproducir una secuencia concreta o de teclas, puede ejecutarse el comando con M-x comando. En las siguientes secciones se presentan las maneras y modos de realizar acciones en Emacs que son comunes en muchos editores de texto. Cuanto ms avance, ms a a aprender y descubrir que se pueden hacer cosas con Emacs que resultan impensables a a en la gran mayor por no decir la absoluta totalidad de los editores. a

2.

La pantalla

Emacs organiza la pantalla en diferentes reas que se denominan ventanas indea pendientemente de que est en un entorno grco o de texto. La ventana ms grande e a a es aquella en la que se realizar la edicin de cheros. El elemento ms importante de a o a una ventana es el punto. Adems, deben distinguirse otras dos zonas que se denominan l a nea de estado y minibuer.

2.1.

El punto

Durante una sesin de edicin con Emacs, el cursor muestra aquella posicin del o o o buer donde se aplicar el siguiente comando. A dicha posicin se la denomina punto. a o Aunque no es posible presentar varios cursores en la pantalla, en caso de que tenga varios buers abiertos, cada chero tiene su propio punto. Cuando el cursor pasa de un buer a otro, se posiciona all donde se qued el punto. Evidentemente, el buer en uso o ser aqul en el que est activo el cursor. a e e La tabla 2 muestra los comandos para mover el cursor (o punto). 3

Direccin o

Descripcin o

Comando Lisp

Teclas

Hacia delante

Hacia detrs a

Avanzar un carcter a Avanzar una palabra Avanzar una l nea Ir a f de l n nea Ir a f de prrafo n a Avanzar una pgina a Ir a nal del documento Retroceder un carcter a Retroceder una palabra Retroceder una l nea Ir a principio de l nea Ir a inicio de prrafo a Retroceder una pgina a Ir a inicio del documento

forward-char forward-word next-line end-of-line forward-paragraph scroll-up end-of-buffer backward-char backward-word previous-line beginning-of-line backward-paragraph scroll-down beginning-of-buffer

C-f M-f C-n C-e M-} C-v M-> C-b M-b C-p C-a M-{ M-v M->

Cuadro 2: Comandos para mover el punto Adems, como es lgico, tambin se puede avanzar o retroceder una posicin con las a o e o teclas del cursor y respectivamente. Anlogamente, se puede avanzar o retroceder a una l nea con y . Por ultimo, tambin se puede avanzar o retroceder una pgina con e a las teclas de avance y retroceso de pgina. a

2.2.

L nea de estado

La l nea de estado es la penltima la del editor y, probablemente, est resaltada en u a video inverso. Dicha l nea consiste en los siguientes caracteres: -- ch - Emacs: buf (mayor menor ) ---- pos -----donde: ch puede ser: ** Si se ha modicado el texto desde que se recuper el chero. o -- Si no se ha modicado el texto actual o no se ha editado ningn chero. u % % Si el chero es de solo lectura. buf es el nombre del buer que est siendo actualmente editado. Los buers se a presentan en la seccin 3.6. o mayor es el modo mayor utilizado actualmente. Los modos mayores se explican en la seccin 3.11. o menor es una lista de los modos menores elegidos para la edicin del chero actual. o 4

pos indica la posicin del cursor en el chero. Si el cursor est al principio, o a ser Top; si est al nal, Bot; si se est viendo el chero entero, All; y, en a a a cualquier otro caso, el tanto por ciento del chero que est por encima del cursor. a

2.3.

Minibuer

El minibuer es la ultima l nea de la ventana. Esta l nea est dedicada a: a Realizar un eco de los comandos tecleados. Por ejemplo, al pulsar C-x 4 C-o para visulizar un buer en otra ventana, el minibuer ir mostrando toda la combinaa cin. o Introducir argumentos para la ejecucin de los comandos que los requieran. Por o ejemplo, al ejecutar M-x query-replace, para buscar y sustituir algunas cadenas del buer actual, Emacs preguntar qu cadena hay que buscar y por cual se a e reemplazar. Segn se teclean los argumentos, se van mostrando en el minibuer. a u Para ofrecer informacin sobre el estado de ejecucin de algn comando. As por o o u , ejemplo, al pulsar C-g en cualquier momento, Emacs escribir en el minibufa fer Quit indicando que, sea cual fuere la tarea que se estaba realizando, ha sido abortada.

3.

Comandos de edicin bsicos o a


Esta es sin ningn lugar a dudas, la seccin ms importante de este cap u o a tulo.

La mayor parte de los comandos que se describen a continuacin estn presentes en la o a tarjeta de referencia rpida. Para una mayor comprensin de sus funciones y diferencias, a o se han organizado temticamente, tal y como se muestra a continuacin. a o

3.1.

Ejecutar Emacs

En una sesin Unix, basta con hacer: o % emacs donde % es el prompt de la shell (en csh o tcsh, ste es el prompt normal, pero en e bash o sh, podr ser $). a Cuando Emacs se ejecuta, pueden cargarse en memoria librer funciones, combias, naciones de teclas, . . . Esto es muy util para: primero, personalizar el entorno; segundo, para instalar paquetes como, por ejemplo, el editor de pginas HTML, html-helpera mode. Para disponer de toda esta funcionalidad, es necesario tener algunos conocimientos de Lisp a n de poder modicar el chero de inicializacin .emacs. Sin embargo, o 5

la descripcin y utilidad de este chero va mucho ms all de los objetivos de este o a a documento y por ello no se presentar su utilizacin. a o Una vez que Emacs ha arrancado, la pantalla completa presenta un unico buer denominado *scratch*. Ms adelante se explicar como trabajar con l. Por ahora, solo a a e es necesario saber que ste es el buer genrico dedicado a trabajos que se realizan por e e primera vez.

3.2.

Abandonar Emacs

En cualquiera de los sistemas operativos Unix existen dos maneras diferentes de salir de Emacs:

Suspender la ejecucin de Emacs (suspend-emacs). C-z o Produce una salida al sistema operativo, pero con Emacs ejecutando en background. Salir de Emacs (save-buffers-kill-emacs). C-x C-c Si se hace, Emacs es desalojado de memoria y se retorna al sistema operativo. Si no se modicaron algunos buers, se pedir conrmacin para salvarlos y, si no se a o salvan, para salir.

3.3.

Ficheros

Emacs puede, como cualquier otro editor de textos, leer cheros, salvarlos, copiar los contenidos de uno en otro, etc. Los comandos que se reeren al tratamiento de cheros se muestran en la tabla 3.

3.4.

Recuperacin de errores o

Uno de los comandos ms socorridos de Emacs es, sin ningn lugar a dudas, C-g a u (keyboard-quit). Esta combinacin aborta el comando en ejecucin. o o Cuando se desea deshacer el efecto de un comando no deseado (bien porque no se tecle correctamente la combinacin pensada, bien porque el resultado de una funcin o o o invocada no ha sido el esperado), C-x u o, equivalentemente, C- (advertised-undo), deshacen dichos cambios. Por ultimo, en algunas ocasiones puede suceder que la pantalla se llene de basura o, en cualquier caso, de caracteres que emborronan las ventanas de Emacs. En tal caso C-l (recenter) redibuja la pantalla y actualiza todos sus contenidos 6

Funcin o

Comando Lisp

Teclas

Leer un chero

find-file

C-x C-f

Salvar un chero

save-buffer

C-x C-s

Insertar un chero

insert-file

C-x C-i

Reemplazar el chero

find-alternate-file

C-x C-v

Escribir en otro chero

write-file

C-x C-w

Descripcin o Lee el chero que se indique como argumento y lo carga en el buer activo. Graba el chero cargado en el buer activo. Si el buer tiene nombre, se graba con ese mismo nombre, en otro caso por ejemplo, si se trata del buer *scratch*, Emacs pedir un nombre de a chero. Lee el chero que se indique como argumento en el minibuer y lo inserta en la posicin o actual del punto. Reemplaza el chero editado en el buer actual, con aqul que e se entregue como parmetro a travs del a e minibuer. Escribe los contenidos del buer actual en un chero distinto del que est asignado al bufa fer. El nombre del chero donde se realiza la escritura se indica a travs del minibuer. e

Cuadro 3: Comandos para el tratamiento de cheros

3.5.

Marcar

Emacs mantiene en memoria un anillo de marcas, esto es, una lista de posiciones que apuntan a diferentes lugares de un mismo buer. De esta manera, es posible ir de un lugar a otro muy rpidamente o, por ejemplo, marcar determinadas posiciones que, a con algn inters espec u e co, se desean recordar. Para poder acceder a este tipo de facilidades desconocidas en la gran mayor de a los editores, es necesario, en primer lugar, aprender a marcar. Una marca se establece all donde se pulsa C-SPC o, tambin C-@ (set-mark-command). e Como ya se indic, el punto es la posicin ocoupada por el cursor. Por lo tanto, se o o denomina regin al rea que hay entre la marca y el punto (en cualquier orden). El o a concepto de regin es, como se ver, vital en Emacs. o a Con C-x C-x (exchange-point-and-mark), la ultima marca grabada y el punto intercambian sus posiciones. Este comando es muy util cuando, por ejemplo, se desea estudiar otra parte del chero, distinta de la que se est editando, antes de seguir. Para a hacerlo, se marca el punto actual; a continuacin se accede a esa otra posicin de inters o o e y, para volver, basta con hacer C-x C-x: Emacs recuerda donde se hab quedado la a ultima marca y lleva el punto hasta all esto es, el cursor. , Para utilizar el anillo de marcas con todas sus posibilidades, se dispone de C-u C-SPC o, equivalentemente, C-u C-@. Dicho comando va recorriendo todo el anillo posicionando el cursor en cada una de las marcas almacenadas.

3.6.

Buers

Hasta ahora, buer era un trmino que se asociaba, sin prdida de generalidad, e e tanto a chero como a ventana. Esto es as en la medida en que cada chero que se edita requiere una ventana nueva y cada ventana puede entenderse como un buer. Sin embargo, si se abre varias veces el mismo chero, esta asociacin puede resultar confusa. o As mismo, esta equivalencia resulta engaosa si se modican varios cheros sin dividir n la pantalla. Las diferencias entre los trminos, aunque sutiles, son signicativas: e Ventana. Se trata de aquella posicin de la pantalla que se dedica a la edicin o o de un chero. Por ejemplo, gracias al comando C-x 2, la pantalla (esto es, todo el espacio dedicado a Emacs) se divide en dos ventanas. Ventana es un concepto, del todo, f sico. Fichero. Puede entenderse que un chero es aquella parte de informacin guardao da en un dispositivo de almacenamiento, como un disco duro. En Emacs, chero tiene el mismo signicado que para el sistema operativo. Buer. Se dice que el texto que est siendo editado reside en un objeto denomia nado buer. Se trata de un concepto lgico. o 8

Para que se comprendan mejor los trminos presentados, supngase que se desean e o editar varios cheros que se encuentran en el mismo directorio. Por ejemplo: gnu.texi, makele, gnu.ps y gnu.info. Si para ello se sigue la secuencia de comandos (sin las comas, por supuesto): C-x C-f gnu.texi, C-x C-f makefile, C-x 2, C-x C-f gnu.ps, C-x 2, C-x C-f gnu.info y, supuesto que no se ha hecho ninguna otra modicacin, se o tiene que: Cuando se C-x 2 por primera vez, se tienen dos ventanas, cada una de las cuales ocupa la mitad de la pantalla. Adems, ya se han cargado dos cheros: gnu.texi y a makele. Sin embargo, hay tres buers: gnu.texi, makele y *scratch*. A continuacin se carga el chero gnu.ps. Al hacerlo, se tienen tres cheros los o dos anteriores y el nuevo y cuatro buers. Finalmente, se vuelve a dividir una de las ventanas y se carga el chero gnu.info. Con lo que se tiene un chero ms, as como un nuevo buer y una nueva ventana. a En total, cuatro cheros, cinco buers y tres ventanas. Para conocer el nombre de cada uno de los buers que se estn editando simultneaa a mente, se dispone del comando C-x C-b (list-buffers). Este comando abre otra ventana, con un nuevo buer, donde presenta los nombres de todos los buers en l neas separadas, as como las caracter sticas de cada uno de los cheros que se estn editando, a por ejemplo: MR Buffer -- -----. emacs.tex gnu.tex portada.tex *scratch* * *Messages* % *Completions* Size ---46076 4150 2028 0 2236 455 Mode File ------LaTeX ~/latex/gnu/emacs.tex LaTeX ~/latex/gnu/gnu.tex LaTeX ~/latex/gnu/portada.tex Lisp Interaction Fundamental Completion List

El orden y signicado de cada uno de los campos que se muestran es el siguiente: MR puede valer: * Buer modicado. % Buer de solo lectura. . Buer actual. Buer Nombre del buer. Si se editan cheros, el nombre del buer y el del chero coincidirn. Si se estn realizando otras tareas, como por ejemplo, pedir ayuda a a o acceder al sistema de informacin, el buer tendr un nombre espec o a co (en el ejemplo, *scratch*, *Messages* y *Completions*). 9

Direccin o

Descripcin o

Comando Lisp

Teclas

Hacia delante

Hacia detrs a

Carcter a Hasta el n Hasta el n Hasta el n Carcter a Hasta el n Hasta el n Hasta el n

de palabra de l nea de prrafo a de palabra de l nea de prrafo a

delete-char kill-word kill-line kill-sentence delete-backward-char backward-kill-word kill-line backward-kill-sentence

C-d M-d C-k ESC k DEL M-DEL M-0 C-k C-k DEL

Cuadro 4: Comandos para cortar texto Size Tamao del buer. n Mode Modo mayor de edicin. Consltese la seccin 3.11. o u o File Si lo hubiera, chero asociado con el buer indicado en la misma l nea.

Para poder ir de un buer a otro, se utiliza C-x b (switch-to-buffer). El comando es efectivo introduciendo en el minibuer el nombre del buer que se desea visitar. Para hacer las cosas ms cmodas, Emacs recuerda el ultimo buer visitado antes que ste a o e y presenta, por defecto, ese nombre en parntesis. Para acpetar la opcin por defecto e o basta con pulsar RET.

3.7.

Copiar y cortar

Las funciones de copiar y cortar son indispensables en cualquier editor. En Emacs, estas funciones son, con mucha diferencia, mucho ms ricas. a

3.7.1.

Cortar

Los comandos para cortar pedazos de texto se muestran en la tabla 4. Adems a de los que se presentan ah una regin entera se corta con C-w (completion-kill, o region), es decir, borra la zona comprendida entre el punto y la ultima marca. Hay adems, otras modalidades: de expresiones, sentencias completas, etc. Sin ema bargo, su explicacin va ms all de la intencin de este pequeo manual. o a a o n Emacs mantiene en memoria una zona denominada anillo de borrado donde se almacenan hasta un nmero prejado de elementos (t u picamente 16). Por ello, si se hace C-w y se repite el comando ms tarde, ambas componentes borradas se almacenan en a memoria y no ocurre, como en la mayor de los editores, donde el segundo elemento a reemplazar al primero. a 10

3.7.2.

Copiar y pegar

La funcin pegar consiste en insertar en un punto concreto de cualquier buer un o texto que fue previamente borrado. Por lo tanto, primero ser necesario ejecutar alguno a de los comandos presentados en la seccin anterior, para poder acceder a stos. o e Para pegar se utiliza la combinacin C-y (yank), con la que se recupera la ultima o componente borrada (palabra, l nea, prrafo, . . . ) y se pega en la posicin indicada por a o el punto. Esto es, se recupera la primera posicin del anillo de borrado y se inserta. o La funcin de copiar se distingue de la de pegar en que no es necesario eliminar o una parte de texto antes. En su lugar, M-w (kill-ring-save), simula el borrado de texto escribiendo la regin seleccionada en el anillo de borrado, pero sin eliminarlo o del buer. La primera posicin del anillo de borrado se accede con C-y tal y como ya se ha o indicado. Las siguientes, con M-y (yank-pop) justo a continuacin de un C-y. o La utilidad del anillo de borrado es de gran utilidad para las tareas de copiar y pegar vol menes de cualquier tama o2 en cualquier parte. Por ejemplo, si el buer u n contiene: Grupo de Planificacin y Aprendizaje o Departamento de Informtica a Universidad Carlos III de Madrid Espa~a n y se graba, primero, la segunda l nea en el anillo de borrado (poniendo el cursor en la l nea 2, C-a, C-SPC, C-e y M-w) y, despus, la ultima l e nea, el anillo de borrado contendr: a Espa~a n Departamento de Informtica a Para insertar Departamento de Informtica es suciente hacer, primero, C-y con a lo que en el buer se tiene (supuesto que el cursor est ahora en la ultima l a nea): Grupo de Planificacin y Aprendizaje o Departamento de Informtica a Universidad Carlos III de Madrid Espa~a n Espa~a n
2 De cualquier tamao! De hecho, que el tamao no sea una restriccin severa en la realizacin de n n o o tareas informticas, es uno de los principios fundamentales de diseo de software GNU. a n

11

Elemento

Comando Lisp

Teclas

point-to-register Punto point-to-register copy-to-register Regin o insert-register

C-x / r C-x j r C-x x r C-x g r

Descripcin o Almacenar el punto en el registro r. Ir a la posicin almaceo nada en el registro r. Salvar la regin en el o registro r. Insertar la regin alo macenada en el registro r.

Cuadro 5: Comandos para el tratamiento de registros y, sin mover el punto, M-y, con lo que se reemplaza la ultima l nea por el siguiente contenido del anillo de borrado:

Grupo de Planificacin y Aprendizaje o Departamento de Informtica a Universidad Carlos III de Madrid Espa~a n Departamento de Informtica a

3.8.

Registros

Los registros son otra de las facilidades de Emacs. Adems del anillo de borrado y del anillo de marcas, se dispone de otras zonas a de memoria, denominadas registros donde se puede almacenar prcticamente cualquier a cosa, desde el punto o una sola letra hasta documentos completos pasando por prrafos, a rectngulos (secciones de texto que no tienen por qu empezar en la primera columna a e y que comprenden un nmero cualquiera de las), etc. u Desde el punto de vista prctico, un registro sirve para almacenar y recuperar el a punto, una regin o un rectngulo. El ultimo elemento no ser tratado por exceder los o a a objetivos de este pequeo manual. Los comandos disponibles para el tratamiento de n registros se muestran en la tabla 5. El valor del registro r es un ndice a toda la estructura de registros. Cuando se escribe un valor en un registro o se lee de l, es necesario indicar su valor. Dicho valor e es, simplemente, un carcter. As por ejemplo, el registro l puede contener un punto, a , el registro 3 un bloque de informacin, etc. o Para especicar el valor de r se utiliza el minibuer. 12

Direccin o

Comando Lisp

Teclas

Hacia delante Hacia detrs a

isearch-forward isearch-backward

C-s C-r

Cuadro 6: Comandos de bsqueda u

3.9.

Bsqueda y reemplazamiento u

Aunque las posibilidades de la bsqueda y el reemplazamiento especialmente la u primera, son en Emacs excepcionales, aqu slo se expondrn los comandos t o a picos en cualquier editor de textos. Sin embargo, antes de continuar, conviene destacar el hecho de que Emacs puede buscar en un solo buer o en varios de ellos incluso si no han sido cargados y son solamente cheros en el disco duro, incluso expresiones regulares. Puesto que el reemplazamiento se suele asociar a una bsqueda que se realiza en u primer lugar para despus practicar la sustitucin, se introducir, primero, la bsqueda e o a u sin reemplazamiento y despus se ver como practicar la sustitucin. e a o Un forma de bsqueda muy util, especialmente cuando se desarrollan grandes prou yectos de Software son los denominados Tags. Ms adelante se describir su funcioa a namiento. 3.9.1. B squeda sin reemplazamiento u

La bsqueda puede realizarse bidireccionalmente, esto es, hacia delante o hacia u detrs, tal y como se muestra en la tabla 6. a Cuando se pulsa cualquiera de los comandos de bsqueda indicados, el minibuer u presenta el mensaje Isearch:, invitando a introducir la cadena que se desea buscar. Segn se pulsan teclas hasta completar la cadena deseada, puede observarse como el u punto se desplaza desde la posicin actual hacia delante/detrs en busca de los caracteres o a que hasta el momento hayan sido introducidos por el minibuer. Si al introducir un nuevo carcter, la cadena introducida ya no existiera, Emacs emitir un sonido de a a alerta advirtindolo. e Una vez que se ha encontrado una ocurrencia de la bsqueda seleccionada, es neu cesario pulsar RET para salir del modo de bsqueda. Antes de nalizar, se inserta, auu tomticamente, una marca en la posicin actual del punto (cursor). a o Por supuesto, el carcter DEL sigue teniendo sentido durante este proceso. Su efecto a consiste en borrar el ultimo carcter introducido en el minibuer. Al hacerlo, tal vez el a punto se mueva en direccin opuesta a la del proceso de bsqueda hasta la ocurrencia o u anterior. Si durante la bsqueda se pulsa C-g, el proceso se interrumpe y el punto vuelve a u donde estaba originalmente. 13

3.9.2.

B squeda con reemplazamiento u

La bsqueda con reemplazamiento se realiza con M- % (query-replace). u Una vez que se entra en el modo de reemplazamiento, primero es necesario indicar en el minibuer, la cadena que se desea reemplazar, y luego, la nueva cadena. Por cada una de las ocurrencias de la cadena que se desea sustituir, el punto se sita u sobre ella y el minibuer presenta el mensaje: Query replacing cadena original with cadena nal: (? for help). Entonces, se dispone de los siguientes comandos: SPC (o y). Reemplaza la cadena apuntada por el cursor por la nueva cadena y mueve el cursor hasta la siguiente ocurrencia pidiendo, de nuevo, conrmacin. o RET (o q). Abandona el modo de bsqueda con reemplazamiento. u , (coma). Reemplaza la cadena apuntada por el cursor pero no mueve el punto. C-r Entra en el modo de edicin del que se sale con C-M-c. o El modo de edicin ofrece la iliusin de que no se est en el modo de bsqueda o o a u con reemplazamiento y se se puede acceder a los comandos de edicin de Emacs. o Cuando se sale de l, se vuelve de nuevo al modo de bsqueda. e u C-w Borra la ocurrencia marcada por el punto y entra en el modo de edicin. Se sale o del modo de edicin con C-M-c. o ! Sustituye el resto de las ocurrencias sin pedir conrmacin. o Mueve el punto a la ocurrencia anterior.

3.10.

Ayuda

En la presentacin de Emacs se indic que estaba auto-documentado. Pues bien, o o el sistema de ayuda es tan ecaz que, de hecho, contiene el manual completo de Emacs y much simo ms. a No slo eso, sino que adems su manejo est tan bien documentado que basta con o a a hacer C-h y seguir las instrucciones que saldrn en el minibuer para acceder a toda a la funcionalidad del sistema de ayuda. Entre otras cosas, merece la pena destacar C-h t (help-with-tutorial), que ofrece un tutorial del manejo de Emacs para usuarios recin llegados. e Las opciones ms signicativas son las siguientes: a C-h a (command-apropos). Modo de bsqueda de las funciones de edicin imu o plementadas. Una vez que se ha introducido este comando, puede indicarse en el minibuer una expresin regular para la bsqueda de funciones de edicin. Por ejemplo, si se teclea o u o 14

C-h a string, Emacs presenta en pantalla aquellas funciones que incluyen, en su nombre, la palabra string y una pequea descripcin de su comportamiento, n o as como la combinacin de teclas (si la hubiera) que invoca dicha funcin. o o C-h c (describe-key-briefly). Muestra la funcin que ejecuta una determinada o combinacin de teclas. o C-h f (describe-function). Describe la funcin que se indica a travs del mio e nibuer. C-h m (describe-mode). Informa sobre los comandos propios del modo mayor de edicin actual (consltese la seccin 3.11). o u o C-h l (view-lossage). Presenta las ultimas 100 pulsaciones de tecla. Si las teclas pulsadas no son cdigos de control, las representa por su carcter. o a En otro caso, utiliza los caracteres indicados en la tabla 1. Las combinaciones simultneas de teclas se muestran con un guin. a o Este comando es de much sima utilidad cuando, en una sesin de trabajo normal, o de pronto ha ocurrido algo inesperado. Pulsando C-h l puede saberse la combinacin o sucesin de teclas que produjo dicha accin y, adems, aprender algo o o o a a nuevo en Emacs. Por ultimo, la cantidad de posibilidades que existen en el sistema de ayuda son muchas. Para verlas, debe utilizarse C-h C-h (help-for-help).

3.11.

Modos mayores

Emacs dispone de diferentes modos mayores, cada uno de los cuales caracteriza el comportamiento del buer. El modo por defecto es Fundamental. De hecho, *scratch* est en modo Fundamental a mientras no se indique lo contrario. La mayor de los comandos que se presentan en este manual se comportan igual a en cualquier modo mayor. Sin embargo, las teclas TAB y DEL alterarn fcilmente su a a funcionalidad. Por ejemplo, si en el modo mayor de Lisp se pulsa TAB, el punto avanza una cantidad proporcional de espacios a la anidacin de la funcin que actualmente se o o est escribiendo y que se corresponde con la diferencia de parntesis abiertos menos a e aquellos que estn cerrados. Pero en C, aunque TAB es bsicamente lo mismo, avanzar un a a a nmero de espacios diferentes en el caso de estar dentro de un comando switch, por u ejemplo, que si est en un for. Otras diferencias, son relativas al uso de colores. Por a ejemplo, el buer actual no se colorear de la misma manera (M-x font-lock-mode a activa/desactiva el color) en el modo mayor de Lisp que en el de Java, o cualquier otro. Emacs asume que el modo mayor puede deducirse de la extensin del chero que o se est editando. As por ejemplo, si un chero tiene extensin .f, ser tratado en el a , o a modo mayor de Fortran; si el chero tiene extensin .texi, en el modo mayor Texinfo, o con extensin .perl se emplear el modo mayor de Perl, etc. o a 15

Sin embargo, se puede forzar la seleccin del modo mayor de una de estas dos maneo ras: una, mediante alguno de los comandos M-x modo-mayor, por ejemplo, M-x lispmode fuerza el modo Lisp, M-x pascal-mode, el modo mayor Pascal, etc.; segundo, mediante una indicacin expl o cita en cualquier posicin de la primera l o nea del chero que se carga. Esta indicacin expl o cita consiste en colocar el modo mayor entre -*-. As , por ejemplo, si un chero contiene en su primera l nea:

/* -*- C -*- */ ser tratado en el modo de C3 . Ntese que el modo mayor se ha colocado dentro de un a o comentario de C, o de lo contrario, al compilar este chero habr un error. a Por ultimo, para conocer los comandos nuevos o aquellos que han modicado su comportamiento en el modo mayor actual, se puede utilizar C-h m (describe-mode).

3.12.

Tags

Los tags son otra de las caracter sticas ms sobresalientes de Emacs. Mientras que a prcticamente todos los editores disponen de comandos de bsqueda que, dicho sea de a u paso, son normalmente mucho menos capaces, Emacs ofrece la posibilidad de buscar a travs de varios cheros una cadena en concreto. e Mientras que en Emacs es posible trabajar con la llamada barra rpida (speeda bar ) haciendo M-x speedbar para gestionar manualmente el acceso a varios cheros, una tabla de tags consiste en un chero que contiene punteros a las posiciones de una coleccin de cheros donde estn las cadenas de texto ms sobresalientes. Por ejemplo, o a a en C, las declaraciones de funciones y procedimientos, deniciones de tipos, constantes, etc. En Lisp, la declaracin de funciones, parmetros o variables especiales, macros, etc. o a Para poder hacerlo, es necesario disponer del comando etags que se distribuye siempre con Emacs. El formato es: etags [opciones] tabla tags chero y las opciones ms relevantes son: a -o nombre fichero. Indica el nombre del chero en el que se escribir la tabla a de tags. -a. Aade a la tabla de tags seleccionada, los que se deduzcan de otro chero de n cdigo. o
3 Otra forma de conseguir lo mismo es empleando las denominadas variables locales (locals) que, sin embargo, no se explicarn en este documento. a

16

Por otra parte, chero es aqul que se desea examinar para obtener sus tags ms e a relevantes y que sern inclu a dos en tabla tags. Supngase, por ejemplo, que se est desarrollando un proyecto con once cdigos fueno a o te diferentes en C: types.h, defs.h, cursor.h, cursor.c, port.h, port.c, screen.h, screen.c, console.h, console.c y application.c. La siguiente sucesin de comandos crear una tabla o a llamada application.tags que ser utilizada como se ver ms tarde. a a a

etags etags etags etags etags etags etags etags etags etags etags

-o -a -a -a -a -a -a -a -a -a -a

application.tags types.h -o application.tags defs.h -o application.tags cursor.h -o application.tags cursor.c -o application.tags port.h -o application.tags port.c -o application.tags screen.h -o application.tags screen.c -o application.tags console.h -o application.tags console.c -o application.tags application.c

Una vez que el chero application.tags ya ha sido creado4 puede ejecutar el comando M-x visit-tags-table, desde Emacs. Dicho comando sirve para solicitar a Emacs que lea una tabla de tags en concreto, cuyo nombre deber teclearse por el minibuer a (en este caso, application.tags). Si ya se ha cargado la tabla de tags, ni siquiera es necesario cargar los once cheros de fuente para buscar, por ejemplo, una funcin llamada print-page que se encuentra o en port.h y en port.c. Para ello, basta con pulsar M-. (find-tag) y, a continuacin, o introducir print-page por el minibuer. Emacs cargar, automticamente, el chero a a port.h primero, y llevar el punto a la primera ocurrencia de print-page (probablemente a all donde se deni el prototipo de la funcin). Obviamente, este proceso es mucho ms o o a rpido, incluso que emplear la barra rpida (recurso habitualmente presente en tantos a a editores) puesto que entonces es necesario saber dnde buscar, mientras que gracias a o los tags, no lo es en absoluto. Ahora bien, si se desean realizar bsquedas de un tag para sustitu u rlo, se debe utilizar M-x tags-query-replace y proceder de forma anloga a la sustitucin normal. a o En cualquier caso, tanto si se realizan sustituciones como si no, es posible avanzar a la siguiente ocurrencia con M-,. Por ultimo, es posible realizar bsquedas de expresiones regulares mediante C-x t, u sin embargo, las expresiones regulares van ms all de las intenciones de este manual y a a su estudio se deja al lector interesado.
4 De hecho, si piensa utilizar Emacs para desarrollar un proyecto que involucra varios cheros, es altamente recomendable que automatice estas operaciones con GNU Make.

17

3.13.

Macros

Las macros de teclado o simplemente macros, son una facilidad que sirve para asignar a un nombre una sucesin de comandos, de tal modo que, invocndola, se o a ejecutan automticamente todos los pasos. a Para denir una macro, se utiliza C-x ( (start-kbd-macro). A continuacin, se o introducen los comandos de la macro y, por ultimo, se cierra con C-x ) (end-kbd macro). Durante el tiempo que dura la grabacin, el modo menor presentar Def. o a Por ejemplo, imag nese que deseamos crear una macro que sirva para dividir la ventana actual en dos partes, llevar el punto a la ventana recin creada, y all cambiar e 5 . Los siguientes comandos denen la macro (se incluyen tambin los al buer *scratch* e comandos para la apertura y cierre de la grabacin de la macro): o

C-x C-x C-x C-x C-x

( 2 o b )

Obsrvese que si se decide utilizar una macro, ser porque ser usada con frecuencia. e a a En tal caso, basta con aadir C-x ( y C-x ) a la primera ejecucin. Desde entonces, las n o siguientes invocaciones y ejecuciones sern mucho ms rpidas. a a a Una vez que ha sido grabada, para ejecutar una macro basta con hacer C-x e (calllast-kbd-macro), que ejecuta la ultima macro denida. Ahora bien, al programar varias macros ser indispensable dar un nombre a cada una, a a n de diferenciarlas y no perderlas. Para ello, debe utilizarse M-x name-last-kbd-macro. Por ejemplo, la macro recin creada podr bautizarse con open-clipboard. e a Para nalizar el ejemplo, resulta muy aconsejable programar una segunda funcin o que sirve para cerrar el *scratch* y volver de nuevo al buer de trabajo. Para ello, podr a denirse una segunda macro con:

C-x ( RET -----------------------------RET C-x 0 C-x )


Esta macro es de utilidad para manejar un rea reservada en la que se pueden realizar anotaciones a mientras trabaja en otro buer. Adems, *scratch* es un buer como cualquier otro, por lo que all se a dispone de todos los comandos de Emacs. En otros editores, el clipboard es una zona tan especial, como poco socorrida, por lo que no se utiliza demasiado.
5

18

Las deniciones de macros son globales a toda la sesin. En tal caso, la secuencia o anterior puede introducirse mientras el *scratch* es el buer actual (que es lo ms a recomendable) o no. En cualquier caso, una vez grabada, puede invocarse desde cualquier buer. Esta funcin se denominar close-clipboard con M-x name-last-kbd-macro o a close-clipboard. Realice un par de pruebas. Ejecute M-x open-clipboard. Si no utiliz el *scratch* o hasta ahora, deber estar vac Escriba lo que quiera y cuando haya acabado ejecute a o. M-x close-clipboard. Seguramente su mquina habr ejecutado la macro tan rpidaa a a mente que ni siquiera habr podido ver la l a nea de guiones. Asegrese y ejecute C-x u b *scratch*. Ahora podr ver como despus de sus comentarios aparece una l a e nea de guiones y el punto est al principio de una nueva l a nea, lista para recibir el siguiente apunte.

19

También podría gustarte