使用vim的-W选项

时间:2010-10-20 19:25:39

标签: vim

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下,在删除这三个前导字节之前,我无法重播我的脚本...

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

感谢您的回答。

3 个答案:

答案 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)