Vim PHP omni tamamlama

6 Cevap php

Ben sağ Vim PHP otomatik tamamlama almaya çalışıyorum. Şimdi ben bir $blog = new Blog(); $blog-> yapmak ve ardından CTRL+X CTRL+O Ben omnicompletion sınıfındaki tüm fonksiyonlarını geri dönmek için beklediğiniz vurduğunuzda Blog.

Bunun yerine, tüm proje için tüm fonksiyonları verir. ctags -R *: Ben öyle gibi benim proje için ctags inşa ettik

Otomatik tamamlama bağlam farkında yapmak için herhangi bir yolu var mı?

6 Cevap

catchmeifyoutry's answer gibi sen omnicomplete kullanmak hangi satırdan önce, ancak bu hantal ve zaman için Yorum yazmak için gereken /* @var $myVar myClass */ hemen gibi bir yorum ekleyerek bir iş çevresinde işaret , siz de fonksiyon ismini kendiniz yazılmış olabilir.

Solution: phpComplete

Bu bir Vim script: phpComplete

Hala sınıflar için oluşturulan bir etiket dosyasına ihtiyacınız olacak, ancak o zaman (betiğin sayfasındaki açıklama modifiye) gibi, dosya içinde omni eksiksiz, kullanabilirsiniz;

In dosya kontrol böylece yorum gerekmez Bu yama sağlar.

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

Ayrıca tekiz örneklemesi için destek sağlar:

$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!

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

Etiket dosya both sınıf tanımı, and değişken bildirimi içeriyorsa Omnicompletion sadece çalışacaktır.

Straightforward solution

In general that means that you will need to save and (re)generate the tags file after the class Blog { ... } and $blog = new Blog(); parts, but before trying $blog-> <C-X><C-O>. This is because the PHP omni-complete function will look for the class declaration of the $blog variable in the tags file.

(Eğer bir tamponu etiketleri dosyayı açtıysanız MEZUNLARI, tazelenerek sonra yeniden.)

Alternative

Vim belgeler (:help ft-php-omni), aynı zamanda değişken etiketleri dosyasında endeksli olması gerektirmeyen bir şekilde tanımlar, ancak önceki satırın yerine belirli Yorum kullanır:

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

Ancak, sınıf tanımı hala does etiketi dosyasında olması gerekir ve comment omni-tam kullanmak istediğiniz her zaman gereklidir. Yani, yeni bir PHP dosyası uzak yazarak hala güzel omni-tamamlanmasını vermeyecektir: (

Just a thought

Belki sadece kaydedilmemiş tampon (taglist eklentisi gibi) geçici etiketleri dosya-fly ve omni-tam da bunu kullanmak için izin üretmek mümkündür? Ama büyük bir vim korsan değilim ...

Beklendiği gibi, bir çalışır:

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

Ben sadece pveview fonksiyon parametreleri eksik!

Aşağıda daha iyi çalışır. http://weierophinney.net/matthew/archives/134-exuberant-ctags-with-PHP-in-Vim.html alınan

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/' \

Hatta yukarıda, bazı sorunlar var gibi görünüyor. örneğin phpcomplete vars örneğinin yöntemlerini desteklemek için görünmüyor.

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

Bununla birlikte,

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

Phpcomplete son birkaç saat herkes de çalışıyor benim tavsiyem için çalışma almak için denedikten sonra, DUR etmektir. Bu iyi çalışmıyor ve sorun değmez gelmez.

C + +, ben daha iyi bir bağlam duyarlılığı almak için aşağıdaki komutu çalıştırın:

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

O mükemmel değil, ama yukarıdaki komut vim tarafından belirtilen ctags etiketler dosyasına fazladan bilgi ekler sonra daha iyi tamamlama işler.