【问题标题】:How to tame Vim keyword (not omni) completion for Perl files?如何驯服 Perl 文件的 Vim 关键字(不是omni)完成?
【发布时间】:2014-01-25 23:15:51
【问题描述】:

[更新 06/2013:正如用户 doubleDown 所观察到的,我的术语错误:方便的 C-pC-n 击键不是 omni 完成(omnicompletion ),但是 关键字完成。我认为这里的 Vim 术语有点不幸:omni 是拉丁文的 every,而 keyword 似乎是一个更受限制的选择。 C-pC-n 默认的工作方式是完成散文的每个单词,而不仅仅是关键字。这让我觉得他们一定是omni补全,而不仅仅是keyword补全。]

嗯... :-) ... 只需输入我的问题标题,highly effective answer 就会出现在标题相似的问题目录中。 (这只是表明这个网站有多好!)无论如何我都会问这个问题 - 也许有人在商店里得到了一个更令人满意的答案......所以这里是:

Vim keyword omnicompletion (by default bound to C-p and C-n in edit mode) 是穷人的智能感知,在我的经验中几乎一样好。它在缓冲区中搜索匹配的字符串。

但是,一些文件类型脚本通过关键字 omnicompletion 执行包含文件的递归搜索而超出了顶部。 (更新: 搜索包含的文件实际上是默认设置,正如 :help 'complete' 从 Vim 7.3 中看到的那样;只是对于某些文件类型,包含了很多东西,这可能会导致速度变慢次优算法加剧。)因此,对于 Perl 脚本,它将开始搜索模块列表。递归。这很快就会退化为一些严重的扫描,你知道,磁盘 I/O 和所有那些丑陋的东西。

因此,我宁愿避免使用该功能,因为我不得不使用C-c 中断搜索,从而失去了我获得的时间和便利,这会在输出中留下一些随机字符串,然后我必须删除。

因此,目前最好的解决方案就是在默认补全中禁用包含文件的使用:

:set complete-=i    # remedy
:help 'complete'    # documentation

有什么要补充的吗?

【问题讨论】:

  • 使用 C++ 和 Boost,即使从 tmpfs 运行所有内容也很慢,使用 complete+=i...我总是运行 complete-=i
  • 很确定你说的是关键字完成,它不同于omnicompletion(通过C-XC-O使用)。我还没有完全理解omnicompletion,但到目前为止,解析语法文件的默认功能,我必须说,它非常不令人满意。
  • @doubleDown:我在说的是omnicompletion(这本身很好)触发对包含文件的递归搜索(当文件太多时可能会因为磁盘I/O而减慢你的速度) Perl 或 C++ 文件等可能会发生这种情况)。在我的问答中解决该问题。
  • 好吧,让我解释一下:C-pC-n 执行关键字补全(请参阅:h compl-generic),而C-x 然后C-o 执行全能补全(请参阅`:h compl-omni)。你根本没有使用omnicompletion。
  • @doubleDown:你说得对——多年来我一直把术语弄错了。我更新了我的问题以突出错误和差异。谢谢。

标签: perl vim omnicomplete


【解决方案1】:

如果你想多一点外科手术,你可以使用:

autocmd FileType perl set complete-=i

这样您只会影响 perl 代码的行为。

【讨论】:

    【解决方案2】:

    你应该使用 c9s 写的 perlomni。

    https://github.com/c9s/perlomni.vim

    http://www.vim.org/scripts/script.php?script_id=2852

    你可以看视频如何使用。

    http://www.youtube.com/watch?v=hZ7871WcIv0

    为了简单的方法,完成方法,输入一些东西和“->”,然后。

    #!perl
    use strict;
    use warnings;
    use DateTime;
    
    my $dt = DateTime->new;
    
    $dt->ye # type <c-x><c-o>, you'll get $dt->year
    

    【讨论】:

    • 谢谢。它似乎不适用于我的安装:Cygwin 上的 Vim 7.3.3,~/.vim/bin in PATH, filetype detection:ON plugin:ON indent:ON。 Vim 启动期间没有错误,但在按照 README 尝试 C-x C-o 时,我得到:Omni-Ergänzung (^O^N^P) Muster nicht gefunden,应该转换为 omni completion: pattern not found。无论如何,谢谢,这可能会演变成非常有用的东西。
    【解决方案3】:

    我想这个问题真的没有什么比我在我的问题中已经说过的更重要了:

    :set complete-=i    # remedy
    :help 'complete'    # documentation
    

    只是为了给这个多余的答案添加一些 Vim 新闻,我最近用漂亮的字体和一些很棒的插件为我的 Vim 配置(主要在 Windows 上使用 GVim)增添了趣味:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多