Estoy tratando de definir una macro que genere rápidamente una lista de palabras aleatorias.
Quiero que la macro convierta esto en una lista como
a
b
c
d
e
dentro de esto
arezzo
bywords
czars
détente
eyrie
Lo que tengo hasta ahora:
- poner el cursor en la letra
a
- comenzar a grabar macro
qq
a
ingrese al modo de inserción<C-x><C-k> - perform dictionary completion on the character before cursor - in this case the letter
a`<C-p>
seleccione el último elemento en la lista de finalización que aparece, en mi sistema es la palabraarezzo
. (Nota: helongest
incluido en mi'completeopt'
entorno, que es necesario para<C-p>
trabajar de esta manera durante la finalización:)'set completeopt=longest,menuone,preview'
.<C-y>
aceptar la finalización^[^[
salir del modo de inserciónj
pasar a la siguiente línea, listo para hacer la misma operación en la siguiente líneaq
para de grabar
cuando creo la macro y sigo los pasos manualmente, todo funciona bien, sin embargo, cuando ejecuto la macro, veo un mensaje parpadeando en la línea de comando como:
escanear archivo de diccionario
y no sucede nada, solo j
se ejecutan los comandos en la macro , es decir, el cursor se mueve hacia abajo de la línea, pero ninguno de los comandos de finalización se ejecuta.
¿Es posible usar las finalizaciones del modo de inserción en una macro, y si es así, cómo puedo hacerlo?
autocompletion
macro
the_velour_fog
fuente
fuente
<C-p>
paso ... cuando hago eso en mi vim, solo da el mensajeback at original
, no selecciona el último elemento ... Usé la tecla de flecha hacia arriba dos veces para seleccionar la última palabra (mi casoazures
), presioné enter y entoncesEsc+j+q
... luego funciona bastante bien en la ejecución de macroset completeopt=longest,menuone,preview
sulongest
opción que hace<C-p>
que se inserte de inmediato. Si eliminolongest
de lacompleteopt
cadena, obtengo el mismo comportamiento que usted. Además, sí, ¡las teclas de flecha funcionaron! gracias (olvidé que puedes usarlos para navegar por la lista de finalización):set completeopt=
ya<c-x><c-k><esc>j
como su macro.Respuestas:
EDITAR : Realmente estás después de completar el diccionario; no necesariamente necesita el modo de inserción (modo Ctrl + X) para hacer esto. Como descubriste, hacer que trabajar con macros sea un verdadero dolor. El siguiente script se puede usar para completar el diccionario sin el modo de inserción, para que pueda repetirlo fácilmente dentro de una macro.
Agregue el código siguiente a su
.vimrc
archivo, cierre y vuelva a abrir las ventanas vim para obtener la nueva función, y luego grabe presionando alternativamente<C-k>
para completar yj
avanzar a la siguiente línea. Agregué un cheque para lalongest
opción y si está deshabilitada, selecciona una entrada aleatoria usando el tiempo aleatorio del sistema. Si encuentra lalongest
opción, busca manualmente la entrada más larga del diccionario y la inserta.Si no le gusta el
<C-k>
mapeo, no dude en cambiarlo como mejor le parezca. Debería funcionar con cualquier mapeo que desee.Además, el comando para devolver la expresión para el mapeo para evaluar agrega un
\<esc>
carácter al final para que dejemos el modo de inserción automáticamente después de cada inserción, y un0cw
frente para ingresar al modo de inserción para comenzar y asegúrese de sobrescribir toda la palabra correctamente. Dependiendo del comportamiento exacto que desee (si sus palabras no están bien albcw
principio de cada línea), puede usar en su lugar para encontrar el comienzo real de la palabra. Sin embargo, verá algunas rarezas al volver a las palabras que comienzan la línea. Probablemente haya un comando más avanzado para ignorar el final de la línea y hacer ambas cosas a la vez, pero no pude encontrar una.Además, no sería difícil extender la lógica aquí para crear asignaciones alternativas (utilizando, por ejemplo, parámetros de función) que realicen cualquier función que proporcione el modo de inserción. Estaré encantado de ayudar con dichos requisitos y actualizar este script cuando tenga tiempo.
fuente
sleep
comando también?completeopt
como se describe en los comentarios (de nuevo, no por mí). edit : Vaya,'longest'
se requiere para elctrl-p
paso: noctrl-y
. Aún así, los pasos descritos por el que hace las preguntas me funcionanvim -Nu NONE
concompleteopt
editado.