Vim PHP omni завершение

Я пытаюсь получить автозаполнение PHP прямо в Vim. Прямо сейчас, когда я делаю $blog = new Blog(); $blog-> $blog = new Blog(); $blog-> а затем нажмите CTRL+X CTRL+O Я бы ожидал, что omnicompletion вернет все функции в классе Blog .

Вместо этого он возвращает все функции для всего проекта. Я построил ctags для моего проекта так: ctags -R *

Есть ли способ сделать контекстное представление автозаполнения?

Solutions Collecting From Web of "Vim PHP omni завершение"

Ответ catchmeifyoutry указывает на обход, добавив комментарий, такой как /* @var $myVar myClass */ непосредственно перед строкой, на которой вы используете omnicomplete, однако это громоздко и на время, которое требуется для написания комментария, вы можете также написали название функции самостоятельно.

Решение: phpComplete

Это скрипт Vim: phpComplete

Вам все равно понадобится файл тегов, сгенерированный для ваших классов, но затем вы можете использовать omni complete внутри файла, как это (изменено из описания на странице скрипта);

Этот патч позволяет проверять файл, поэтому вам не нужен комментарий.

 $blog = new Blog; ... $blog->Blah(); // <-- complete without comment 

Он также позволяет поддерживать однократные экземпляры:

 $instance = Class::getInstance(); $instance->completeMe(); // sweet completion 
 " 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! 

(через http://www.linuxquestions.org/questions/linux-software-2/vim-omin-completion-for-php-621940/#post3155311 )

Omnicompletion будет работать, только если файл тега содержит определение класса и объявление переменной.

Прямое решение

В общем, это означает, что вам нужно будет сохранить и (повторно) создать файл тегов после class Blog { ... } и $blog = new Blog(); , но перед попыткой $blog-> <CX><CO> . Это связано с тем, что функция omni-complete PHP будет искать объявление класса переменной $blog в файле тегов.

(BTW, если вы открыли файл тегов в буфере, перезагрузите его после его восстановления).

альтернатива

Документация vim ( :help ft-php-omni ) также определяет способ, который не требует, чтобы переменная была проиндексирована в файле тегов, но вместо этого использует конкретный комментарий к предыдущей строке:

 /* @var $myVar myClass */ $myVar-> 

Тем не менее, определение класса по-прежнему должно быть в файле тега, и комментарий необходим каждый раз, когда вы хотите использовать omni-complete. Таким образом, ввод текста в новый PHP-файл по-прежнему не даст вам приятного омни-завершения 🙁

Просто мысль

Возможно, можно создать «на лету» временный файл тегов (например, плагин taglist) только несохраненного буфера и разрешить omni-complete использовать его тоже? Я не большой vim hacker, хотя …

Это работает так, как ожидалось:

https://github.com/shawncplus/phpcomplete.vim

Я просто пропускаю параметры функции в pveview!

Следующее работает лучше. Взято из 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/' \ 

Даже с вышесказанным, есть некоторые проблемы. например, phpcomplete, похоже, не поддерживает методы экземпляров vars.

 $this->objA = new SomeClass(); $this->objA-><do_autocomplete> #fails 

Однако,

 $objA = new SomeClass(); $objA-><do_autocomplete> #works 

После того, как я попытался получить phpcomplete, работая в течение последних нескольких часов, мой совет любому, кто также пытается, заключается в STOP. Это плохо работает и не стоит того.

В C ++ я запускаю следующее, чтобы улучшить чувствительность к контексту:

 ctags '--c++-kinds=+p' '--fields=+iaS' '--extra=+q' 

Это не идеально, но после того, как ctags добавляет дополнительную информацию в файл тегов, как указано выше, команда vim справляется с завершением работы.

Я создал плагин vim для моего сервера заполнения padawan.php . Просмотрите это видео, чтобы узнать, как он работает.

пытаться

 curl -L -s https://git.io/ide | sh 

затем перезапустите свой nvim. Вы можете получить завершение кода и функции определения goto.

* В настоящее время он доступен только для neovim