miércoles, 16 de noviembre de 2011

Cómo hacer un bookmarklet con vim


Supongamos el caso de uso de mi otro post, en el cual hice un js que estuve probando y mejorando una y otra vez en chrome vía ctrl+shift+i y luego solapa consola.

Un script como este:

Se puede pasar a bookmarklet con:

gg: voy al inicio de archivo
O: abro una línea arriba y escribo "javascript:(function(){"
Esc: salgo de modo insert
G: voy al final
o: abro línea debajo y escribo "})()"

Luego falta:
ggvG1000<: desindento todo
:%s/ /%20/g: reemplazo todos los espacios por %20 ya que es url encoding lo que necesitamos.
:%s/\n//g: borramos todos los newline.

Para guardar toda la secuencia en una macro tenemos que hacer lo mismo, pero previamente:
qa: empiezo a grabar macro en el registro 'a' (pero puede ser cualquier otro).

Y al finalizar:
q: terminar de grabar la macro

Para reproducir la macro:
@a
para reproducir 10 veces:
10@a

Ahora bien, para qué quiero reproducir la macro si ya está hecho el bookmarklet?

Lo que necesito es guardar la macro permanentemente.

La macro quedó guardada en el registro 'a', y para ver eso podemos ejecutar
:reg
Que muestra todos los registros.

Para pegar en un archivo se hace con
ctrl+r ctrl+r a

Por lo tanto editamos el archivo ~/.vimrc y agregamos la asignación del registro a de forma permanente:


NOTA: se asume que el bookmarklet solo tiene espacios necesarios, es decir en
var a="hola";
SI
y no como en:
var a = "hola";

También se asume que todas las líneas tienen ; al final salvo los bloques.

Otra cosa a tener en cuenta es que la macro se pega con el ^[ como escape y el ^M como enter. Pero vim los toma distintos a estos caracteres y pegar y copiar del gist no va a funcionar. Hay que ejecutar la macro a mano y luego guardarla.

Con este truco la macro está permanente. Sin peligro que se pise con otra macro.

Otra forma de hacerlo, y más detalle de lo que expliqué está acá

No hay comentarios: