.. _17: 17 Comandos para Corregir Errores Tipográficos ============================================== En este capítulo describimos comandos que resultan útiles cuando se detecta un error durante la edición. El más básico de estos comandos es el comando deshacer :kbd:`Ctrl`-:kbd:`/` ``C-/`` (también vinculado a :kbd:`Ctrl`-:kbd:`x` :kbd:`u` (``C-x u``) y :kbd:`Ctrl`-:kbd:`_` (``C-_``)). Esta orden deshace un único comando, o parte de èl (como en el caso de ``query-replace``), o varias inserciones consecutivas de caracteres. Las repeticiones consecutivas de ``C-/`` deshacen cambios anteriores cada vez, hasta el límite de la información de deshacer disponible. Aparte de los comandos descritos aquí, puede borrar texto usando comandos de borrado como ``DEL`` (``delete-backward-char``). Estos se describieron anteriormente en este manual. Véase :ref:`8.3`. .. _17.1: 17.1 Deshacer ------------- El comando *deshacer* anula los cambios recientes en el texto del búfer. Cada búfer registra los cambios individualmente, y el comando deshacer siempre se aplica al búfer actual. Puede deshacer todos los cambios en un búfer hasta donde lleguen los registros del búfer. Normalmente, cada comando de edición hace una entrada separada en los registros de deshacer, pero algunos comandos como ``query-replace`` dividen sus cambios en múltiples entradas para mayor flexibilidad a la hora de deshacer. Los comandos de inserción de caracteres consecutivos suelen agruparse en un único registro de deshacer, para que deshacer sea menos tedioso. | :kbd:`Ctrl`-:kbd:`/` (``C-/``) | :kbd:`Ctrl`-:kbd:`x` :kbd:`u` (``C-x u``) | :kbd:`Ctrl`-:kbd:`_` (``C-_``) Deshace una entrada en los registros de deshacer (``undo``) del búfer actual. Para empezar a deshacer, teclee :kbd:`Ctrl`-:kbd:`/` (``C-/``) (o sus alias, :kbd:`Ctrl`-:kbd:`_` (``C-_``) o :kbd:`Ctrl`-:kbd:`x` :kbd:`u` (``C-x u``)) [6]_. Esto deshace el cambio más reciente en el buffer, y mueve el punto de vuelta a donde estaba antes de ese cambio. Las repeticiones consecutivas de ``C-/`` (o sus alias) deshacen cambios cada vez más anteriores en el búfer actual. Si ya se han deshecho todos los cambios registrados, el comando deshacer indica un error. Cualquier comando que no sea de deshacer rompe la secuencia de comandos de deshacer. A partir de ese momento, toda la secuencia de comandos de deshacer que acaba de realizar se colocan a su vez en el registro de deshacer. Por lo tanto, para volver a aplicar los cambios que ha deshecho, escriba :kbd:`Ctrl`-:kbd:`f` (``C-f``) o cualquier otro comando que rompa inofensivamente la secuencia de deshacer; a continuación, escriba :kbd:`Ctrl`-:kbd:`/` (``C-/``) una o más veces para deshacer algunos de los comandos de deshacer. Alternativamente, si desea reanudar el deshacer, sin rehacer los comandos de deshacer anteriores, use ``M-x undo-only``. Esto es como deshacer, pero no rehará los cambios que acaba de deshacer. Para complementarlo, ``M-x undo-redo`` deshará los comandos de deshacer anteriores (y no se registrará como un comando que se puede deshacer). Si nota que un búfer ha sido modificado accidentalmente, la forma más fácil de recuperarlo es teclear :kbd:`Ctrl`-:kbd:`/` (``C-/``) repetidamente hasta que las estrellas desaparezcan de la parte delantera de la línea de modo (véase :ref:`1.3`). Cuando un comando deshacer hace desaparecer las estrellas de la línea de modo, significa que el contenido del búfer es el mismo que la última vez que se leyó o guardó el archivo. Si no recuerda si cambió el buffer deliberadamente, teclee :kbd:`Ctrl`-:kbd:`/` (``C-/``) una vez. Cuando vea deshecho el último cambio que hizo, verá si fue un cambio intencionado. Si fue un accidente, déjalo sin hacer. Si fue deliberado, rehaga el cambio como se ha descrito anteriormente. Alternativamente, puede descartar todos los cambios desde que el buffer fue visitado o guardado por última vez con ``M-x revert-buffer`` (ver :ref:`19.4`). Cuando hay una región activa, cualquier uso de deshacer realiza un *deshacer selectivo*: deshace el cambio más reciente dentro de la región, en lugar de todo el búfer. Sin embargo, cuando el modo de marcas transitorias está desactivado (véase :ref:`12.7` ), ``C-/`` siempre actúa sobre todo el búfer, ignorando la región. En este caso, puede realizar un deshacer selectivo proporcionando un argumento de prefijo al comando deshacer: ``C-u C-/``. Para deshacer más cambios en la misma región, repita el comando deshacer (no es necesario el argumento prefijo). Algunos búferes especializados no hacen registros de deshacer. Los búferes cuyos nombres comienzan con espacios nunca lo hacen; estos, son usados internamente por Emacs para contener texto que los usuarios normalmente no miran o editan. Cuando la información de deshacer de un búfer se hace demasiado grande, Emacs descarta los registros más antiguos de vez en cuando (durante la *recolección de basura*). Puede especificar cuánta información de deshacer guardar configurando las variables ``undo-limit``, ``undo-strong-limit``, y ``undo-outer-limit``. Sus valores se expresan en bytes. La variable ``undo-limit`` establece un límite blando: Emacs mantiene datos de deshacer para suficientes comandos como para alcanzar este tamaño, y quizás excederlo, pero no mantiene datos para ningún comando anterior más allá de eso. Su valor por defecto es 160000. La variable ``undo-strong-limit`` establece un límite más estricto: cualquier comando anterior (aunque no el más reciente) que empuje el tamaño más allá de esta cantidad es olvidado. El valor por defecto de ``undo-strong-limit`` es 240000. Independientemente de los valores de esas variables, el cambio más reciente nunca se descarta a menos que sea mayor que ``undo-outer-limit`` (normalmente 24.000.000). En ese punto, Emacs descarta los datos de deshacer y le advierte de ello. Esta es la única situación en la que no puede deshacer el último comando. Si esto ocurre, puede aumentar el valor de ``undo-outer-limit`` para que sea aún menos probable que ocurra en el futuro. Pero si no esperaba que el comando creara datos de deshacer tan grandes, entonces probablemente se trate de un error y debería informar de ello. Ver :ref:`53`. .. [6] Además de ``C-/``, el comando deshacer también está asociado a ``C-x u`` porque es más fácil de recordar para los principiantes: ``u`` significa ":emphasis:`u`\ndo" (deshacer). También está vinculado a ``C-_`` porque al teclear :kbd:`Ctrl`-:kbd:`/` (``C-/``) en algunos terminales de texto en realidad se introduce ``C-_``. .. _17.2: 17.2 Transponer Texto --------------------- :kbd:`Ctrl`-:kbd:`t` (``C-t``) Transpone dos caracteres (``transpose-chars``). :kbd:`Alt`-:kbd:`t` (``M-t``) Transpone dos palabras (``transpose-words``). :kbd:`Ctrl`-:kbd:`Alt`-:kbd:`t` (``C-M-t``) Transpone dos expresiones equilibradas (``transpose-sexps``). :kbd:`Ctrl`-:kbd:`x` :kbd:`Ctrl`-:Kbd:`t` (``C-x C-t``) Transpone dos líneas (``transpose-lines``). :kbd:`Alt`-:kbd:`x` ``transpose-sentences`` (``M-x transpose-sentences``) Transpone dos frases (``transpose-sentences``). :kbd:`Alt`-:Kbd:`x` ``M-x transpose-paragraphs`` (``M-x transpose-paragraphs``) Transpone dos párrafos (``transpose-paragraphs``). :kbd:`Alt`-:kbd:`x` ``transpose-regiones`` (``M-x transpose-regions``) Transpone dos regiones. El error común de transponer dos caracteres puede solucionarse, cuando son adyacentes, con el comando ``C-t`` (``transpose-chars``). Normalmente, ``C-t`` transpone los dos caracteres a ambos lados del punto. Cuando se da al final de una línea, en lugar de transponer el último carácter de la línea con la nueva línea, lo que sería inútil, ``C-t`` transpone los dos últimos caracteres de la línea. Por lo tanto, si detecta el error de transposición enseguida, puede solucionarlo con ``C-t``. Si no lo detecta tan rápido, debe volver a colocar el cursor entre los dos caracteres transpuestos antes de teclear ``C-t``. Si ha transpuesto un espacio con el último carácter de la palabra delante, los comandos de movimiento de palabra (``M-f``, ``M-b``, etc.) son una buena forma de llegar hasta allí. De lo contrario, una búsqueda inversa (``C-r``) suele ser la mejor manera. Véase :ref:`16`. ``M-t`` transpone la palabra antes del punto con la palabra después del punto (``transpose-words``). Desplaza el punto hacia delante sobre una palabra, arrastrando también hacia delante la palabra que precede o contiene al punto. Los caracteres de puntuación entre las palabras no se mueven. Por ejemplo, ``FOO, BAR`` se transpone a ``BAR, FOO`` en lugar de ``BAR FOO,``. Si el punto se encuentra al final de la línea, la palabra anterior al punto se transpondrá con la primera palabra de la línea siguiente. ``C-M-t`` (``transpose-sexps``) es un comando similar para transponer dos expresiones (véase :ref:`27.4.1`), y ``C-x C-t`` (``transpose-lines``) intercambia líneas. ``M-x transpose-sentences`` y ``M-x transpose-paragraphs`` transponen frases y párrafos, respectivamente. Estos comandos funcionan como ``M-t`` excepto en lo que respecta a las unidades de texto que transponen. Un argumento numérico para un comando de transposición sirve como recuento de repeticiones: indica al comando de transposición que mueva el carácter (o palabra o expresión o línea) anterior o que contenga el punto a través de varios otros caracteres (o palabras o expresiones o líneas). Por ejemplo, :kbd:`Ctrl`-:kbd:`u` :kbd:`3` :kbd:`Ctrl`-:kbd:`t` (``C-u 3 C-t``) desplaza el carácter anterior al punto hacia adelante a través de otros tres caracteres. Cambiaría ``f∗oobar`` por ``oobf∗ar``. Esto equivale a repetir ``C-t`` tres veces. :kbd:`Ctrl`-:kbd:`u` :kbd:`-` :kbd:`4` :kbd:`Alt`-:kbd:`t` (``C-u - 4 M-t``) mueve la palabra anterior al punto anterior a través de cuatro palabras. :kbd:`Ctrl`-:kbd:`u` :kbd:`-` :kbd:`Ctrl`-:kbd:`Alt`-:kbd:`t` (``C-u - C-M-t``) anularía el efecto de :kbd:`Ctrl`-:kbd:`Alt`-:kbd:`t` (``C-M-t``) simple. A un argumento numérico de cero se le asigna un significado especial (porque de otro modo un comando con un recuento de repeticiones de cero no haría nada): transponer el carácter (o palabra o expresión o línea) que termina después del punto con el que termina después de la marca. ``M-x transpose-regions`` transpone el texto entre el punto y la marca con el texto entre las dos últimas marcas empujado al anillo de la marca (véase :ref:`12.1`). Con un argumento de prefijo numérico, transpone el texto entre punto y marca con el texto entre dos marcas sucesivas que muchas entradas atrás en el anillo de marca. Este comando se usa mejor para transponer varios caracteres (o palabras o frases o párrafos) de una sola vez. 17.3 Conversión Mayúsculas y Minúsculas --------------------------------------- :kbd:`Alt`-:kbd:`-` :kbd:`Alt`-:kbd:`l` (``M-- M-l``) Convierte la última palabra a minúsculas. Nota ``Meta--`` es Meta-menos (:kbd:`Alt`-:kbd:`-`). :kbd:`Alt`-:kbd:`-` :kbd:`Alt`-:kbd:`u` (``M-- M-u``) Convierte la última palabra a mayúsculas. :kbd:`Alt`-:kbd:`-` :kbd:`Alt`-:kbd:`c` (``M-- M-c``) Convierte la última palabra a minúscula con inicial mayúscula. Un error muy común es escribir palabras en mayúsculas o minúsculas equivocadas. Por eso, los comandos de conversión de palabras ``M-l``, ``M-u`` y ``M-c`` tienen una característica especial cuando se usan con un argumento negativo: no mueven el cursor. En cuanto vea que ha escrito mal la última palabra, puede simplemente convertirla a mayúsculas y seguir escribiendo. Consulte :ref:`26.7`. .. _17.4: 17.4 Comprobar y Corregir la Ortografía --------------------------------------- En esta sección se describen los comandos para comprobar la ortografía de una sola palabra o de una parte de un búfer. Estas órdenes sólo funcionan si está instalado un programa corrector ortográfico, uno de Hunspell, Aspell, Ispell o Enchant. Estos programas no forman parte de Emacs, pero uno de ellos suele estar instalado en GNU/Linux y otros sistemas operativos libres. Véase **Aspell** en El manual de Aspell. Si sólo tiene instalado uno de los programas correctores ortográficos, Emacs lo encontrará cuando invoque por primera vez uno de los comandos descritos aquí. Si tiene más de uno instalado, puede controlar cuál se usa personalizando la variable ``ispell-program-name``. :kbd:`Alt`-:kbd:`$` (``M-$``) Comprueba y corrige la ortografía de la palabra en el punto (``ispell-palabra``). Si la región está activa, lo hace para todas las palabras de la región. :kbd:`Alt`-:kbd:`x` ``ispell`` (``M-x ispell``) Comprueba y corrige la ortografía de todas las palabras del búfer. Si la región está activa, hágalo para todas las palabras de la región. :kbd:`Alt`-:kbd:`x` ``ispell-buffer`` (``M-x ispell-buffer``) Comprueba y corrige la ortografía en el búfer. :kbd:`Alt`-:kbd:`x` ``ispell-region`` (``M-x ispell-region``) Comprueba y corrige la ortografía en la región. :kbd:`Alt`-:kbd:`x` ``ispell-message`` (``M-x ispell-message``) Revisa y corrige la ortografía de un borrador de mensaje de correo, excluyendo el material citado. :kbd:`Alt`-:kbd:`x` ``ispell-comments-and-strings`` (``M-x ispell-comments-and-strings``) Comprueba y corrige la ortografía de los comentarios y las cadenas en el búfer o la región. :kbd:`Alt`-:kbd:`x` ``ispell-comment-or-string-at-point`` (``M-x ispell-comment-or-string-at-point``) Comprueba el comentario o la cadena en el punto. | :kbd:`Alt`-:kbd:`x` ``ispell-change-dictionary`` :kbd:`RETURN` *dicc* :kbd:`RETURN` | (``M-x ispell-change-dictionary RET`` *dicc* ``RET``) Reinicia el proceso de corrección ortográfica, usando a *dicc* como diccionario. :kbd:`Alt`-:kbd:`x` ``ispell-kill-ispell`` (``M-x ispell-kill-ispell``) Mata el subproceso del corrector ortográfico. | :kbd:`Alt`-:kbd:`TAB` (``M-TAB``) | :kbd:`ESC`:kbd:`TAB` (``ESC TAB``) | :kbd:`Ctrl`-:kbd:`Alt`-:Kbd:`i` (``C-M-i``) Completa la palabra antes del punto basándose en el diccionario ortográfico (``ispell-complete-wordù``). :kbd:`Alt`-:kbd:`x` ``flyspell-mode`` (``M-x flyspell-mode``) Activa el modo Flyspell, que resalta todas las palabras mal escritas. :kbd:`Alt`-:kbd:`x` ``flyspell-prog-mode`` (``M-x flyspell-prog-mode``) Activa el modo Flyspell sólo para comentarios y cadenas. Para comprobar la ortografía de la palabra alrededor o antes de punto, y opcionalmente corregirla también, escriba ``M-$`` (``ispell-word``). Si hay una región activa, ``M-$`` comprueba la ortografía de todas las palabras dentro de la región. Véase :ref:`12`. (Cuando el modo Marca transitoria (Transient Mark mode) está desactivado, ``M-$`` actúa siempre sobre la palabra alrededor o antes del punto, ignorando la región; véase :ref:`12.7` (Transient Mark Mode)). Del mismo modo, el comando ``M-x ispell`` realiza la corrección ortográfica en la región si hay una activa, o en todo el búfer en caso contrario. Los comandos ``M-x ispell-buffer`` y ``M-x ispell-region`` realizan explícitamente la corrección ortográfica en todo el búfer o en la región, respectivamente. Para revisar la ortografía de un mensaje de correo electrónico que esté escribiendo, use ``M-x ispell-message``; ese comando revisa todo el búfer, excepto el material que esté sangrado o que parezca citado de otros mensajes. Véase :ref:`33`. Cuando trabaje con código fuente, puede usar ``M-x ispell-comments-and-strings`` o ``M-x ispell-comment-or-string-at-point`` para comprobar sólo los comentarios o las cadenas literales. Cuando uno de estos comandos encuentra lo que parece ser una palabra incorrecta, le pregunta qué hacer. Normalmente muestra una lista numerada de palabras cercanas a la palabra incorrecta. A continuación, debe escribir una respuesta de un solo carácter. Éstas son las respuestas válidas: `dígito` Sustituye la palabra, sólo esta vez, por uno de los cuasi-aciertos mostrados. Cada cuasi fallo aparece con un dígito; escríbalo para seleccionarlo. :kbd:`SPACE` (``SPC``) Omite esta palabra: sigue considerándola incorrecta, pero no la cambie aquí. :kbd:`r` *nueva* :kbd:`RETURN` (``r`` *nueva* ``RET``) Sustituye la palabra, sólo esta vez, por *nueva*. (La cadena de sustitución se volverá a analizar en busca de más errores ortográficos). :kbd:`R` *nueva* :kbd:`RETURN` (``R`` *nueva* ``RET``) Sustituye la palabra por *nueva*, y hace una consulta-sustitución (``query-replace``) para poder sustituirla en otro lugar del búfer si lo desea. (Los reemplazos se volverán a escanear en busca de más errores ortográficos). :kbd:`a` (``a``) Acepta la palabra incorrecta: trata la palabra como correcta, pero sólo en esta sesión de edición. :kbd:`A` (``A``) Acepta la palabra incorrecta: la trata como correcta, pero sólo en esta sesión de edición y para este búfer. :kbd:`y` (``i``) Inserta esta palabra en su archivo privado de diccionario para que se considere correcta a partir de ahora, incluso en futuras sesiones. :kbd:`m` (``m``) Como ``i``, pero también puede especificar la información de completado del diccionario. :kbd:`u` (``up``) Inserta la versión en minúsculas de esta palabra en el archivo privado de su diccionario. :kbd:`l` *palabra* :Kbd:`RETURN` (``l`` *palabra* ``RET``) Busca en el diccionario aquellas palabras que coincidan con el término *palabra*. Estas palabras se convierten en la nueva lista de casi-errores; puede seleccionar una de ellas como reemplazo tecleando un dígito. Puede usar ``*`` en palabra como comodín. | :kbd:`Ctrl`-:kbd:`g` (``C-g``) | :kbd:`X` (``X``) Sale de la revisión ortográfica interactiva, dejando el punto en la palabra que se estaba revisando. Después puede reiniciar la revisión con :kbd:`Ctrl`-:kbd:`u` :Kbd:`Alt`-:kbd:`$` (``C-u M-$``). :kbd:`x` (``x``) Sale del corrector ortográfico interactivo y vuelve a colocar el punto donde estaba cuando se activó el mismo. :kbd:`q` (``q``) Sale de la corrección ortográfica interactiva y mata el subproceso del corrector ortográfico. :kbd:`?` (``?``) Muestra lista de opciones. En el modo Texto y modos relacionados, ``M-TAB`` (``ispell-complete-word``) realiza el completado en el búfer basándose en la corrección ortográfica. Introduzca el principio de una palabra y escriba :kbd:`Alt`-:kbd:`TAB` (``M-TAB``); aparecerá una lista de palabras completadas. (Si su gestor de ventanas intercepta ``M-TAB``, escriba :kbd:`ESC`:kbd:`TAB` (``ESC TAB``) o :kbd:`Ctrl`-:kbd:`Alt`-:Kbd<2<1<3:`i` (``C-M-i``).) Cada completado aparece con un dígito o carácter; escriba ese dígito o carácter para elegirlo. Una vez iniciado, el subproceso del corrector ortográfico continúa ejecutándose, a la espera de algo que hacer, de modo que los siguientes comandos de corrección ortográfica se completen más rápidamente. Si desea deshacerse del proceso, use ``M-x ispell-kill-ispell``. Esto no suele ser necesario, ya que el proceso no usa tiempo del procesador excepto cuando hace la corrección ortográfica. Los correctores ortográficos buscan la ortografía en dos diccionarios: el diccionario estándar y su diccionario personal. El diccionario estándar se especifica mediante la variable ``ispell-local-dictionary`` o, si es nula, mediante la variable ``ispell-dictionary``. Si ambas son nulas, se usa el diccionario por defecto del programa de ortografía. El comando ``M-x ispell-change-dictionary`` establece el diccionario estándar para el búfer y luego reinicia el subproceso, para que use un diccionario estándar diferente. Su diccionario personal se especifica mediante la variable ``ispell-personal-dictionary``. Si es ``nil``, el programa de ortografía busca un diccionario personal en una ubicación predeterminada, que es específica para cada corrector ortográfico. Para completar palabras se usa un diccionario distinto. La variable ``ispell-complete-word-dict especifica`` el nombre de archivo de este diccionario. El diccionario de completado debe ser diferente porque no puede usar la información sobre raíces y afijos de las palabras, que el corrector ortográfico utiliza para detectar variaciones de las palabras. Para algunos idiomas, existe un diccionario de corrección ortográfica pero no un diccionario de completado de palabras. El modo Flyspell es un modo secundario que realiza una corrección ortográfica automática del texto que escribe a medida que lo teclea. Cuando encuentra una palabra que no reconoce, la resalta. Escriba :kbd:`Alt`-:Kbd:`x` ``flyspell-mode`` (``M-x flyspell-mode``) para activar el modo Flyspell en el búfer actual. Para activar el modo Flyspell en todos los búfers de modo texto, añada ``flyspell-mode`` a ``text-mode-hook``. Ver :ref:`50.2.2`. Tenga en cuenta que, como el modo Flyspell necesita comprobar cada palabra por la que se mueve, ralentizará el movimiento del cursor y los comandos de desplazamiento. Tampoco comprueba automáticamente el texto que no ha escrito o por el que no se ha movido; para ello utilice ``flyspell-region`` o ``flyspell-búfer``. Cuando el modo Flyspell resalta una palabra como mal escrita, puede hacer clic sobre ella con ``ratón-2`` (``flyspell-correct-word``) para mostrar un menú de posibles correcciones y acciones. Si desea que el menú aparezca con ``ratón-3``, active el modo de menú contextual. Además, ``C-``. o ``ESC TAB`` (``flyspell-auto-correct-word``) propondrá varias correcciones sucesivas para la palabra en el punto, y ``C-c $`` (``flyspell-correct-word-before-point``) desplegará un menú de posibles correcciones. Por supuesto, siempre puede corregir la palabra mal escrita editándola manualmente como desee. El modo Flyspell Prog funciona igual que el modo Flyspell normal, con la diferencia de que sólo comprueba las palabras de los comentarios y las constantes de cadena. Esta función es útil para editar programas. Escriba :kbd:`Alt`-:kbd:`x` ``flyspell-prog-mode`` (``M-x flyspell-prog-mode``) para activar o desactivar este modo en el búfer actual. Para activar este modo en todos los búferes del modo de programación, añada ``flyspell-prog-mode`` a ``prog-mode-hook`` (ver :ref:`50.2.2`).