有什么方法可以在vim中为Perl启用代码完成吗?

时间:2020-03-05 18:50:44  来源:igfitidea点击:

出乎意料的是,随着我们对vim的熟练掌握,我们可以比标准的IDE(例如Eclipse)更快地进行编码。但是我真正想念的一件事是代码完成,尤其是对于长变量名和函数。

有什么方法可以在vim中为Perl启用代码完成功能吗?

解决方案

回答

Ctrl-P(获取上一个匹配项)和Ctrl-N(获取下一个匹配项)都是伪代码完成。他们基本上是在文件(搜索" Ctrl"至" P",向后搜索" Ctrl"至" N")中搜索正在编辑的单词(以及任何打开的缓冲区,如果我们在TAG文件中使用TAGS,则搜索)。从我们输入的内容开始,然后添加一个下拉列表。即使不是智能感知,它对于变量和函数名称也能出奇地好。通常我使用Ctrl-P作为变量或者函数,通常在代码后面。另外,如果我们保持打开同一个Vim副本,它将搜索我们以前打开的文件。

回答

好吧,Vim的通用完成机制非常好,仅在插入模式下使用Ctrl-N即可。同样,使用C-x C-1可以很方便地完成生产线。

还可以检查一下vim脚本中的perl。

回答

Vim 7支持全能完成。

例如,我的vimrc中有这个

autocmd FileType php set omnifunc=phpcomplete#CompletePHP

然后,当我在"插入"模式下按Ctrl-x Ctrl-o时,会出现一个自动完成可能性的下拉列表。

这是perl的omnicfunc。但不知道它的运作情况如何。

回答

Ctrl + N

Perl Hacks一书中对此进行了说明,以及如何完成软件包。强烈推荐。

回答

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

回答

其他答案之一中的.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

我们可以在Perlmonks的该线程中找到它以及大量其他vim技巧-它们链接到具有更多自定义项的更多线程。

回答

如果在〜/ .vim / ftplugin / perl.vim文件中添加以下内容,则标准的CTRL-N和CTRL-P会更好地工作:

set iskeyword+=:

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

回答

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