我正在尝试在Vim中实现PHP自动补全功能。现在,当我执行$blog = new Blog(); $blog->,然后点击CTRL+X CTRL+O时,我希望omnicompletion返回Blog类中的所有函数。
相反,它返回整个项目的所有函数。我为我的项目构建了ctag,如下所示:ctags -R *
有没有办法让自动补全能感知上下文?
发布于 2010-10-13 09:06:39
catchmeifyoutry's answer指出了一种变通方法,在您使用omnicomplete的行前添加一个注释,例如/* @var $myVar myClass */,但是这很麻烦,而且对于编写注释所需的时间来说,您还不如自己编写函数名。
解决方案: phpComplete
这是一个Vim脚本:phpComplete
您仍然需要为您的类生成一个标记文件,但是您可以在该文件中使用omni complete,如下所示(根据脚本页面上的描述进行修改);
此修补程序允许文件内检查,因此您不需要注释。
$blog =新博客;... $blog->Blah();// <--完整无注释
它还允许支持单例实例化:
$instance =类::getInstance();$instance->completeMe();//甜蜜完成
发布于 2009-08-04 01:10:32
" Assuming Vim 7 (full version) is installed,
" adding the following to your ~/.vimrc should work.
filetype plugin on
au FileType php set omnifunc=phpcomplete#CompletePHP
" You might also find this useful
" PHP Generated Code Highlights (HTML & SQL)
let php_sql_query=1
let php_htmlInStrings=1
" Hope this helps!(通过http://www.linuxquestions.org/questions/linux-software-2/vim-omin-completion-for-php-621940/#post3155311)
发布于 2010-02-23 15:45:22
只有当标记文件同时包含类定义和变量声明时,Omnicompletion才会起作用。
简单的解决方案
通常,这意味着在尝试$blog-> <C-X><C-O>之前,您需要在class Blog { ... }和$blog = new Blog();部件之后保存并(重新)生成标记文件。这是因为PHP omni-complete函数将在标记文件中查找$blog变量的类声明。
(顺便说一句,如果您在缓冲区中打开了标记文件,请在重新生成它后重新加载它。)
替代
vim文档(:help ft-php-omni)还定义了一种方法,它不需要在标记文件中索引变量,而是使用前一行中的特定注释:
/* @var $myVar myClass */
$myVar->但是,类定义仍然需要在标记文件中,并且每次要使用omni-complete时都需要注释。所以输入一个新的PHP文件仍然不会给你一个好的全补全功能:(
只是一个思想的
也许可以只为未保存的缓冲区动态生成一个临时标记文件(如taglist插件),并允许omni-complete使用它??不过我不是一个很棒的vim黑客。
https://stackoverflow.com/questions/1224838
复制相似问题