2012-09-25 12 views
7

Ich versuche, omni completion für PHP in vim 7.3 mit ctags 5.9 ~ svn20110310 auf Ubuntu 12.04.1 (LTS) einzurichten, aber ich stoße auf ein seltsames Problem, bei dem die Vervollständigung radikal andere Vorhersagen liefert Instanzen der gleichen Klasse.Omnicompletion hört auf, nützliche Vorhersagen zu geben

habe ich die folgenden zwei Dateien:

// Foo.php 
class Foo { 
     public function do_stuff() { 
       echo 'Working...'; 
     } 
} 

// index.php 
require 'Foo.php'; 
$f = new Foo(); 
$f->[cursor position 1] 

$g = new Foo(); 
$g->[cursor position 2] 

Wenn sich der Cursor in der Position 1 und I drücken CTRL + XCTRL + O es die Zeile mit do_stuff( wie wir comples würde erwarten. Aber wenn ich drücke CTRL +XCTRL +O in der zweiten Position erhalte ich eine Liste von Vorhersagen, die mit key, next, rewind beginnt. Was mache ich falsch?

+0

Wenn Sie STRG + X STRG + O in der zweiten Position drücken, ist der gesamte Code (einschließlich der '$ f -> [Cursorposition]') gültigen Code? –

+0

Ja, absolut. '$ f -> [Cursorposition 1]' verwandelt sich in '$ f-> do_stuff();' –

+0

Wird 'Foo' implementiert' Iterator'-Schnittstelle? – philix

Antwort

4

Edit: Im Hinblick auf Ihr besonderes Problem, wenn Sie eine alte Version von phpcomplete.vim haben, ist es möglich, dass Sie nur eine Variable richtig abzuschließen off entweder können es mit einem speziellen phpdoc-Tag-Kennzeichnung (see this question) oder indem Sie Ihre Tag-Datei neu generieren, nachdem Sie die Variable deklariert haben.

Aller Wahrscheinlichkeit nach machen Sie nichts falsch; Die PHP-Unterstützung in Ctags ist extrem einfach und nicht sehr streng, was leider auch bedeutet, dass die Vim-Unterstützung fehlt. Ein kurzer Blick auf das ctags Modul zeigt das Problem:

ctags/php.c

Das ist es. Nur ein paar relativ einfache reguläre Ausdrücke. Dieses Parser-Zeug am Boden wird nicht mehr benutzt, und tragischerweise war es schon sehr lange nicht mehr.

Das Problem ist die Tatsache, dass die Standard-Omnicomplete-Funktion für PHP in Vim bestenfalls hackish ist; genügt es zu sagen, dass es Wechsel zwischen allen offenen Fenstern als Teil seines Abschlusses Prozess beinhaltet (eine Praxis ausdrücklich von Vim Dokumentation verurteilt). Schauen Sie selbst:

phpcomplete.vim/autoload/phpcomplete.vim

ich mit schrecklichen PHP Abschluss in Vim für eine lange Zeit jetzt zu kämpfen haben und haben festgestellt, dass nichts weniger als eine komplette Überholung ein befriedigendes Ergebnis produzieren. Ich bin der ctags dev mailing list beigetreten, und ich habe vor, dort die PHP-Unterstützung zu verbessern, bevor ich daran arbeite, dass Vims Omnikompletion davon so gut wie möglich in einer interpretierten Sprache funktioniert. Für den Moment, leider, ist die Lösung zu warten, bis die Unterstützung besser ist, oder reparieren Sie es selbst.

Verwandte Themen