Я не думаю, что это так просто, но вы можете посмотреть код Ruby самостоятельно здесь:
https://github.com/igrigorik/vimgolf/tree/master/lib/vimgolf
Я вижу класс для кейлогинга, например.
Вот команда, которая используется для запуска vim
в lib / vimgolf / cli.rb :
vimcmd = GOLFVIM.shellsplit + %W{-Z -n --noplugin --nofork -i NONE +0
-u #{challenge.vimrc_path} -U NONE -W #{challenge.log_path} #{challenge.work_path}}
@statox был (почти) прав насчет -w outfile
... -W outfile
фактически, он переписывает файл, в который отправляются набранные символы, а не добавляется к нему. Но, как я уже сказал, не "все так просто" ... сравните содержимое одного из этих файлов и то, что генерируется инструментом vimgolf. Это из актуальной проблемы с вимгольфом ...
-W
вывод при копировании потом вставил сюда:
GI0. ý`gvgý`ZZ
Несколько непечатных символов потерялись в переводе.
-W
Вывести так, как это отображается на экране:
^VGI0. ^[<80>ý`gvg^A<80>ý`ZZ
Ну, это довольно уродливо.
vimgolf отображает / загружает вывод:
<C-V>GI0. <Esc>gvg<C-A>ZZ
Ааа, так лучше
Обновление: я потратил несколько минут на то, чтобы поближе взглянуть на вещи и получить пару новых фрагментов информации.
Во-первых, класс keylogger keylog.rb, о котором я упоминал выше, действительно является важной частью головоломки, но на самом деле он довольно прост. Коды клавиш, которые генерирует Vim и которые сохраняются в -W
файле журнала, представляют собой один или три байта (обозначаются значением первого байта 0x80), и для каждого из двух наборов существует карта хэша.
Однобайтовая версия отображает значение байта в строковое представление кода клавиши, например 0
или g
. Трехбайтовая версия аналогично отображается в строку (например, <Esc>
или <C-V>
), но использует в качестве ключа объединенные значения байтов два и три. Есть некоторые исключения / угловые случаи, которые обрабатываются по-разному, но подавляющее большинство кодов клавиш разрешаются с помощью простого поиска на этих двух картах.
Видя, насколько базовым был код регистратора ключей, я понял, что что-то не так с тем, что я видел в файлах журналов кодов ключей (например, в приведенном выше примере). Оказывается, я должен был использовать файл vimrc, требуемый правилами VimGolf. В частности, эта линия
set t_RV=
приводит к правильной регистрации. Пример «появляется на экране» выше на самом деле будет выглядеть так:
^VGI0. ^[gvg^AZZ
Теперь можно увидеть прямую линию от этой «сырой» строки до визуализированной формы VimGolf.