26

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

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

4

8 回答 8

32

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

于 2008-09-10T13:59:16.263 回答
9

Vim 7 支持全向补全。

例如,我的 vimrc 中有这个

autocmd FileType php set omnifunc=phpcomplete#CompletePHP

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

这是perl的omnicfunc 。不知道它有多好用。

于 2008-09-10T14:03:45.817 回答
8

嗯,Vim 的通用完成机制出奇的好,只是在插入模式下使用Ctrl- 。N此外,使用 Cx Cl 完成行非常方便。

另请查看 perl 的这个vim 脚本

于 2008-09-10T14:00:04.670 回答
5

如果将以下内容添加到文件中,标准的Ctrl+NCtrl+效果会更好:P~/.vim/ftplugin/perl.vim

set iskeyword+=:

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

于 2008-09-16T18:00:36.587 回答
4

其他答案之一中的 .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 技巧——它链接到具有更多自定义的更多线程。

于 2008-09-16T14:13:34.213 回答
3

Ctrl+N

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

于 2008-09-10T14:05:30.210 回答
3

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

于 2008-09-15T14:41:37.587 回答
3

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

于 2009-11-27T19:39:40.510 回答