====== Emacs ====== ===== ¿Qué es Emacs? ===== **//vi//** y sus clones son editores muy funcionales y poderosos. Sin embargo, a menudo no se consideran particularmente extensibles. **//vim//** es un sucesor exitoso y poderoso de **//vi//** que contradice esta tendencia, siendo a la vez extremadamente extensible y ligero. Sin embargo, muchos usuarios prefieren un editor más //"pesado"// y extensible. Esta es la razón por la que muchas personas (incluido el autor de este capítulo) prefieren **//Emacs//**. Emacs eleva la extensibilidad a la enésima potencia. Aparte de un núcleo de C, el resto de **//Emacs//** está escrito en un variante de **//Lisp//**, casi toda la cual es accesible, de modo que usted puede configurarlo o incluso extenderlo a voluntad (muchos buenos tutoriales de Emacs Lisp se pueden encontrar en Internet). La gente ha escrito todo tipo de extensiones en Emacs Lisp, desde el resaltado de sintaxis para un oscuro lenguaje, a un terminal incorporado. De hecho, hay incluso un modo de emulación **//vi//** dentro de **//Emacs//** (llamado viper), así que usted todavía puede obtener el modo de edición que viene con vi, mientras que dispone de toda la potencia del núcleo de **//Emacs//**. Como con **//vi//**, hay muchas variantes de **//Emacs//** (llamadas //"emacsen"//). Sin embargo, el más usado (y el único en Slackware) es el Emacs de GNU. Cuando la gente hace referencia a //"Emacs"// directamente, casi siempre se refieren el Emacs de GNU. A diferencia de **//vi//**, **//Emacs//** Opera más bien como un editor tradicional por defecto. Esto significa que la mayoría de los accesos directos del teclado se pueden realizar sin tener que cambiar de modo repetidamente. Puede abrir un archivo y empezar a escribir sin tener que aprender lo que hacen los modos, u olvidarse de cuál de ellos está usando actualmente. ===== Iniciando ===== **//Emacs//** se puede iniciar simplemente ejecutando el comando **//emacs//** en la terminal. Cuando se inicia por primera vez en una consola sin argumentos, se ve algo parecido a esto: {{ :es:slackbook:emacs-startup.png?400 |}} Si está en las ventanas X, **//Emacs//** puede iniciar una GUI en vez de ejecutarse en la consola. Si este es el caso y no desea una GUI, puede invocarlo con la opción //'-nw'//. Una vez aquí, puede moverse usando las teclas de dirección. Los elementos subrayados son enlaces, y se pueden activar moviéndose encima y pulsanso Intro. La documentación mencionada es muy buena, y puede ayudarle a orientarse si tiene algún problema. Advierta también cómo se describen las secuencias de teclas como C-h, significando pulsar la tecla 'h' mientras se aprieta la tecla 'CTRL'. Ocurre lo mismo con **M-`**, que significa mantener pulsada la tecla **Meta** (normalmente 'Alt') y pulsar la tecla del acento reverso '`'. Cuando se dice por ejemplo C-x C-c, significa pulsar la tecla 'x' mientras se mantiene apretada la tecla 'CTRL', y entonces pulsar la tecla 'c' mientras también se mantiene apretada la tecla 'CTRL'. Convenientemente, este es también uno de los comandos más importantes en **//Emacs//**: cerrarlo. Alternativamente, si llama a **//emacs///** con un nombre de archivo como argumento, abrirá ese archivo, igual que **//vi//**. Al hacer esto, se le presentará el contenido del archivo en cuestión. Aquí, usted puede navegar por el documento con las teclas de flecha tradicionales y teclear información a voluntad sin ningún problema. Digamos que hace algunas modificaciones y ahora quiere guardar el archivo. La siguiente secuencia de teclas lo hará: C-xC-s. Si ha creado un nuevo archivo, se le pedirá que lo haga en lo que se denomina //"minibuffer"//, la línea en blanco debajo de la línea gris en la parte inferior de la pantalla. Escriba el nombre del archivo de su elección, luego presione 'Enter'. Si no quiere guardar el archivo, puede presionar C-g, que abortará las operaciones pendientes de entrada de datos. Tenga en cuenta que la compleción de nombres por la tecla tab está normalmente disponible para las operaciones que utilizan el minibuffer. Si desea abrir un archivo nuevo dentro de su sesión actual de **//Emacs//**, teclee C-xC-f. Se le pedirá un nombre de archivo en el minibuffer. **//Emacs//** no se preocupa de si existe o no. Si no existe, se creará un nuevo buffer para él (el archivo se creará cuando se guarde con C-xC-s), o se abrirá como se espera. Sin embargo, ¡el archivo antiguo estará abierto aún! puede volver a él usando C-xC-b, entrando en el nombre del archivo (o, más técnicamente, el nombre del buffer), y entonces pulsando 'Intro'. ===== Cómo Moverse ===== Como **//vi//**, **//Emacs//** también es más antiguo que las flechas en el teclado. Además, como en **//vi//**, usar las teclas de flechas para navegar también es compatible. Mientras que las teclas de movimiento **//vi//** son más ergonómicas, las de **//Emacs//** son más bien "mnemotécnicas". Sin embargo, aún así es muy posible operar con los atajos de teclado principales de **//Emacs//** rápida y eficientemente. Aquí hay una tabla con los principales atajos de teclado para el movimiento: **El Movimiento del cursor de Emacs** ^Comando^Resultado| |C-f|Mueve el cursor un carácter a la derecha (forward)| |C-b|Mueve el cursor un carácter a la izquierda (backward)| |C-n|Mueve el cursor una línea abajo (next)| |C-p|Mueve el cursor una línea arriba (previous)| Por supuesto, al igual que con **//vi//** es posible repetir estos comandos con un argumento numérico. Si teclea **M-1** **M-0** C-p, o C-u 10 C-p, el cursor se moverá diez líneas arriba. Si teclea **M-5** C-f o C-u 5 C-f, el cursor se moverá cinco caracteres a la derecha. ===== Consiguiendo ayuda ===== **//Emacs//** contiene una gran cantidad de documentación, hasta el punto de que a menudo se le llama el editor //"auto-documentado"//. Esto se debe a que facilita mecanismos para proporcionar a los usuarios documentación mientras están usándolo. He aquí algunas funciones útiles que muestran documentación (todas empiezan con C-h): **Accediendo a la Documentación de Emacs** ^Comando^Resultado| |C-h f NOMBRE-FUNCIÓN Intro|Muestra la documentación para la función NOMBRE-FUNCIÓN| |C-h k C-x C-c|Muestra la documentación para la función enlazada con las teclas C-x C-c| |C-h t|Muestra el tutorial de Emacs| |C-h ?|Muestra todas las funciones relacionadas con la ayuda| C-h **t** es especialmente útil si necesita ayuda o práctica con **//Emacs//**. ===== Llamando Funciones ===== Como se ha indicado anteriormente, **//Emacs//** exporta un gran número de funciones para uso interactivo. Algunas de estas, como las que abren y guardan archivos, se asignan a las teclas. Otras (como las que se utilizan para trasladarse al principio y al final de las líneas) no lo son. Para llamarlas, hay que invocarlas. Digamos que desea llamar la función //"end-of-line"//. Haríamos esto: **M-x** end-of-line Intro Y el cursor se movería al final de la línea, como sugiere el nombre de la función. =====Accesos de teclado===== Si bien Emacs puede ser sencillo de usar, su alcance puede ser fácilmente abrumador. A continuación se muestran algunos comandos útiles de Emacs. Algunos aspectos se han simplificado , sobre todo en lo que se refiere a la selección de texto. Estos conceptos, y más, se describen en el manual de **//Emacs//**, y varios manuales en línea. También se pueden obtener resúmenes decentes de las búsquedas de la web. **Accesos de teclado** ^Comando^Resultado| |C-f |Mueve el cursor un carácter a la derecha (forward)| |C-b |Mueve el cursor un carácter a la izquierda (backward)| |C-n |Mueve el cursor una línea abajo (next)| |C-p |Mueve el cursor una línea arriba (previous)| |C-h 'f' NOMBRE-FUNCIÓN Intro |Muestra la documentación para la función NOMBRE-FUNCIÓN| |C-h 'k' C-x C-c |Muestra la documentación para la función ligada a las teclas C-x C-c| |C-h t |Muestra el tutorial de Emacs| |C-h ? |Muestra las funciones relacionadas con al ayuda| |M-'`' |Accede a la Barra de Menú| |C-g |Cancela la operación actual. Esto es especialmente útil en el Minibuffer.| |M-x NOMBRE-FUNCIÓN Intro |Llama a la función interactiva NOMBRE-FUNCIÓN| |M-1 M-0 C-n |Mueve el cursor diez líneas abajo| |C-u 10 C-n |Mueve el cursor diez líneas abajo (lo mismo que arriba)| |M-'x' beginning-of-line |Mueve el cursor al comienzo de la actual línea| |M-'x' end-of-line |Mueve el cursor al final de la actual línea| |M-'>' |Mueve el cursor al final del buffer| |M-'<' |Mueve el cursor al inicio del buffer| |C-k |Borra el texto desde el cursor hasta el final de la línea y lo sitúa en el kill ring| |C-espacio |Entra en el modo selección (use las taclas normales de movimiento). Pulse C-espacio de nuevo para salir.| |C-w |Estando en el modo selección, borra la región seleccionada, y almacena el resultado en el kill ring| |M-w |Estando en el modo selección, almacena la región seleccionada en el kill ring.| |C-y |"Yank" (pega) el contenido del kill ring y lo sitúa en la localización del cursor| |C-/ |Deshace la acción anterior. A diferencia de la mayoría de los otros editores, esto incluye anteriores acciones de deshacer.| |insert |Activa o desactiva la sobreescritura de caracteres| |C-s asdf Intro |Búsqueda incremental hacia delante de la cadena "asdf". Repetir C-s tantas veces como sea necesario para buscar futuros elementos, o C-r (abajo) para buscar hacia atrás.| |C-r asdf Intro |Búsqueda incremental hacia atrás de la cadena "asdf". Repetir C-r tantas veces como sea necesario para buscar futuros elementos, o C-s (arriba) para buscar hacia delante.| |M-'%' antiguo Intro nuevo Intro |Busca cada ejemplo de "antiguo" y le ofrece cambiarlo por lo "nuevo". Puede forzar el cambio de todos los elementos tecleando '!' en la entrada de la sustitución.| |C-x C-c |Sale de Emacs, ofreciendo guardar cada buffer antes de hacerlo| |C-x C-s |Guarda el buffer actual a su archivo| |C-x C-w nuevo-archivo.txt Intro |Guarda el buffer actual a un archivo //"nuevo-archivo.txt"//| ====== Navegación de capítulos ====== **Capítulo anterior: [[es:slackbook:vi|vi]]** **Capítulo siguiente: [[es:slackbook:network|Redes]]** ====== Fuentes ====== * Fuente original: [[http://www.slackbook.org/beta]] \\ * Escrito originalmente por Alan Hicks, Chris Lumens, David Cantrell, Logan Johnson * Traducido por [[wiki:user:pedro.herrero | Pedro Herrero García]] {{tag>slackbook emacs text_editor}}