2012-09-25 8 views
7

Estoy tratando de configurar omni terminación para PHP en vim 7.3 con ctags 5.9 ~ svn20110310 en Ubuntu 12.04.1 (LTS) pero me encuentro con un problema muy extraño donde la terminación proporciona predicciones radicalmente diferentes para instancias de la misma clase.Omnicompletion deja de dar predicciones útiles

tengo los dos archivos siguientes:

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

Cuando el cursor se encuentra en la posición 1 y pulse CTRL + XCTRL + O que comples la línea con do_stuff( como hemos Esperaría. Pero cuando pulso CTRL +XCTRL +O en la segunda posición consigo una lista de predicciones que se inicia con key, next, rewind. ¿Qué estoy haciendo mal?

+0

Cuando presiona CTRL + X CTRL + O en la segunda posición, ¿está todo el código anterior (incluido el código válido '$ f -> [posición del cursor]')? –

+0

Sí, absolutamente. '$ f -> [posición del cursor 1]' se convierte en '$ f-> do_stuff();' –

+0

¿'Foo' implementa la interfaz' Iterator'? – philix

Respuesta

4

Editar: Con respecto a su problema específico, si usted tiene una versión antigua de phpcomplete.vim, es posible que sólo se puede completar correctamente fuera una variable ya sea marcando con una etiqueta especial phpdoc (see this question) o regenerando su archivo de etiquetas después de declarar la variable.

Con toda probabilidad, no está haciendo nada mal; el soporte de PHP en ctags es extremadamente básico y no muy riguroso, lo que desafortunadamente también significa que falta el soporte de Vim. Una mirada rápida en el módulo ctags ilustra el problema:

ctags/php.c

Eso es todo. Solo un par de expresiones regulares relativamente básicas. Ese analizador en la parte inferior ya no se usa, y trágicamente no ha sido por mucho tiempo.

Complicando el problema es el hecho de que la función omnicomplete estándar para PHP en Vim es, en el mejor de los casos, hackosa; baste decir que implica cambiar entre todas las ventanas abiertas como parte de su proceso de finalización (una práctica condenada explícitamente por la documentación de Vim). Echar un vistazo por ti mismo:

phpcomplete.vim/autoload/phpcomplete.vim

he tenido problemas con la finalización de PHP terribles en Vim desde hace mucho tiempo y he determinado que nada menos que una revisión completa producirá un resultado satisfactorio. Me uní a la lista de correo de ctags dev, y tengo la intención de mejorar el soporte de PHP allí antes de pasar a hacer que la omnicomplementación de Vim funcione de la mejor manera posible en un lenguaje interpretado. Por ahora, desafortunadamente, la solución es esperar hasta que el soporte sea mejor o solucionarlo usted mismo.

Cuestiones relacionadas