使用vim的-W选项

Ben*_*oit 6 vim

-w-WVIM的选项具有理论上的效果如下:

-w {scriptout}您输入的所有字符都记录在文件"scriptout"中,直到您退出Vim.如果要创建要与"vim -s"或":source!"一起使用的脚本文件,这将非常有用.当"scriptout"文件已存在时,将追加新字符.另见| complex-repeat |.{scriptout}不能以数字开头.{Vi无此功能}

-W {scriptout}与-w类似,但不附加,覆盖现有文件.{Vi无此功能}

但是当我这样做时,{scriptout}文件将始终以十六进制序列开头80 fd 60(有时是80 fd 62).

我在portableapps.com上使用gvimportable.exe 7.3.使用-u NONE开关,它也是如此.

这个"神奇数字"是什么?在Windows下使用gvim.exe我无法重播我的脚本,直到我删除了这三个前导字节...

似乎这个功能非常有用,但很难记录.

谢谢您的回答.

Chr*_*gan 6

(这个答案可能很显着,我花了一段时间玩 - 我也想找到一个解决方案,因为它引起了我的兴趣 - 不仅仅是200:P的恩惠.它或多或少地显示了我的思路和实验.)

我现在可以gvim在Linux上重现它,这是/usr/bin/vim.gnome -g; 正如vim -g同样的方式运行.


深入研究代码:(在这种情况下徒劳无功,但有趣并且学习如何做)

我查看了源代码,现在我可以解释一下(但没有用!); 它得到outfileFILE(src/globals.h:1004)set(src/main.h:2275); 然后这被写入到src/getchar.h:1501,在updatescript其中所使用的方法gotchars(线1215),这是使用vgetorpeek,其使用vgetcvpeekc...(不,我不知道这是怎么回事!),那么这些在使用一些地方.

无论如何,我想关键是在某个地方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
Run Code Online (Sandbox Code Playgroud)

如果您打开gvim,请单击"离开",然后单击"返回"并使用:q:

0000000: 80fd 6280 fd63 80fd 6280 fd2c 80fd 2e3a  ..b..c..b..,...:
0000010: 710d                                     q.
Run Code Online (Sandbox Code Playgroud)

所以我认为这是窗口事件在内部翻译成其他东西.80 fd 62是开放序列,80 fd 63 80 fd 62是紧密序列.

我已经找到了另一种触发方式80fd,这使我得到某种"用户可以访问窗口"的东西; 默认情况下,在Ubuntu中使用GNOME Ctrl+Alt+S,对窗口执行某些操作(无法记住它的内容;将其全部滑入标题栏,内部应用程序丢失键盘控件等).gvim ...(你知道参数!),i<Ctrl+Alt+S(简称)Ctrl+Alt+S(扩展)>Esc Z Q为我产生这个:

0000000: 80fd 6269 3c80 fd63 80fd 623e 1b5a 51    ..bi<..c..b>.ZQ
Run Code Online (Sandbox Code Playgroud)

总结:所以我们有我认为的解决方案; gVim以某种形式捕获窗口消息 - 无论是否应该 - 将它们放入其中scriptout.如果你认为它不应该(或者想知道为什么它们会被留下或者它们是否应该被关注或者你是否应该关心它们),我想在Vim列表上询问.