De vez en cuando me gusta participar en una ronda de vimgolf . Puede ser esclarecedor.
¿Cómo pueden grabar todas las pulsaciones de teclas? Esa debe ser una característica vim. Alguien alguna idea de cómo hacer eso. Podría ser útil grabar todo en ciertas circunstancias.
key-bindings
user-input
Miguel
fuente
fuente
Respuestas:
Probablemente usan el parámetro incorporado
-w
, ver:h -w
:Editar como @B Layer señaló que el código real usa el
-W
parámetro que es básicamente el mismo-w
pero que el archivo de registro se sobrescribe en lugar de agregarle las teclas (:h -W
):fuente
-W
no-w
(véase mi respuesta) pero aún así ...-W
cual es básicamente el mismo.No creo que sea tan simple, pero puedes ver el código Ruby tú mismo aquí:
https://github.com/igrigorik/vimgolf/tree/master/lib/vimgolf
Veo una clase para keylogging, por ejemplo.
Aquí está el comando que se usa para iniciar
vim
en lib / vimgolf / cli.rb :@statox tenía (casi) razón sobre
-w outfile
...-W outfile
, en realidad, que sobrescribe el archivo al que se envían los caracteres escritos en lugar de agregarlo. Pero como dije, no es "tan simple" ... compare el contenido de uno de esos archivos y lo que genera la herramienta vimgolf. Esto es de un problema real de vimgolf ...-W
salida cuando se copia y luego se pega aquí:Varios caracteres no impresos se "perdieron en la traducción".
-W
salida como aparece en la pantalla:Bueno, eso es un poco feo.
Salida de vimgolf mostrada / cargada:
Ahh, eso está mejor.
Actualización: pasé unos minutos mirando un poco más de cerca las cosas y tengo un par de nuevas piezas de información.
Primero, la clase keylogger keylog.rb que menciono anteriormente es de hecho una pieza importante del rompecabezas, pero en realidad es bastante sencilla. Los códigos de tecla que emite Vim y que se guardan en el
-W
archivo de registro son de un byte o tres bytes (indicado por un primer valor de byte de 0x80) y hay un mapa hash para cada uno de los dos conjuntos.La versión de un byte asigna el valor del byte a una representación de cadena del código clave como
0
og
. La versión de tres bytes se asigna de manera similar a una cadena (por ejemplo,<Esc>
o<C-V>
) pero utilizando como clave los valores combinados de los bytes dos y tres. Hay algunas excepciones / casos de esquina que se manejan de manera diferente, pero la gran mayoría de los códigos clave se resuelven mediante búsquedas simples en estos dos mapas.Al ver cuán básico era el código del registrador de claves, pude notar que algo andaba mal con lo que estaba viendo en los archivos de registro del código de claves (como el ejemplo pegado anteriormente). Resulta que debería haber usado el archivo vimrc requerido por las reglas de VimGolf. En particular esta línea
da como resultado el registro correcto. El ejemplo anterior "aparece en pantalla" en realidad se vería así:
Ahora se puede ver la línea recta desde esta cadena "en bruto" hasta la forma renderizada de VimGolf.
fuente