Answers:
他们可能使用内置参数-w
,请参见:h -w
:
-w {scriptout} All the characters that you type are recorded in the file
"scriptout", until you exit Vim. This is useful if you want
to create a script file to be used with "vim -s" or
":source!". When the "scriptout" file already exists, new
characters are appended. See also |complex-repeat|.
{scriptout} cannot start with a digit.
{not in Vi}
@B层编辑为指出实际代码使用的-W
参数与该参数基本相同,-w
但是日志文件被覆盖,而不是在其上附加击键(:h -W
):
-W {scriptout} Like -w, but do not append, overwrite an existing file.
{not in Vi}
-W
不是-w
(见我的答案),但仍...
-W
基本相同的文档进行更新。
我认为这不是那么简单,但是您可以在这里自己查看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工具生成的内容。这是来自实际的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>
),但使用字节二和三的组合值作为键。有一些例外情况/角落情况以不同的方式处理,但是绝大多数键码是通过在这两个图中的简单查找来解决的。
看到按键记录器代码的基础性很强,我可以判断出按键代码日志文件(例如上面粘贴的示例)中出现的错误。原来我应该使用VimGolf规则所需的vimrc文件。特别是这条线
set t_RV=
导致正确的日志记录。上面的“出现在屏幕上”示例实际上看起来像这样:
^VGI0. ^[gvg^AZZ
现在,您可以看到从此“原始”字符串到VimGolf呈现形式的直线。