2012-03-25 12 views
4

ich suche eine php autocomplete-lösung für vim. Ich war schon bei diesem Thema: Vim PHP omni completion aber es funktioniert nicht für mich. I erzeugen, um die Tags-Datei mit diesem Bash-Skript:php autocomplete mit vim

#!/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/ 

aber die zum automatischen Vervollständigung ist nicht so wie gewünscht. Ich weiß nicht einmal, ob das Plugin geladen wird. Also, wie kann ich sehen, ob das Plugin geladen wird? (Das Plugin befindet sich unter Bundle, ich benutze Pathogen, und andere Plugins funktionieren ..) ist es notwendig, etwas anderes zu aktivieren? i VIM haben - IMproved Vi 7.3, Exuberant Ctags 5.8

dank

Antwort

0

Was die gewünschte Wirkung sein würde? Was erwartest du? Was bekommst du? Vim hat keine "Autocomplete" -Funktion: eine eigene Marke der Vervollständigung heißt "Omni Completion" und ist überhaupt nicht automatisch.

Ich habe das phpComplete-Skript, das in einer der Fragen der anderen Frage in Verbindung mit ctags verknüpft ist, seit einiger Zeit ohne Probleme verwendet. In der Tat habe ich die folgenden Beispiele geschrieben, in denen ich dachte, dass ich sie benutze, aber ich habe vergessen, dass ich vor einigen Wochen eine Reihe von Skripten und Plugins entfernt habe, einschließlich phpComplete.vim.

So funktioniert das folgende sehr gut mit Lager Vim 7.3/Exuberant Ctags 5.8.

Mit a.php:

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

und der Cursor wie in b.php

<?php 
    include 'a.php'; 

    $example = new MyClass(); 
    $example->| //cursor here 
?> 

<C-x><C-o> gibt mir diese Möglichkeiten:

say(f 
MyClass(f 

Ich bekomme keine kilometerlange Liste von eingebauten Funktionen und ich bekomme nicht einmal private Methoden.

+1

jep interessiert ist, würde dieses Verhalten Wunsch sein. benutze deinen code als test (plus ein paar statische vars), wenn ich bei $ example-> | drücke Ich bekomme eine lange Liste von Funktionen, wie ArrayIterator :: rewind oder PDO :: exec und so weiter. und wenn ich bei $ beispiel :: | drücken Ich bekomme die öffentlichen Funktionen. Noch eine Sache, wie hast du deine Tags generiert? – Juanolo

+0

Ich benutze ein einfaches ':! Ctags -R.', um meine' tags' Datei nach jedem ': w' zu erzeugen. Wie gesagt, ich habe keine PHP-bezogenen Plugins/Einstellungen mehr: Ich nutze Vims Standard-Omni-Completion in zwei leicht unterschiedlichen Vim 7.3-Builds auf Mac OS X und Ubuntu 10.10 in Verbindung mit denselben Exuberant Ctags 5.8 wie Sie und haben das gleiche Verhalten auf den beiden Setups. Es funktioniert genauso gut in der Vim 7.2, die ich auf einem Sandbox-VPS von mir habe. Stellen Sie sicher, dass Sie Ihre 'Tag'-Datei (neu-) generiert haben, bevor Sie' 'ausführen. – romainl

+0

vim hat Autocomplete-Funktion - Strg + N funktioniert ziemlich gut für bash & perl – Alexander

4

Ich habe auch versucht, PHP Autovervollständigung besser in Vim zu bekommen. Ich habe das phpcomplete.vim-Plugin benutzt, aber herausgefunden, dass es einen Fehler gab, wenn mehr als eine Tag-Datei verwendet wurde (was in den meisten vimrc-Konfigurationen nicht ungewöhnlich ist). In diesem Fall durchsucht es nur die erste Tagdatei, um den Klassen-Dateinamen aufzulösen, und dann Rückfälle auf die Standard-Vervollständigung (zeigt eine lange lange nicht Scope-Liste)

Allerdings habe ich das Plugin gegabelt und den Fehler behoben . Für mich funktioniert es jetzt wunderbar: https://github.com/sebastiankessler/phpcomplete.vim

0

Padawan mit Deoplete sind großartige Lösungen für eine robuste PHP-Autovervollständigung in Neovim. Für Vim können Sie Neocomplete anstelle von Deoplete verwenden.

Ich schrieb einen Artikel, wie ein Vim PHP IDE zu machen, wenn jemand :)