【问题标题】:Vim for php frameworks用于 PHP 框架的 Vim
【发布时间】:2016-01-29 11:10:37
【问题描述】:

我已经花了两天时间尝试用 VIM 为一个框架创造一个良好的工作环境,在本例中是 laravel。

一切都是完美的,但有一个非常重要的问题:

  • 我无法让omnicomplete 正常工作

我已经尝试了通过 google 找到的所有内容:

-phpcomplete:尽管在我的其他项目中运行良好,但似乎对作曲家很生气。不识别框架的外观和常用方法。

-ctags:对一些方法有帮助,但仍然对全补全有帮助。

-phpcomplete-extended 和 phpcomplete-extended for laravel:作者不再维护这个插件(合乎逻辑,因为框架变化如此之快)所以不再工作了。

-PIV,使用标准 phpcomplete,所以同样的问题。

-padawan.php 我无法让它工作,恕我直言,文档记录不佳

是否有任何 vim 用户可以设法正确获得全功能完成功能? 我开始认为我应该离开 vim,因为它还没有为这些新技术做好准备:'(

Grep AppServiceProvidertags 文件:

AppServiceProvider app/Providers/AppServiceProvider.php /^class AppServiceProvider 扩展 ServiceProvider$/;" c 命名空间:Furbook\Providers Furbook\Providers app/Providers/AppServiceProvider.php /^namespace Furbook\Providers;$/;" n 启动应用程序/Providers/AppServiceProvider.php /^ 公共职能 boot()$/;" f 类:Furbook\Providers::AppServiceProvider 注册 app/Providers/AppServiceProvider.php /^ 公共函数 register()$/;" f 类:Furbook\Providers::AppServiceProvider

【问题讨论】:

  • 有报道说 ctags 可以正常工作 *.com/a/9864307 你能详细说明为什么它不适合你吗?
  • 它给了我一长串方法(来自其他类),奇怪的是没有列出我需要的方法,一团糟。此外,不会自动完成课程。如果有人尝试过,就会明白我在说什么
  • 尝试你给出的例子,它发生的正是 OP cmets,一长串方法。

标签: php laravel vim frameworks ctags


【解决方案1】:

这是我最关心的问题之一,以下是我的首选:

  1. Phpactor。我目前的选择,效果很好,它的主要开发人员非常活跃。速度快并且有很多重构工具。非常适合作曲家项目。

  2. ctags 我使用了phpcompletectags(为php 打了补丁),但仍然没有为外墙自动完成,我用Laravel 5 IDE Helper Generator 解决了这个问题。想法是先生成一个_ide_helper.php 文件,其中包含外观的类和方法,然后创建标签。

我还在我的vimrc中创建了一个函数,所以我可以自动生成标签。

function! GenTags()
    if isdirectory("./vendor")
    echo '(re)Generating framework tags'
    execute "!php artisan ide-helper:generate"
    echo '(re)Generating tags'
    execute "!ctags -R --filter-terminator=php"
    else
    echo 'Not in a framework project'
    if filereadable("tags")
    echo "Regenerating tags..."
    execute "!ctags -R --filter-terminator=php"
    else
    let choice = confirm("Create tags?", "&Yes\n&No", 2)
    if choice == 1
    echo "Generating tags..."
    execute "!ctags -R --filter-terminator=php"
    endif
    endif
    endif

    :endfunction

    command! -nargs=* GenTags call GenTags()
GenTags()
  1. 爬升

--安装eclipse,不要使用eclipse安装器,直接解压比较好

--安装eclim,使用eclim installer

-- 要完整的代码完成,请将您的模型更改为扩展 Eloquent而不是 Model

--还有插件YouCompleteMe(你可以试试其他的)

  1. PHP 语言服务器 它比 ctags 更好、更自动化。

尽管自动补全仍然比 eclipse (eclim) 差一点,但 PHP 语言服务器是在 PHP 上开发的,这意味着很多 PHP 用户可以为该项目做出贡献,并且非常活跃和改进。

插件 'roxma/nvim-completion-manager'

" (可选)javascript

插件 'roxma/nvim-cm-tern', {'do': 'npm install'} "

"(可选)语言服务器协议框架

插件 'autozimu/LanguageClient-neovim', { 'do': ':UpdateRemotePlugins' } "

"(可选)通过 LanguageClient-neovim 完成 php

Plug 'roxma/LanguageServer-php-neovim', {'do': 'composer install && composer run-script parse-stubs'}

如果有人想了解更多,可以在 github 上查看我的vimrc

【讨论】:

  • 你好,你能提供视频你是怎么实现的,因为我尝试安装eclim但它似乎不起作用,它没有完成任何东西。
  • 您是否遵循了项目的自述文件?安装后,您必须启动执行!~/eclipse/eclimd (或您的任何位置)的守护程序。顺便说一句,我会尝试改进自述文件,但我不能告诉你什么时候:/
【解决方案2】:

说到padawan.php 确实是关于文档,我没有花足够的时间让它或多或少有用,但是padawan 的安装应该没有那么难:

  1. 通过composer global require mkusher/padawan安装padawan.php
  2. 配置您的 $PATH
  3. 安装padawan.vim
  4. 为您的项目生成索引

我不确定 Laravel 项目是否可以开箱即用,或者您仍然需要 ide 助手,但一般的 php 东西应该可以正常工作。

【讨论】:

  • 我目前对我的设置很满意,但很高兴知道。有一天我可能会再试一次。谢谢
【解决方案3】:

免责声明:我不是 PHP 程序员,我对 PHP 一无所知。

首先,如果自动完成机制对您的工作至关重要,那么您可能应该为您正在使用的编程语言选择合适的 IDE。 Vim 包含一个用于自动完成的框架,这并不意味着它适用于所有支持的语言。即使有可用的全功能完成功能,您的里程也可能会有所不同,具体取决于它的开发程度。

根据我在其他问题中收集到的信息(尤其是 Vim PHP omni completion),最好的 PGP 补全插件是 phpcomplete,所以我已经安装了它。

然后我从 here 下载了 laraval 并使用以下命令运行 ctags 5.9~svn20110310(在 Debian Jessie 中可用):

ctags -R --filter-terminator=php

使用以下测试文件:

<?php
  $example = new AppServiceProvider();
  $example->
?>

当我按i_ctrl-x_ctrl-o 时,我得到以下建议:

boot(     f )
register( f )

可以看出,方法列表并不长。

我也尝试使用 Universal Ctags,其中包含 phpcomplete 插件所需的补丁,但为了使其正常工作,我必须使用以下语法:

ctags -R --fields=+aimS-s --filter-terminator=php .

也就是说,需要额外的-s。 也许您可以从这里开始工作并在您的环境中进行更详细的测试。

【讨论】:

  • 我已经按照您的建议尝试了重新生成标签的示例:首先,一旦我写了AppS.,我就无法自动完成课程。然后,当$example-&gt; 时,我看到了一大堆方法。只要有可能(今天下午或明天),我就会更多地使用它来重新安装你所说的一切。顺便说一句,谢谢
  • 当完成列表出现时,请查看屏幕的左下角。它应该告诉您完成的类型。我几乎可以肯定它说的是关键字完成而不是全能完成。
  • 很遗憾没有,检查一下img
  • 另外,很明显 phpcomplete 正在尝试某种“智能”完成,如您所见,所有建议都是 f(方法或函数)
  • 请根据标签文件分享该类名的 grep 输出。
最近更新 更多