【问题标题】:Is there any way to enable code completion for Perl in vim?有什么方法可以在 vim 中为 Perl 启用代码完成?
【发布时间】:2010-09-08 10:05:38
【问题描述】:

令人惊讶的是,当您精通 vim 时,您可以比标准 IDE(例如 Eclipse)更快地编写代码。但我真正怀念的一件事是代码完成,尤其是对于长变量名和函数。

有没有办法在 vim 中为 Perl 启用代码完成?

【问题讨论】:

    标签: perl vim vi


    【解决方案1】:

    Ctrl-P(获取上一个匹配)和Ctrl-N(获取下一个匹配)是善良的伪代码完成。他们基本上搜索您正在编辑的文件(向后搜索 Ctrl-P,向前搜索 Ctrl-N)(和任何打开的缓冲区,如果你在你的 TAG 文件中使用 TAGS 任何东西)对于以你输入的内容开头的单词并添加一个下拉列表。即使不是智能感知,它对于变量和函数名称的效果也出奇的好。通常我使用 Ctrl-P 作为我要查找的变量或函数通常位于代码后面。此外,如果您打开同一个 Vim 副本,它会搜索您之前打开的文件。

    【讨论】:

    • 这对我来说非常有用,但我最近切换到了一个新的开发环境。现在不是只搜索我的开放缓冲区,而是搜索我的整个源代码树,这需要相当长的时间——而且只对 Perl 执行此操作。如何查看这个新环境是否正在使用 TAGS?我尝试了:tag 并得到了E73: tag stack empty。除了可能已启用的标签之外,还有其他东西吗?新环境还有一个稍微更新的 vim 版本。我想让它只搜索打开的缓冲区。
    【解决方案2】:

    嗯,Vim 的通用补全机制出奇的好,只需在插入模式下使用 Ctrl-N。此外,行补全非常方便,使用 C-x C-l。

    还可以查看vim script for perl

    【讨论】:

      【解决方案3】:

      Vim 7 支持全向补全。

      例如,我的 vimrc 中有这个

      autocmd FileType php set omnifunc=phpcomplete#CompletePHP
      

      然后,当我在插入模式下按 Ctrl-X Ctrl-O 时,我得到一个自动完成可能性的下拉列表。

      这是一个多功能函数for perl。不知道它的效果如何。

      【讨论】:

        【解决方案4】:

        Ctrl+N

        Perl Hacks 一书中对此进行了解释,以及如何完成包完成。强烈推荐。

        【讨论】:

          【解决方案5】:

          你应该看看 SuperTab 插件: http://www.vim.org/scripts/script.php?script_id=1643 它让您可以使用 tab 和 shift-tab 而不是 ^N 和 ^P 来完成(OmniCompletion 或常规完成)。

          【讨论】:

            【解决方案6】:

            其他答案之一中的 .vimrc 剪辑略有错误。要将 Tab 键变成自动完成键,请使用以下代码:

            inoremap <tab> <c-r>=InsertTabWrapper()<cr>
            
            function! InsertTabWrapper()
                let col = col('.') - 1
                if !col || getline('.')[col - 1] !~ '\k'
                    return "\<tab>"
                else
                    return "\<c-p>"
                endif
            endfunction
            

            你可以找到这个,以及大量的其他 vim 技巧in this thread at Perlmonks--它们链接到更多具有更多自定义的线程。

            【讨论】:

              【解决方案7】:

              如果您将以下内容添加到您的~/.vim/ftplugin/perl.vim文件:

              set iskeyword+=:
              

              然后它会自动完成模块名称等。

              【讨论】:

                【解决方案8】:
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-06-16
                • 2014-05-20
                • 2017-02-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多