Ago 11 2008

Ispell, flyspell y abbrev

Tag: basicoverdrive @ 3:59 pm

Emacs incluye ispell para la corrección automática de texto. Cada diccionario es guardado en el fichero .ispell_<lenguaje> donde lenguaje es cualquier lenguaje, que por defecto es english.

Para instalar los diccionarios e ispell (si es que no se tiene ya) desde gentoo podemos instalarlo haciendo:

# emerge aspell aspell-en aspell-es

O bien si utilizamos debian podemos hacer:

# apt-get install aspell aspell-en aspell-es

Con esto instalaremos los diccionarios en inglés y castellano, aunque hay muchos otros, disponibles en la web oficial de aspell.

Para lanzar ispell tan sólo debemos invocarlo mediante M-x ispell-buffer. Esto nos resaltará la palabra y nos mostrará las posibles alternativas, las cuales son:

  • un número o letra en las opciones mostradas : cambiar la palabra mediante el índice asociado a cada palabra.
  • ? : para más opciones.
  • SPC (espacio) : para no modificar dicha palabra.
  • u : convertir la palabra en minúsculas.
  • i : saltar a la siguiente palabra no conocida.
  • r : reemplazar la palabra.
  • R : reemplazar las palabras usando query-replace.
  • a : aceptar la palabra para el resto de la sesión para todos los buffers (y por lo tanto no volver a resaltarla como inválida).
  • A : aceptar la palabra para el resto de la sesión para este buffer (y por lo tanto no volver a resaltarla como inválida).
  • C-r : edición recursiva.
  • C-M-c : salir de la edición recursiva.
  • ! : reemplazar todas las ocurrencias después de haber presionado R (evitar el query del replace).

Para analizar una sola palabra y no todo el buffer tan sólo debemos pulsar M-$ el cual tiene el comando asociado ispell-word. Si en cambio queremos completar una palabra podemos usar el comando M-tab que tiene el comando asociado ispell-complete-word.

Además de ispell, tenemos flyspell, que tiene el mismo efecto que ispell, pero este se realiza en tiempo real, a medida que vamos escribiendo cualquier palabra ‘on the fly’. Para lanzar flyspell tan sólo debemos invocarlo mediante M-x flyspell-mode. Existe otro modo el cual se invoca mediante M-x flyspell-prog-mode diseñado para programadores. En este modo podremos hacer que flyspell analice texto en nuestro código fuente pero sólo para el código comentado o cadenas.
Otra alternativa es usar M-x flyspell-buffer para lanzar flyspell sobre el buffer actual, el cual nos resaltará las palabras que no encuentre o reconozca en nuestro diccionario.

Resumiendo los comandos que podemos realizar con ispell y flyspell:

  • M-$ : ‘ispell-word‘; analiza la palabra sobre el cursor.
  • (sin keystroke asociada) : ‘ispell-region‘; analiza una región.
  • (sin keystroke asociada) : ‘ispell-buffer‘; analiza un buffer.
  • (sin keystroke asociada) : ‘ispell-message‘; analiza el cuerpo de un mail.
  • (sin keystroke asociada) : ‘ispell-comments-and-strings‘; analiza los comentarios y cadenas en el código de un programa.
  • (sin keystroke asociada) : ‘ispell-continue‘; continua ispell desde la última vez que se finalizó con C-g.
  • (sin keystroke asociada) : ‘ispell-kill-ispell‘; finaliza el proceso de análisis.
  • M-TAB : ‘ispell-complete-word‘; imprime las posibles opciones para la palabra actual.
  • (sin keystroke asociada) : ‘flyspell-mode‘; analiza el texto en tiempo real (on the fly).
  • (sin keystroke asociada) : ‘flyspell-buffer‘; analiza el texto en tiempo real para dicho buffer.

Si queremos activar flyspell por defecto podemos añadir en nuestro .emacs la línea:

(setq-default flyspell-mode t)

Por ultimo podemos usar abbrev para completar palabras técnicas, para ello podemos usar M-/ para dabbrev-expand y emacs completará la palabra a la mas cercana. Para entrar en el modo abreviado tan sólo debemos lanzar M-x abbrev-mode. Emacs guarda las abreviaturas en el fichero .abbrev_defs.

  • Añadir abreviaturas: debemos entrar en el modo citado anteriormente y pulsar C-x a i g para añadir abreviaciones globales add-inverse-global o C-x a i l para añadir abreviaciones locales add-inverse-local.
  • Para cargar el fichero de abreviaturas por defecto: y estar en dicho modo podemos añadir éstas líneas en nuestro .emacs:

(setq-default abbrev-mode t)
(read-abbrev-file «~/.abbrev_defs»)
(setq save-abbrevs t)

  • Eliminar abreviaturas: Si lo que queremos es eliminar una abreviatura debemos pulsar M-x edit-abbrevs. Debemos eliminar líneas completas con C-k o similar, no debemos editar o añadir líneas ya que Emacs mantiene su propio formato. Para guardar los cambios despues de eliminar líneas debemos usar M-x write-abbrev-file.
  • Listar abreviaturas: Si lo que queremos en cambio es listar pero no editar abreviaturas podemos lanzar el comando M-x list-abbrevs.
  • Deshabilitar abreviaturas: Debemos pulsar M-x kill-all-abbrevs o bien M-x read-abbrev-file y eliminar la línea deseada.
  • Cancelar la última abreviatura: Debemos pulsar M-x unexpand-abbrev.

Ago 08 2008

Búsqueda avanzada mediante expresiones regulares (regexp) y reemplazo medio

Tag: basicoverdrive @ 3:23 pm

Ya sabemos como poder buscar y reemplazar cadenas por los artículos anteriores. Sin embargo existe una manera más avanzada y potente de poder buscar cadenas, y es mediante el uso de expresiones regulares, antes de comenzar a explicar expresiones regulares, detallaré cuales son los comandos sobre Emacs los cuales nos permiten hacer uso de ellas:

  • C-M-s : ‘isearch-forward-regexp‘; nos permite buscar hacia delante una cadena dado un patrón.
  • C-M-r : ‘isearch-backward-regexp‘; nos permite buscar hacia detrás una cadena dado un patrón.
  • C-M-s C-M-s : nos permite buscar hacia delante de forma incremental una cadena dado un patrón.
  • C-M-r C-M-r : nos permite buscar hacia detrás de forma incremental una cadena dado un patrón.

En el momento que utilicemos uno de estos dos primeros comandos se nos preguntará que patrón debemos usar para buscar cadenas y aquí es donde entra en juego el uso de las expressiones regulares para poder realizar esta búsqueda avanzada, tan sólo citaré las más comunes:

  • ^ : Principio de línea
  • $ : Fin de línea
  • . : Cualquier carácter (1)
  • ? : Cualquier carácter (0 o 1)
  • * : Cualquier carácter (0 o más coincidencias)
  • + : Cualquier carácter (1 o más coincidencias)
  • \< : Principio de palabra
  • \> : Fin de palabra
  • [ ] : Rango de carácteres
  • \s, \S : Carácter en blanco o cualquier carácter excepto un carácter en blanco.
  • \d, \D : Dígito o cualquier carácter excepto un dígito.
  • \w, \W : Cualquier cáracter del alfabeto o dígito (incluyendo guión abajo). O cualquier carácter que no sea del alfabeto ni un número ni un guión abajo.
  • \| : Or condicional
  • \(\) : Grupo parental

Pondré un ejemplo simple de cada uno, para aclarar el uso de expresiones regulares:

  • ^foo : Líneas que comiencen por la palabra foo.
  • bar$ : Líneas que terminen por la palabra bar.
  • a.b : Palabras que tengan una a al principio, una b al final y cualquier carácter entre ambas axb, adb, abb, etc.
  • a*b : Palabras que tengan una a al principio, una b al final y cualquier carácter entre ambas o no axb, adb, abb, ab, etc.
  • a+b : Palabras que tengan una a al principio, una b al final y cualquier carácter(s) entre ambas axb, adb, abb, acccccb, adfghb, etc.
  • <\foo : Palabras que comiencen por foo.
  • bar\> : Palabras que acaben en bar.
  • [a-zA-Z] : Cualquier letra del alfabeto, en mayúsculas o minúsculas.
  • \(a\|b\|c\|d\)x : Palabras que contengan ax, bx, cx o dx.

En la misma quick reference card de emacs podréis encontrar un apartado para expresiones regulares. Y, aunque todos los lenguajes usan de forma parecida las mismas reglas para trabajar con expresiones regulares, no siempre es así, así que podemos hacer referencia a la web de Scott Klarr donde tenemos un artículo sólo dedicado a guías de referencia para expresiones regulares.

Para el reemplazo avanzado podríamos hacer uso C-M-% o bien mediante su nombre de comando M-x query-replace-regexp, o bien tambien podemos hacer uso de M-x isearch-query-replace-regexp la cual no tiene keystroke asociada por defecto.


Ago 06 2008

CUA (Common User Access)

Tag: basicoverdrive @ 2:41 pm

Ante todo gracias a los usuarios pacientes que esperan artículos, que no solo vienen de España sinó que también vienen de lugares como Reino Unido, Irlanda, Holanda, Perú, Chile, Colombia, Polonia, Venezuela, Argentina, México, Bolivia, Suecia, Brasil, Alemania, Guatemala, República Dominicana y Costa Rica. A todos gracias por seguir este blog!

Ahora, sin más dilaciones, pasemos a explicar brevemente que es y cómo usar CUA.

CUA significa Common User Access o en castellano acceso común de usuario. Cuando se creó Windows parece que tuvieron en cuenta que 3 combinaciones de teclas tocarían más los huevos a los usuarios de emacs, y evidentemente fueron C-x, C-c y C-v. Por eso existe un modo en el que dichas acciones tan habituales como copiar, cortar y pegar se asignan a keystrokes de usuarios de Windows.

Para comenzar a utilizar CUA tan sólo debemos lanzar M-x cua-mode, sin embargo, si lo que queremos es utilizarlo siempre cuando se cargue nuestro editor tan sólo debemos añadir estas líneas en nuestro .emacs:

(require ‘cua)
(CUA-mode t)

A partir de este momento podremos usar:

  • C-x para cortar
  • C-c para copiar
  • C-v para pegar
  • C-z para deshacer la última acción

Si por ejemplo queremos partir el frame en dos ventanas, tan sólo debemos hacer C-x 2, es decir, a menos que estemos seleccionando una región las acciones o comandos habituales realizados con C-x no deben entrar en conflicto con CUA.

Por último decir, que NO es recomendable usar este modo, tan sólo para usuarios nuevos y que NO quieren hacer casi ningún esfuerzo para mejorar su productividad en Emacs. Por lo que recomiendo encarecidamente que si se usa, sea de manera temporal al principio por desconocimiento y que rápidamente se pase a los keystrokes habituales de Emacs.


« Página anteriorPágina siguiente »