2012-09-25 14 views
7

Sto provando a configurare il completamento omni per PHP in vim 7.3 con ctags 5.9 ~ svn20110310 su Ubuntu 12.04.1 (LTS) ma sto correndo in un problema molto strano dove il completamento fornisce previsioni radicalmente differenti per istanze della stessa classe.Omnicompletion smette di fornire previsioni utili

ho i seguenti due file:

// 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] 

Quando il cursore si trova in posizione 1 e premere CTRL + XCTRL + O è comples la linea con do_stuff( come noi mi aspetterei. Ma quando premo CTRL +XCTRL +O in seconda posizione ho un elenco di previsioni che inizia con key, next, rewind. Che cosa sto facendo di sbagliato?

+0

Quando si preme CTRL + X CTRL + O nella seconda posizione è tutto il codice precedente (incluso il codice valido '$ f -> [posizione del cursore]')? –

+0

Sì, assolutamente. '$ f -> [posizione del cursore 1]' si trasforma in '$ f-> do_stuff();' –

+0

Does 'Foo' implementa l'interfaccia' Iterator'? – philix

risposta

4

Edit: Per quanto riguarda il problema specifico, se si dispone di una vecchia versione di phpcomplete.vim, è possibile che si può solo completare correttamente fuori una variabile o contrassegnando con un tag speciale phpdoc (see this question) o rigenerando il file dei tag dopo aver dichiarato la variabile.

Con ogni probabilità, non si sta facendo nulla di sbagliato; il supporto PHP in ctags è estremamente semplice e non molto rigoroso, il che significa purtroppo che anche il supporto di Vim è carente. Un rapido sguardo al modulo di ctags illustra il problema:

ctags/php.c

Questo è tutto. Solo un paio di espressioni regolari relativamente semplici. Quella roba del parser in fondo non è più usata, e tragicamente non è stata per molto tempo.

Ad aggravare il problema è il fatto che la funzione omnicomplete standard per PHP in Vim è al massimo trucchetto; basti dire che coinvolge lo tra tutte le finestre aperte come parte del suo processo di completamento (una pratica esplicitamente condannata dalla documentazione di Vim). Date un'occhiata voi stessi:

phpcomplete.vim/autoload/phpcomplete.vim

ho lottato con il completamento PHP terribile in Vim per un lungo tempo e hanno determinato che a dir poco una revisione completa produrrà un risultato soddisfacente. Ho aderito alla mailing list ctags dev, e ho in programma di migliorare il supporto PHP lì prima di passare alla realizzazione omnicomprensiva di Vim, nel modo più corretto possibile in un linguaggio interpretato. Per ora, sfortunatamente, la soluzione è aspettare fino a quando il supporto è migliore, o risolverlo da solo.