Ну, я никогда не использовал его, и я не уверен, рекомендовал ли я когда-либо его кому-либо, но я чувствую, что этот вопрос был бы неполным без упоминания о Simon Tatham прием сопрограммы.
" 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!
В C ++ я запускаю следующее, чтобы улучшить контекстную чувствительность:
ctags '--c++-kinds=+p' '--fields=+iaS' '--extra=+q'
Это не идеально, но после того, как ctags добавляет дополнительную информацию в файл тегов, как указано в приведенной выше команде, vim обрабатывает завершение лучше.
Полное завершение будет работать, только если файл тегов содержит и определение класса, и объявление переменной.
Простое решение
В общем, это означает, что вам потребуется сохранить и (повторно) сгенерировать теги файл после блога класса {...}
и $ blog = new Blog ();
части, но перед попыткой $ blog ->
. { {1}} Это связано с тем, что функция PHP omni-complete будет искать объявление класса переменной $ blog
в файле тегов.
(Кстати, если вы открыли файл тегов в буфере, перезагрузите его после его регенерации.)
Альтернатива
В документации по vim (: help ft-php-omni
) также определяется способ, который не требует индексации переменной в файле тегов, но вместо этого использует специальный комментарий в предыдущей строке:
/* @var $myVar myClass */
$myVar->
Однако определение класса все еще действительно должно быть в теге файл, и комментарий нужен каждый раз, когда вы хотите использовать омни-завершение. Так что ввод нового PHP-файла все равно не даст вам хорошего комплексного завершения: (
Просто мысль
Возможно, можно на лету сгенерировать файл временных тегов (например, плагин taglist) только несохраненного буфера и разрешить omni-complete использовать его ?? Я не большой хакер vim ...