Nota: supongo que está usando el a
registro para la totalidad de esta respuesta, pero puede usar cualquier registro
Nota2: <1b>
es Esc; puedes insertar esto con Ctrl+vy luego Esc. También puede aparecer como ^[
(según la display
configuración).
No es un mapeo; entonces tiene sentido que :map
no funcione. Está grabado en un registro, y puede verlo y editarlo como cualquier registro.
Todo lo que qhace es "borrar este registro y agregarle cualquier tecla" , y todo lo que @hace es "evaluar un registro como comandos" .
No hay nada "diferente" en una macro, puede invocar cualquier registro como macro.
Para ver solo use:
:echo @a
Como cualquier registro.
También puede usar :registers
para ver todos los registros.
Para editar puedes hacer varias cosas:
La forma más sencilla de asignarlo es @a
así:
:let @a='iasd<1b>'
Esto iniciará el modo de inserción ( i
), insertar asd
y Escape de vuelta al modo normal.
Esto no es muy útil para una edición extensa; podría usar funciones (es decir substitute()
), o tal vez agregar algo ( :let @a=@a . 'more'
), pero cambiar algo en el medio no es tan fácil.
He descubierto que la mejor manera de hacerlo es iniciar un nuevo búfer con :split
o :tabnew
y editar el registro al insertarlo allí, editarlo y luego copiarlo nuevamente.
Puede usar "apcual insertará el texto en el búfer (donde a
está su registro):
iThis is A<1b>
Ahora solo puedo cambiar la línea a quizás:
iThis is an edited macro<1b>
Luego hago ^v$"aypara tirar (copiar) esta línea al a
registro:
- ^ para inicio de línea
- v para modo visual
- $ para fin de línea
- "ay tirar de la selección para registrarse
a
Si lo desea, puede hacerlo sin usar el modo visual con ^"ay$.
Ahora puede usar @a, como si esto fuera lo que grabó originalmente.
También puede usar yy, y luego @", que es un poco más rápido. Sin embargo, esto también copiará la nueva línea final y puede causar efectos secundarios ... Otra forma de hacerlo más rápido es usar una macro :-)
Enter
al final de su grabación. En muchos casos, esto puede ser benigno, pero en escenarios en los que ha elaborado cuidadosamente la posición del cursor al final de la grabación, puede afectar la repetibilidad.v
y seleccionar la línea completa (sin la nueva línea).v^$"ay
para tirar (copiar) esta línea ala
registro". ¿No debería ser eso^
antes delv
, y con$
todavía no estás copiando la nueva línea? Creo que debería ser:0v$h"ay
(¡sí dolorosamente largo!)$
mueve al final de la línea, pero no incluye la nueva línea. Es la diferencia entre0y$
yyy
. Ponerh
después de$
eso solo significaría que te perderías el último personaje.Para conseguir algo con lo que trabajar ...
Comenzará a grabar una macro en el
a
registro.Puede ver muchos de sus registros actuales (utilizados para macros, extracción, eliminación, etc.) con el
:reg
comando, o puede especificar un registro para mostrar proporcionando su nombre. Por ejemplo, para mostrar el registroa
:rendimientos
Puede agregar a un registro con nombre existente utilizando la letra mayúscula correspondiente. Esto funciona no solo para grabar macros, sino también para tirar. Por ejemplo:
rendimientos
Si desea utilizar la sintaxis let para editar una macro existente, puede hacer lo siguiente:
que se expandirá a
y luego puede cambiar las pulsaciones de teclas individuales.
Tenga en cuenta que puede usar
<C-r>
(es decir, control + r) para pegar desde cualquier registro en modo de línea de comandos (o en modo de inserción, para el caso).Además, cuando está en modo de línea de comandos, si escribe
<C-f>
esto, aparecerá la ventana de línea de comandos, en la que puede ver / editar los comandos anteriores emitidos, y puede editar su comando actual antes de llamarlo. Presione enter en el comando que desea enviar.El beneficio de esto es que puede usar sus comandos normales de movimiento / sustitución dentro de este búfer para editar su macro. Por ejemplo:
traerá a colación:
Si tiene el comando 120, puede hacer:
rendimientos
Por supuesto, puede pegar el contenido del registro en su búfer y cambiarlo allí. Pero puede hacer todo lo que necesita sin contaminar su búfer de trabajo.
fuente