Ago 13 2008

buffers y ventanas avanzado

Tag: basicoverdrive @ 4:51 pm

En este artículo explicaremos de forma más profunda el uso de buffers y ventanas.

Podemos emplear otros comandos además de los explicados anteriormente para conseguir un mayor control sobre los buffers:

  • C-x -> : siguiente buffer.
  • C-x <- : buffer anterior.
  • M-x rename-buffer : renombra el buffer.
  • M-x kill-some-buffers : elimina los buffers marcados para eliminación.

En uno de los artículos anteriores explicabamos que es posible listar todos los buffers mediante C-x C-b, podemos ver en dicho listado un campo llamado CRM que puede tomar los siguientes valores:

  • . : mostrado.
  • * : modificado.
  • % : sólo lectura.
  • D : marcado para eliminación.
  • > : marcado para mostrar.
  • S : marcado para guardar.

En dicho buffer podemos realizar acciones tales como las siguientes:

  • n o flecha abajo : siguiente buffer de la lista.
  • p o flecha arriba : buffer anterior de la lista.
  • d o k : marcar buffer para eliminación.
  • ~ : marcar buffer como modificado.
  • % : marcar o desmarcar buffer como sólo lectura.
  • m : marcar buffer para ser mostrado.
  • u : desmarcar buffer.
  • Del : desmarcar buffer anterior.
  • f : reemplazar la lista de buffers por esta nueva lista de buffers.
  • o : reemplazar otra ventana con el buffer actual.
  • 1 : mostrar buffer en pantalla completa.
  • 2 : mostrar los siguientes 2 buffers en ventana horizontal.
  • v : mostrar los buffers marcados por m.
  • x : ejecutar comandos de marcado.
  • q : salir del listado de buffers.

También podemos tener un mejor control sobre las ventanas, las cuales estan asociadas a un buffer determinado:

  • C-x < : ‘scroll-left‘; mueve el scroll hacia la izquierda.
  • C-x > : ‘scroll-right‘; mueve el scroll hacia la derecha.
  • (sin keystroke asociada) : ‘shrink-window‘; reduce la ventana.
  • C-x ^ : ‘enlarge-window‘; amplia la ventana.
  • C-x } : ‘wider-frame‘; amplia el ancho del frame.
  • C-x { : ‘shrink-window-horizontally‘; reduce el ancho de la ventana.
  • C-u C-x ^ : amplia el ancho de la ventana actual.
  • C-x – : ‘shrink-window-if-larger-than-buffer‘; amplia la ventana si el buffer es más largo.
  • C-x + : ‘balance-windows‘; balancea las ventanas para que tengan el mismo tamaño.
  • C-M-v : ‘scroll-other-window‘; baja el scroll de la ventana opuesta.
  • C-x 4 f : ‘find-file-other-window‘; abre un fichero en la ventana opuesta.
  • C-x 4 b : ‘switch-to-buffer-other-window‘; asocia y/o muestra un buffer en la ventana opuesta.
  • (sin keystroke asociada) : ‘compare-windows‘; Compara ventanas mediante ediff.

La ventana opuesta sera la siguiente ventana en orden de izquierda a derecha y de arriba abajo.

Con esto ya podemos movernos de una forma avanzada las ventanas, así como administrar los buffers que tengamos en uso y ver sus estados.


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.


« Página anteriorPágina siguiente »