私はVimでPHPオートコンプリートを正しく取得しようとしています。今、$blog = new Blog(); $blog->
を実行してからCTRL+X CTRL+O
を押すと、オムニコンプリーションがすべてを返すと思いますクラスBlog
の関数。
代わりに、プロジェクト全体のすべての関数を返します。私は自分のプロジェクトのctagsを次のように作成しました:ctags -R *
オートコンプリートをコンテキストアウェアにする方法はありますか?
catchmeifyoutryの回答 オムニコンプリートを使用する行の直前に/* @var $myVar myClass */
などのコメントを追加することで回避策を指摘しますが、これは面倒であり、コメントの書き込みに時間がかかります。 、関数名を自分で書いた方がよいでしょう。
これはVimスクリプトです: phpComplete
クラス用に生成されたタグファイルが引き続き必要ですが、そのようにファイル内でオムニコンプリートを使用できます(スクリプトページの説明から変更)。
このパッチはファイル内チェックを可能にするので、コメントは必要ありません。
$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は、タグファイルに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ハッカーではありませんが...
以下の方がうまく機能します。 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を機能させようとした後、これも試みている人への私のアドバイスは、やめることです。それはうまく機能せず、トラブルの価値はありません。
非常に強力なコンボを使用できます。
PHPComplete、Padawanなど、たくさんのことを試しました。これは私が見つけることができる最高のものです。
興味のある方のために、 PHP IDE with Vim のやり方についての記事も書きました。
C++では、コンテキストの感度を高めるために次のコマンドを実行します。
ctags '--c++-kinds=+p' '--fields=+iaS' '--extra=+q'
完璧ではありませんが、ctagsが上記のコマンドで指定されたようにタグファイルに追加情報を追加した後、vimは完了をより適切に処理します。
試してみてください
curl -L -s https://git.io/ide | sh
次に、nvimを再起動します。コード補完とgoto定義機能を利用できる場合があります。
*現在、neovimでのみご利用いただけます
padawan.php完了サーバー 用に vimプラグイン を作成しました。チェックアウト このビデオ それがどのように機能するかを確認してください。