php - plugged - vim plug in manager
Vim PHP omni completado (9)
En C ++, ejecuto lo siguiente para obtener una mejor sensibilidad de contexto:
ctags ''--c++-kinds=+p'' ''--fields=+iaS'' ''--extra=+q''
No es perfecto, pero después de ctags agrega la información adicional al archivo de etiquetas como se especifica en el comando anterior vim maneja mejor la finalización.
Estoy tratando de obtener autocompletado de PHP en Vim. Ahora mismo cuando hago un $blog = new Blog(); $blog->
$blog = new Blog(); $blog->
y luego presione CTRL+X CTRL+O
Espero que omnicompletion devuelva todas las funciones en la clase Blog
.
En cambio, devuelve todas las funciones para todo el proyecto. He creado ctags para mi proyecto de la siguiente manera: ctags -R *
¿Hay alguna forma de hacer que el autocompletado tenga en cuenta el contexto?
Este funciona como se esperaba:
https://github.com/shawncplus/phpcomplete.vim
¡Solo me faltan los parámetros de función en la pveview!
Lo siguiente funciona mejor Tomado de http://weierophinney.net/matthew/archives/134-exuberant-ctags-with-PHP-in-Vim.html
ctags /
-f ~/.vim/tags /
-h ".php" -R /
--exclude="/.svn" /
--totals=yes /
--tag-relative=yes /
--PHP-kinds=+ivcf /
--regex-PHP=''/(abstract)?/s+class/s+([^ ]+)//2/c/'' /
--regex-PHP=''/(static|abstract|public|protected|private)/s+function/s+(/&/s+)?([^ (]+)//3/f/'' /
--regex-PHP=''/interface/s+([^ ]+)//1/i/'' /
--regex-PHP=''//$([a-zA-Z_][a-zA-Z0-9_]*)//1/v/'' /
Incluso con lo anterior, parece haber algunos problemas. por ejemplo, phpcomplete no parece ser compatible con los métodos de instancia vars.
$this->objA = new SomeClass();
$this->objA-><do_autocomplete> #fails
Sin embargo,
$objA = new SomeClass();
$objA-><do_autocomplete> #works
Después de intentar obtener phpcomplete trabajando durante las últimas horas, mi consejo para cualquiera que también lo intente es DETENERSE. No funciona bien y no vale la pena.
Omnicompletion solo funcionará si el archivo de etiqueta contiene tanto la definición de clase como la declaración de variable.
Solución directa
En general, eso significa que deberá guardar y (re) generar el archivo de etiquetas después de la class Blog { ... }
y $blog = new Blog();
partes, pero antes de intentar $blog->
<CX><CO>
. Esto se debe a que la función PHP omni-complete buscará la declaración de clase de la variable $blog
en el archivo de etiquetas.
(Por cierto, si ha abierto el archivo de etiquetas en un búfer, vuelva a cargarlo después de regenerarlo).
Alternativa
La documentación de vim ( :help ft-php-omni
) también define una forma que no requiere que la variable se indexe en el archivo de etiquetas, sino que utiliza un comentario específico en la línea anterior:
/* @var $myVar myClass */
$myVar->
Sin embargo, la definición de clase todavía necesita estar en el archivo de etiqueta, y el comentario es necesario cada vez que quiera usar omni-completo. Así que teclear lejos en un nuevo archivo PHP todavía no te dará una buena omni-terminación :(
Solo un pensamiento
¿Tal vez sea posible generar sobre la marcha un archivo de etiquetas temporales (como el plugin de taglist) del búfer no guardado y permitir que omni-complete lo use también? Aunque no soy un gran hacker vim ...
Puedes usar un combo bastante poderoso:
Intenté muchas cosas: PHPComplete, Padawan, etc. Esto es lo mejor que pude encontrar.
En caso de que estés interesado, escribí también un artículo sobre cómo hacer un IDE de PHP con Vim .
tratar
curl -L -s https://git.io/ide | sh
luego reinicia tu nvim. Es posible que haya completado el código y vaya a las funciones de definición.
* Actualmente, solo está disponible para neovim
La respuesta de catchmeifyoutry señala una /* @var $myVar myClass */
al agregar un comentario como /* @var $myVar myClass */
inmediatamente antes de la línea en la que usa omnicompleto, sin embargo, esto es engorroso y por el tiempo que lleva escribir el comentario, puede también ha escrito el nombre de la función usted mismo.
Solución: phpComplete
Es un script de Vim: phpComplete
Aún necesitará un archivo de etiquetas generado para sus clases, pero puede usar omni completo dentro del archivo, como ese (modificado a partir de la descripción en la página del script);
Este parche permite la verificación en el archivo por lo que no necesita el comentario.
$blog = new Blog; ... $blog->Blah(); // <-- complete without comment
También permite el soporte para instancias singleton:
$instance = Class::getInstance(); $instance->completeMe(); // sweet completion
Creé un complemento vim para mi servidor de finalización padawan.php . Mira este video para ver cómo funciona.
" Assuming Vim 7 (full version) is installed,
" adding the following to your ~/.vimrc should work.
filetype plugin on
au FileType php set omnifunc=phpcomplete#CompletePHP
" You might also find this useful
" PHP Generated Code Highlights (HTML & SQL)
let php_sql_query=1
let php_htmlInStrings=1
" Hope this helps!
(a través de http://www.linuxquestions.org/questions/linux-software-2/vim-omin-completion-for-php-621940/#post3155311 )