vim的-w
和-W
选项理论上具有以下效果:
-w {scriptout}您键入的所有字符都记录在文件中 “scriptout”,直到你退出Vim。 如果要创建,这很有用 与“vim -s”一起使用的脚本文件 或“:来源!”。当“脚本” 文件已存在,新字符 附加。也可以看看 |复杂的重复|。 {scriptout}不能 从一个数字开始。 {不在Vi}
-W {scriptout}与-w类似,但不附加,覆盖现有文件。 {不在Vi}
但是当我这样做时,{scriptout}文件将始终以十六进制序列开头,如80 fd 60
(有时它是80 fd 62
)。
我正在使用portableapps.com上的gvimportable.exe 7.3。使用-u NONE
开关,它也会一样。
这个“神奇数字”是什么?在带有gvim.exe的Windows下,在删除这三个前导字节之前,我无法重播我的脚本...
这个功能似乎非常有用,但很难记录下来。
感谢您的回答。
答案 0 :(得分:6)
(这个答案很可能是支离破碎的,我花了一段时间玩 - 我想找到一个解决方案,因为它引起了我的兴趣 - 不仅仅是200:P的恩惠。它或多或少显示了我的思路和实验。)
我现在可以在Linux上使用gvim
重现它,/usr/bin/vim.gnome -g
;以vim -g
运行也是一样的。
深入研究代码:(在这种情况下徒劳无功,但有趣并且学会怎么做)
我查看了源代码,现在我可以解释一下(但没有用!);它获取outfile
FILE(src/globals.h:1004
)集(src/main.h:2275
);然后将其写入src/getchar.h:1501
updatescript
方法,gotchars
方法由vgetorpeek
使用(第1215行),由vgetc
使用,由{{1}使用}和vpeekc
...(不,我不知道这是怎么回事!)然后在很多地方使用它们。
无论如何,我想钥匙在src/gui.c
的某处,但我不知道现在在哪里!一些关键序列也可能被“发送”(物理上或虚拟地,我不知道),但看到跨平台的问题是相同的,看起来更像是Vim问题而不是其他问题。
有趣的情况导致可能的解释:
同样值得注意的是,如果您自动退出,gvim -u NONE -w scriptout -c quit
(加载后:quit
)或gvim -u NONE -w scriptout -c quit
(即时:quit
,从不显示GUI),文件脚本留空了。
此外,如果你打开gvim然后使用X按钮关闭它,按下无键:
0000000: 80fd 6280 fd63 80fd 62 ..b..c..b
如果您打开gvim,请点击离开,然后点击返回并使用:q
:
0000000: 80fd 6280 fd63 80fd 6280 fd2c 80fd 2e3a ..b..c..b..,...:
0000010: 710d q.
所以我认为窗口事件在内部被翻译成其他东西。 80 fd 62
是开放序列,80 fd 63 80 fd 62
是紧密序列。
我发现了另一种触发80fd
的方式,这导致我某种“用户可以访问窗口”的事情;默认情况下,在Ubuntu中使用GNOME, Ctrl + Alt + S 对窗口执行某些操作(无法记住它的名称;将其全部滑入标题栏,app内部失去键盘控制等) 。 gvim ...
(你知道参数!), i < Ctrl + Alt + S (简称) Ctrl + Alt + S (已扩展)> Esc Z Q 为我生成这个:
0000000: 80fd 6269 3c80 fd63 80fd 623e 1b5a 51 ..bi<..c..b>.ZQ
摘要:所以我们有我认为的解决方案; gVim以某种形式捕获窗口消息 - 无论是否应该 - 将它们放入scriptout
。如果你认为它不应该(或者想知道它们为什么会被留下或者它们是否应该是什么意思,或者你是否应该关心它们),我想在Vim列表上询问。
答案 1 :(得分:1)
我最好的猜测是,这是gVim的GUI代码中的一个错误。
使用gVim 7.3,如果我运行gvim -u NONE -W scriptout
,那么我会看到问题,但是如果我运行vim -u NONE -W scriptout
则不存在不需要的字节。
我还测试了Linux中的shell中的Vim 7.2,Snow Leopard(7.2)中包含的Vim版本,以及MacVim 7.2的GUI和终端版本(分别带有mvim -W
和/Applications/MacVim/Contents/MacOS/Vim -W
)他们都正常工作。
答案 2 :(得分:0)
有人在vimgolf项目中为我们完成了艰苦的工作,尤其是这个经过评论的文件:https://github.com/igrigorik/vimgolf/blob/master/lib/vimgolf/lib/vimgolf/keylog.rb
0x80
以转义序列表示,用于特殊的两字节代码。在这种情况下,它们代表gvim焦点事件。参见here:
# If you use gvim, you'll get an entry in your keylog every time the
# window gains or loses focus. These "keystrokes" should not show and
# should not be counted.
"\xfd\x60" => nil, # 7.2 Focus Gained compat
"\xfd\x61" => nil, # Focus Gained (GVIM) (>7.4.1433)
"\xfd\x62" => nil, # Focus Gained (GVIM)
"\xfd\x63" => nil, # Focus Lost (GVIM)