web-dev-qa-db-ja.com

Vim PHPオムニコンプリーション

私はVimでPHPオートコンプリートを正しく取得しようとしています。今、$blog = new Blog(); $blog->を実行してからCTRL+X CTRL+Oを押すと、オムニコンプリーションがすべてを返すと思いますクラスBlogの関数。

代わりに、プロジェクト全体のすべての関数を返します。私は自分のプロジェクトのctagsを次のように作成しました:ctags -R *

オートコンプリートをコンテキストアウェアにする方法はありますか?

33
Karl

catchmeifyoutryの回答 オムニコンプリートを使用する行の直前に/* @var $myVar myClass */などのコメントを追加することで回避策を指摘しますが、これは面倒であり、コメントの書き込みに時間がかかります。 、関数名を自分で書いた方がよいでしょう。

解決策:phpComplete

これはVimスクリプトです: phpComplete

クラス用に生成されたタグファイルが引き続き必要ですが、そのようにファイル内でオムニコンプリートを使用できます(スクリプトページの説明から変更)。

このパッチはファイル内チェックを可能にするので、コメントは必要ありません。

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

また、シングルトンインスタンス化のサポートも可能です。

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

9
ax.

Omnicompletionは、タグファイルにbothクラス定義、and変数宣言が含まれている場合にのみ機能します。

簡単な解決策

一般に、これは、タグを保存して(再)生成するファイル _class Blog { ... }_と$blog = new Blog();の部分が必要になることを意味しますが、 before _$blog->_ _<C-X><C-O>_を試しています。これは、PHP omni-complete関数が、タグファイル内の_$blog_変数のクラス宣言を検索するためです。

(ところで、バッファ内のタグファイルを開いている場合は、再生成後にリロードしてください。)

代替

Vimのドキュメント(_:help ft-php-omni_)は、タグファイルで変数にインデックスを付ける必要がなく、代わりに前の行に特定のコメントを使用する方法も定義しています。

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

ただし、クラス定義はまだdoesタグファイルにある必要があり、omni-completeを使用するたびにコメントが必要です。したがって、新しいPHPファイルを入力しても、完全なオムニコンプリートは得られません:(

ちょっと考えて

たぶん、保存されていないバッファだけの一時タグファイル(タグリストプラグインのような)をオンザフライで生成し、omni-completeがそれを使用できるようにすることは可能ですか?私は素晴らしいvimハッカーではありませんが...

7
catchmeifyoutry

これは期待どおりに機能します。

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

Pveviewに関数パラメーターがありません!

5
Andi

以下の方がうまく機能します。 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はインスタンス変数のメソッドをサポートしていないようです。

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

しかしながら、

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

過去数時間phpcompleteを機能させようとした後、これも試みている人への私のアドバイスは、やめることです。それはうまく機能せず、トラブルの価値はありません。

3
Thanh Nguyen

非常に強力なコンボを使用できます。

PHPComplete、Padawanなど、たくさんのことを試しました。これは私が見つけることができる最高のものです。

興味のある方のために、 PHP IDE with Vim のやり方についての記事も書きました。

1
Matthieu

C++では、コンテキストの感度を高めるために次のコマンドを実行します。

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

完璧ではありませんが、ctagsが上記のコマンドで指定されたようにタグファイルに追加情報を追加した後、vimは完了をより適切に処理します。

1
Kaleb Pederson

試してみてください

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

次に、nvimを再起動します。コード補完とgoto定義機能を利用できる場合があります。

*現在、neovimでのみご利用いただけます

0
Xiaohui Lam

padawan.php完了サーバー 用に vimプラグイン を作成しました。チェックアウト このビデオ それがどのように機能するかを確認してください。

0
Aleh Kashnikau