Время от времени мне нравится участвовать в раунде вимгольфа . Это может быть поучительно.
Как они могут записывать все нажатия клавиш? Это должно быть особенность vim. Кто-нибудь есть идеи, как это сделать. Это может пригодиться для записи всего при определенных обстоятельствах.
Ответы:
Они, вероятно, используют встроенный параметр
-w
, см .:h -w
:Редактировать Как @B Layer указал, что фактический код использует
-W
параметр, который в основном такой же, как,-w
но файл журнала перезаписывается вместо добавления к нему нажатий клавиш (:h -W
):источник
-W
не так-w
(см. Мой ответ), но все же ...-W
которой в основном то же самое.Я не думаю, что это так просто, но вы можете посмотреть код Ruby самостоятельно здесь:
https://github.com/igrigorik/vimgolf/tree/master/lib/vimgolf
Я вижу класс для кейлогинга, например.
Вот команда, которая используется для запуска
vim
в lib / vimgolf / cli.rb :@statox был (почти) прав насчет
-w outfile
...-W outfile
фактически, он переписывает файл, в который отправляются набранные символы, а не добавляется к нему. Но, как я уже сказал, не "все так просто" ... сравните содержимое одного из этих файлов и то, что генерируется инструментом vimgolf. Это из актуальной проблемы с вимгольфом ...-W
вывод при копировании потом вставил сюда:Несколько непечатных символов потерялись в переводе.
-W
Вывести так, как это отображается на экране:Ну, это довольно уродливо.
vimgolf отображает / загружает вывод:
Ааа, так лучше
Обновление: я потратил несколько минут на то, чтобы поближе взглянуть на вещи и получить пару новых фрагментов информации.
Во-первых, класс keylogger keylog.rb, о котором я упоминал выше, действительно является важной частью головоломки, но на самом деле он довольно прост. Коды клавиш, которые генерирует Vim и которые сохраняются в
-W
файле журнала, представляют собой один или три байта (обозначаются значением первого байта 0x80), и для каждого из двух наборов существует карта хэша.Однобайтовая версия отображает значение байта в строковое представление кода клавиши, например
0
илиg
. Трехбайтовая версия аналогично отображается в строку (например,<Esc>
или<C-V>
), но использует в качестве ключа объединенные значения байтов два и три. Есть некоторые исключения / угловые случаи, которые обрабатываются по-разному, но подавляющее большинство кодов клавиш разрешаются с помощью простого поиска на этих двух картах.Видя, насколько базовым был код регистратора ключей, я понял, что что-то не так с тем, что я видел в файлах журналов кодов ключей (например, в приведенном выше примере). Оказывается, я должен был использовать файл vimrc, требуемый правилами VimGolf. В частности, эта линия
приводит к правильной регистрации. Пример «появляется на экране» выше на самом деле будет выглядеть так:
Теперь можно увидеть прямую линию от этой «сырой» строки до визуализированной формы VimGolf.
источник