Vim: Conclusão de código sensível ao contexto para PHP

2

O Vim me oferece muitas opções quando uso o preenchimento de código. Em uma classe e digite $ class- > Isso me dá cerca de um zilhão de opções, portanto, não apenas da própria classe, mas também do php, todas as globais já criadas, em suma: uma bagunça.

Eu só quero ter as opções da própria classe (ou a classe de subtipo pai da qual ele se extende), portanto, conclusão de código sensível ao contexto ou ao escopo, assim como o Netbeans, por exemplo. Como posso fazer isso?

Minha configuração atual é esta:

Estou usando ctags e criei um arquivo ctags para nosso (grande) aplicativo na raiz.

Este é o arquivo .ctags que eu usei para criar o arquivo ctags:

-R
-h ".php"
--exclude=.svn
--languages=+PHP,-JavaScript
--tag-relative=yes
--regex-PHP=/abstract\s+class\s+([^ ]+)//c/
--regex-PHP=/interface\s+([^ ]+)//c/
--regex-PHP=/(public\s+|static\s+|protected\s+|private\s+)\$([^ \t=]+)//p/
--regex-PHP=/const\s+([^ \t=]+)//d/
--regex-PHP=/final\s+(public\s+|static\s+|abstract\s+|protected\s+|private\s+)function\s+\&?\s*([^ (]+)//f/
--PHP-kinds=+cdf
--fields=+iaS

Este é o arquivo .vimrc:

" autocomplete funcs and identifiers for languages
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType c set omnifunc=ccomplete#Complete

" exuberant ctags
" the magic is the ';' at end. it will make vim tags file search go up from current directory until it finds one.
set tags=projectrootdir/tags;
map <F8> :!ctags

" TagList
" :tag getUser => Jump to getUser method
" :tn (or tnext) => go to next search result
" :tp (or tprev) => to to previous search result
" :ts (or tselect) => List the current tags
" => Go back to last tag location
" +Left click => Go to definition of a method
" More info:
" http://vimdoc.sourceforge.net/htmldoc/tagsrch.html (official documentation)
" http://www.vim.org/tips/tip.php?tip_id=94 (a vim tip)
let Tlist_Ctags_Cmd = "~/bin/ctags"
let Tlist_WinWidth = 50
map <F4> :TlistToggle<cr>

"see http://vim.wikia.com/wiki/Make_Vim_completion_popup_menu_work_just_like_in_an_IDE
" will change the 'completeopt' option so that Vim's popup menu doesn't select the first completion item, but rather just inserts the longest common text of all matches
:set completeopt=longest,menuone
" will change the behavior of the <Enter> key when the popup menu is visible. In that case the Enter key will simply select the highlighted menu item, just as <C-Y> does
:inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
"
inoremap <expr> <C-n> pumvisible() ? '<C-n>' :
  \ '<C-n><C-r>=pumvisible() ? "\<lt>Down>" : ""<CR>'

inoremap <expr> <M-,> pumvisible() ? '<C-n>' :
  \ '<C-x><C-o><C-n><C-p><C-r>=pumvisible() ? "\<lt>Down>" : ""<CR>'
    
por eddy147 08.10.2012 / 16:02

1 resposta

1

Com o PHPComplete padrão, você precisa gerar seu tags cada vez que fizer $foo = new MyClass . Se você fizer isso, você terá a conclusão correta.

Mas há outro script PHPComplete que corrige esse problema. Você deve experimentar .

    
por 14.10.2012 / 09:50

Tags