【问题标题】:php autocomplete with vim用 vim 自动完成 php
【发布时间】:2012-04-09 11:01:48
【问题描述】:

我正在寻找 vim 的 php 自动完成解决方案。我已经在这个线程: Vim PHP omni completion 但这对我不起作用。 我用这个 bash 脚本生成标签文件:

#!/bin/bash
exec ctags -V -f tags \
-h \".php\" -R \
--exclude=\"\.git\" \
--totals=yes \
--language-force=PHP \
--tag-relative=yes \
--PHP-kinds=+cfiv \
--regex-PHP='/(abstract)?\s+class\s+([^ ]+)/\2/c/' \
--regex-PHP='/(static|abstract|public|protected|private)\s+(final\s+)?function\s+(\&\s+)?([^ (]+)/\4/f/' \
--regex-PHP='/interface\s+([^ ]+)/\1/i/' \
--regex-PHP='/\$([a-zA-Z_][a-zA-Z0-9_]*)/\1/v/' \
kernel/classes/

但自动完成功能并不理想。我什至不知道插件是否正在加载。 那么,如何查看插件是否正在加载? (插件位于捆绑包下,我使用病原体,其他插件也可以工作..) 有必要激活其他东西吗? 我有 VIM - Vi IMproved 7.3,Exuberant Ctags 5.8

谢谢

【问题讨论】:

    标签: php vim autocomplete


    【解决方案1】:

    我还尝试让 php 自动完成功能在 vim 中更好地工作。我使用了 phpcomplete.vim 插件,但发现在使用多个标签文件时存在错误(这在大多数 vimrc 配置中并不罕见)。 在这种情况下,它只是搜索第一个标记文件来解析类文件名,然后回退到标准完成(显示一个长长的不知道范围的列表)

    但是,我已经分叉了插件并修复了错误。对我来说,它现在工作得很好: https://github.com/sebastiankessler/phpcomplete.vim

    【讨论】:

      【解决方案2】:

      如果您的项目是作曲家项目,请查看我的 phpcomplete-extended 插件。对于 Symfony2 和 Laravel 项目,还分别检查 phpcomplete-extended-symfonyphpcomplete-extended-laravel 插件。

      【讨论】:

        【解决方案3】:

        PadawanDeoplete 是在 Neovim 中实现强大的 PHP 自动补全的绝佳解决方案。对于 Vim,您可以使用 Neocomplete 而不是 Deoplete。

        如果有人感兴趣,我写了一篇文章如何制作Vim PHP IDE :)

        【讨论】:

        • Neocomplete 不再维护,但 Deoplete 与 Vim8 兼容
        【解决方案4】:

        想要的效果是什么?你能指望什么?你得到了什么? Vim 没有“自动完成”功能:它自己的完成品牌称为“全能完成”,根本不是自动的。

        我一直在使用链接在另一个问题的答案之一中的 phpComplete 脚本以及 ctags 很长一段时间没有问题。事实上,我写了以下示例,以为我正在使用它,但我忘记了几周前我已经删除了一堆脚本和插件,包括phpComplete.vim

        因此,以下内容非常适用于普通 Vim 7.3/Exuberant Ctags 5.8。

        a.php

        <?php
          class MyClass {
            public function MyClass(argument) {
              echo 'Hello.';
            }
            private function secret() {
              echo 'Shhhh…';
            }
            public function say() {
              echo 'what?';
            }
          }
        ?>
        

        b.php

        中指示的光标
        <?php
          include 'a.php';
        
          $example = new MyClass();
          $example->| //cursor here
        ?>
        

        &lt;C-x&gt;&lt;C-o&gt; 给了我这些选择:

        say( f
        MyClass( f
        

        我没有得到一英里长的内置函数列表,我什至没有得到私有方法。

        【讨论】:

        • jep,这种行为会很受欢迎。当我在 $example->| 处按 时,使用您的代码作为测试(加上一些静态变量)我得到一长串函数,比如 ArrayIterator::rewind 或 PDO::exec 等等。如果我按 $example::|我确实得到了公共职能。还有一件事,你是如何生成标签的?
        • 我使用一个简单的:!ctags -R . 在每个:w 之后生成我的tags 文件。就像我说的,我不再有任何与 PHP 相关的插件/设置:我在 Mac OS X 和 Ubuntu 10.10 上的两个稍微不同的 Vim 7.3 构建中使用 Vim 的默认全向补全以及与您相同的 Exuberant Ctags 5.8 并拥有两种设置的行为相同。它在我的沙盒 VPS 上的 Vim 7.2 中也能正常工作。确保在执行 &lt;C-x&gt;&lt;C-o&gt; 之前(重新)生成了 tags 文件。
        • vim 确实有自动完成功能 - Ctrl + N 对 bash 和 perl 非常有效
        • 和youcompleteme插件自动化ctrl+n
        猜你喜欢
        • 2011-10-22
        • 2023-03-30
        • 2011-07-22
        • 2016-07-31
        • 2012-07-31
        • 2012-12-29
        • 2012-09-01
        • 2013-01-17
        • 1970-01-01
        相关资源
        最近更新 更多