代码之家  ›  专栏  ›  技术社区  ›  Benoit

使用vim的-W选项

vim
  •  6
  • Benoit  · 技术社区  · 15 年前

    -w -W

    -w{scriptout}您键入的所有字符都记录在文件中 “脚本输出”,直到退出Vim。 如果要创建 与“vim-s”一起使用的脚本文件 或“:source!”。当“脚本” 文件已存在,新字符 附加。另见 |复杂重复|。{scriptout}无法

    -W{scriptout}类似于-W,但不追加,覆盖现有文件。 {不在Vi中}

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

    我正在使用portableapps.com上的gvimportable.exe 7.3。与 -u NONE

    这个神奇的数字是干什么用的?在带有gvim.exe的Windows下,在删除这三个前导字节之前,我无法重播脚本

    这一功能可能非常有用,但似乎没有得到很好的证明。

    谢谢你的回答。

    2 回复  |  直到 15 年前
        1
  •  7
  •   Chris Morgan    15 年前

    (这个答案很可能是支离破碎的,我花了一段时间到处玩弄——我也想找到一个解决方案,因为它引起了我的兴趣——不仅仅是200:P的奖金。它或多或少地显示了我的思路和实验。)

    我现在可以用 gvim 在Linux上,它是 /usr/bin/vim.gnome -g ;运行方式 vim -g 也一样。


    深入研究代码: (在这种情况下,这是徒劳的,但做起来很有趣,学习起来也很有趣)

    我已经看过了源代码,现在可以稍微解释一下(但没有用!);它得到 outfile src/globals.h:1004 )套( src/main.h:2275 );然后写入 src/getchar.h:1501 ,在 updatescript 使用的方法 gotchars (第1215行)由 vgetorpeek ,用于 vgetc vpeekc ... (不,我不知道这是怎么回事!)然后这些被用在很多地方。

    不管怎样,我想钥匙在某个地方 src/gui.c ,但我现在不知道在哪里!也有可能一些关键序列正在被“发送”(我不知道是物理上的还是实际上的),但是由于问题在不同平台上是相同的,所以看起来更可能是Vim问题。


    有趣的情况 导致可能的解释:

    gvim -u NONE -w scriptout -c quit ( :quit gvim-u NONE-w脚本输出-c退出 :退出 ,从不显示GUI),文件scriptout为空。

    用X按钮关闭 ,不按任何键:

    0000000: 80fd 6280 fd63 80fd 62                   ..b..c..b
    

    如果打开gvm,请单击“离开”,单击“上一步”,然后使用 :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 对窗口执行操作(不记得它叫什么;将其全部滑入标题栏,应用程序内部失去键盘控制等)。 gvim ... (你知道这些论点!), < Ctrl+Alt+S (签约) (扩展) > 电子稳定控制系统 Z轴 为我制作这个:

    0000000: 80fd 6269 3c80 fd63 80fd 623e 1b5a 51    ..bi<..c..b>.ZQ
    

    总结: scriptout . 如果你认为不应该(或者想知道他们为什么会被留下来,或者他们是否注定要留下来,或者你是否应该关心他们),我想,问问Vim列表上的问题。

        2
  •  1
  •   Rich    15 年前

    我最好的猜测是这是gVim的GUI代码中的一个bug。

    使用gVim 7.3,如果我运行 gvim -u NONE -W scriptout 我明白了问题所在,但如果我跑 vim -u NONE -W scriptout 则不存在不需要的字节。

    我还测试了Linux中shell的Vim 7.2、Snow Leopard(7.2)中包含的Vim版本,以及macvim7.2的GUI和终端版本(使用 mvim -W /Applications/MacVim/Contents/MacOS/Vim -W ,它们都工作正常。

        3
  •  0
  •   jberryman    5 年前

    有人在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)