Mostrar el historial de comandos con showcmd

11

Al usar set showcmdVim muestra comandos parciales en la última línea de la pantalla. Por ejemplo, en el modo Normal al escribir el comando, se dt.muestra la última línea dty luego, al presionar .el comando, se completa y, por lo tanto, no se muestra nada.

¿Hay alguna manera de mostrar comandos completos? Por ejemplo, al escribir dt.gU(, primero dt.se mostrará; y al comenzar a escribir el segundo comando, el primero se borrará, de modo que al final solo gU(se mostrará.

Esto podría ser útil, por ejemplo, para ilustrar GIF; y para verificar que escribiste lo que querías si enfrentas algún resultado inesperado.

Gonçalo Ribeiro
fuente
1
¿Qué es un comando completo? Se dtmuestra porque es el operador actual pendiente. Una vez que se le da una moción, ya no es un operador pendiente. Supongamos que fuimos más allá y lo hicimos más dt.gU(gu)dawo menos. ¿Es todo ese "un comando completo", o son cuatro comandos completos, o algo más?
davidlowryduda
@mixedmath para mí que contaría como 4 comandos. El segundo párrafo de la respuesta intenta desambiguar lo que quiero decir.
Gonçalo Ribeiro
2
Desde la perspectiva de Vim, dt.gU(hay 2 comandos: dt. y gU(... Entonces, lo que realmente quieres es mostrar algún tipo de historial de comandos (Vim ya muestra los "comandos completos").
Martin Tournoij
@Carpetsmoker, sí, eso podría ser lo que quiero. Gracias por editar el título de la pregunta.
Gonçalo Ribeiro
3
He estado hurgando en el código fuente de Vim trabajando en el historial normal . En src/normal.clas llamadas de código clear_showcmd()en varios lugares ( normal_cmd(), do_pending_operator(), end_visual_mode()). Estoy jugando con volcar en un archivo showcmd_bufen esos puntos, que se veía bastante bien, pero me hace estar bastante seguro de que no puede obtener lo que quiere sin modificar de manera similar el código fuente de Vim y reconstruirlo. Por supuesto, hacerlo podría valer la molestia de hacer tus gifs.
John O'M.

Respuestas:

9

No pude encontrar ninguna manera de hacer esto en un Vim normal. Sin embargo, si está dispuesto a parchear Vim, lo siguiente puede funcionar para usted.

El parche muy simple (aplicado contra Vim-7.4.052) deshabilita la actualización real de la pantalla que borra el historial al final de un comando normal. Lo hace devolviendo si showcmd_is_clearse configura o no antes de actualizar la pantalla. (alternativamente, puede comentar la declaración if y dejar solo la returnlínea original . nota : El parche a continuación no se pegó muy bien; puede que tenga que aplicar esto a mano, aunque es solo una línea corta. nota : yo no comento hacia fuera la real display_showcmd(), ya que parece ser utilizado en modo visual para actualizar la visualización del número de líneas seleccionadas o de otros posiblemente otras cosas que no he probado ampliamente esta..

--- src/normal.c    2015-02-14 00:21:23.286352257 -0500
+++ src/normal.c    2015-02-14 00:21:25.238352173 -0500
@@ -4029,6 +4029,7 @@
    /* Don't actually display something if there is nothing to clear. */
    if (showcmd_is_clear)
        return;
+   return;
     }

     display_showcmd()

El resultado se ve así:

Screencast que muestra el parche

Algunas cosas interesantes a tener en cuenta:

  • Esto demuestra hasta los movimientos más simples, como j, k, b, etc.
  • El xcomando en realidad se convierte dlen showcmd_buf.
  • Los comandos que cambian la línea inferior borran el área showcmd (por ejemplo, usando el :comando o ingresando al modo de inserción (al menos en mi configuración))
  • El programa de captura dejó de grabar muchos trazos después de que escribí un ", pero mi secuencia de teclas es visible en la ventana vim para mi registro largo especificado.
  • No se muestra en el reparto, pero golpear escen modo normal se muestra ^[en el área showcmd
John O'M.
fuente
4

Además de la solución de John , hay otra forma de mostrar todas las pulsaciones de teclas vim que se presionaron mediante el uso de -wparámetros que registran todos los caracteres que escribe en el archivo. El problema es que vim escribe pulsaciones de teclas solo cuando sale de Vim. Así es como funciona VimGolf .

Para solucionar esto, a Kana Natsuno se le ocurrió este parche de una sola línea , que deshabilita el almacenamiento en búfer de la -wopción, por lo que tiene acceso a la secuencia de pulsaciones de teclas en tiempo real. Entonces es cuestión de leerlos (p tail -f. Ej. ), Analizarlos o puede intentar mostrarlos en la barra de estado ( :set statusline).

Echa un vistazo a una compilación personalizada de Vim usando la rama de pulsaciones de teclas live-stream de Drew de MacVim, para obtener la secuencia de pulsaciones de teclas en tiempo real.

Fuente: Vimprint, un analizador de pulsación de teclas Vim en el blog Drew Neil

Esto es útil si desea revelar las pulsaciones de teclas presionadas por Vim en video tutoriales o GIF.

kenorb
fuente