Índice

Hace unos meses que comencé a usar emacs como editor predeterminado, y la verdad es que una vez me acostumbré a él es bastante cómodo. Sin embargo, editando artículos del blog, me encontraba ejecutando una y otra vez el mismo comando, o comandos similares. Así que busqué la forma de asociarlos a una función para no tener que andar escribiendolos cada dos por trés. Veamos cómo crear estas funciones.

La función (query-replace-regexp)

Una función que uso mucho en emacs es (query-replace-regexp), la cual permite buscar y reemplazar un texto en base a una expresión regular.



En este blog ya hemos tratado este tema en varias ocasiones (Véase Expresiones regulares multilínea o una introducción a las expresiones regulares en Python).

Si como yo, te encuentras repitiendo este comando una y otra vez, con los mismos argumentos, es posible guardarlo en una función y simplemente ejecutarla escribiendo su nombre.

Supongamos que queremos guardar la siguiente acción:

(query-replace-regexp "\\([A-Z]\\{3,\\} ?[A-Z]+\\)" "`\\1`")

La cual he estado usando mucho para pasar palabras en mayúsculas a código en línea en markdown. Esto lo he estado haciendo para todos los comandos que aparecen en los artículos del curso de base de datos. Bien, para guardar el comando basta con añadir lo siguiente al fichero init.el de emacs:

NOTA: Hay que escapar la \ en la expresión regular, por eso aparecen dobles \\.

;; Hacer inline codigo en markdown
(defun to-inline-code ()
  (interactive)
  (query-replace-regexp "\\([A-Z]\\{3,\\} ?[A-Z]+\\)" "`\\1`"))

A partir de ahora, para ejecutar (query-replace-regexp) con esos parámetros, solo hay que llamar a la función to-inline-code(). Esto se puede hacer con la combinación de teclas M-x <función>, en este caso M-x to-inline-code.

La función (query-replace)

Esta función es similar a la de arriba, pero más simple. No acepta expresiones regulares. Concretamente, para lo que más uso esta función es para eliminar el dominio del blog (http://elbauldelprogramador.com/) de los enlaces en los artículos, de forma que un enlace:

[Enlace](http://elbauldelprogramador.com/algun-post/ ) 

pase a ser

[Enlace](/algun-post/ )

De igual forma, para asociarla a una función, añadimos lo siguiente al init.el

;; Borra uri
(defun delbaul ()
  (interactive)
  (query-replace "https://elbauldelprogramador.com" ""))

Conclusiones

Eso es todo, espero que os sea de ayuda. ¿Qué otras funciones te resulta útiles en emacs? Déjanos un comentario.

Referencias