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.


Jul 11 2008

Repeticiones

Tag: basicoverdrive @ 12:49 pm

Comentaba en el artículo anterior que las repeticiones no son realmente de uso frecuente, sin embargo éstas pueden sernos muy útiles a la hora de escribir macros.

Gracias a David por aclararme en su dia todo el tema de repeticiones, sin él éste artículo no hubiese existido.

En el artículo anterior comentabamos que podiamos alterar el comportamiento de una función pasándole el valor -1 a una función. Veamos que otros parámetros y como se le pueden pasar a una función, así como su comportamiento final.

Recordemos que el argumento recibido no siempre tienen porque ser repeticiones (aunque sí generalmente), sinó que lo usará o interpretará de la forma que mas ‘le convenga’, y por lo tanto para cada uno de los comandos puede interpretarse (y de hecho se interpreta así) de forma posiblemente distinta.

A continuación en rojo irá marcada la parte repetitiva del comando (donde ‘enviamos’ los parámetros a la función) seguido de la parte en negrita que indicará el comando original, ya que será mucho más fácil explicar esto con ejemplos:

  • C-u C-f : Le pasará el argumento 4 al comando que le siga. En éste caso repetira 4 veces la acción (avanzará 4 caracteres hacia delante).
  • C-u C-u C-f : Se sumará 4 veces el valor del argumento hasta el momento. 0 veces = 1, 1 vez = 4, 2 veces = 8, etc.
  • C-u 3 C-f : Se le pasará el argumento 3 a la función, y por lo tanto repetirá 3 veces en este caso dicha acción (pudiendo también enviar números negativos).
  • C– C-f o M– C-f : Pasará el valor -1 como parámetro a la función.
  • C-5 C-f o M-5 C-f : Pasará un argumento simple de un único dígito.

Recordad que no todos los comandos permiten recibir parámetros negativos a la función, ni siquiera no todos los comandos permiten recibir parametros, por lo tanto, esto no es universal para todos ellos.


« Página anteriorPágina siguiente »