Я пытаюсь получить автозаполнение PHP прямо в Vim. Прямо сейчас, когда я делаю $blog = new Blog(); $blog->
$blog = new Blog(); $blog->
а затем нажмите CTRL+X CTRL+O
Я бы ожидал, что omnicompletion вернет все функции в классе Blog
.
Вместо этого он возвращает все функции для всего проекта. Я построил ctags для моего проекта так: ctags -R *
Есть ли способ сделать контекстное представление автозаполнения?
Ответ catchmeifyoutry указывает на обход, добавив комментарий, такой как /* @var $myVar myClass */
непосредственно перед строкой, на которой вы используете omnicomplete, однако это громоздко и на время, которое требуется для написания комментария, вы можете также написали название функции самостоятельно.
Это скрипт 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!
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