vimのオートコンプリートプラグインはありますか?ここに私のオプションは何ですか?
現時点ではAutoComplPopを使用していますが、使用するsnipMateとの統合が悪く、Rubyファイルでの動作が非常に遅い(100行未満でも)。
他にもいくつかプラグインを見てきましたが、少なくとも1年以上は使用されていません。それで、何かアイデアはありますか?
vimのオートコンプリートプラグインはありますか?ここに私のオプションは何ですか?
現時点ではAutoComplPopを使用していますが、使用するsnipMateとの統合が悪く、Rubyファイルでの動作が非常に遅い(100行未満でも)。
他にもいくつかプラグインを見てきましたが、少なくとも1年以上は使用されていません。それで、何かアイデアはありますか?
回答:
これは古い質問ですが、Vimで完璧なオートコンプリートを実現するためのプラグインの適切な組み合わせがいつか見つかると思って、ぼんやりと色褪せた希望を抱き続けています。調査は続いていますが、これは私が数年にわたって行ってきたすべての調査です。
まず第一に、Vimはコードエディターではなくテキストエディターであることを理解する必要があります。コードエディター、IDESは、Jetbrainsツールスイート、Visual Studio Code、Eclipseなどのツールです。
Vimは基本的にコードを正確に「オートコンプリート」することができません。オートコンプリートでは、ソースコードをイントロスペクトし、ASTを分析する必要があります。2016年にVim 8がリリースされるまで、Vimは非同期操作を実行できなかったので、Vimプラグインであらゆる種類のコードイントロスペクションソフトウェアを実行しようとすると、悪夢になります。これを行わないことは、Vimエコシステムの歴史に組み込まれています。そして、Tern For Vimのように、これを行おうとするものはすべて実際に悪夢です。
テキストエディタにできる最善のことは、スニペットと、それが知っている同じ単語/行/その他を完成させることです。コードをオートコンプリートする場合は、テキストエディターではなくコードエディターを使用してください。
これらはあなたのオプションですが、私はすべて試しました:
二つの便利なキーボードショートカットがありますCtrl- nあなたは(ノーコードイントロスペクション)を開いている、現在のバッファにのみ基づいて、単語を自動補完あろう、とCtrl- xCtrl- lあなたは1を複製する場合は、コードのフルラインを自動補完れます。あなたはおそらく知っているCtrl- - xCtrl、f現在の相対パスを含むファイル名を自動的に完了しますました:pwd
。パターン完全なあなたが検索しない場合は、プラグインは、軽度のに役立ちます/\v
。
組み込みのVim " Omnicompletion "はCtrl- x、Ctrl- o(Vimの作成者が毎回入力するように要求されます)と一連の言語固有のプラグイン(存在する場合)によってトリガーされます。あなたはでき:echo &omnifunc
ますが、すでにOmnicompletionは選択のあなたのファイルにはVimで設定した場合は、ファイルで確認してください。
入力時に上記のOmnicompletionメニューを自動的に開くAutoComplPop。
TabVimの組み込み完了をトリガーするために押すことができるSuperTab。
キーワード補完であるNeoComplCache(Vimの組み込み補完との違いは指定されていません)、複雑な.vimrc
設定、およびスニペット補完用のNeoSnippet。
exuberant-ctags
とDoctorJS
(1年間死んでしまったMozillaプロジェクト)、TagBar、およびタグファイルから完成品を抽出するために自家製のものを組み合わせたモンスター。
基本的なタグ補完プラグインであるSnipMateとsnippetsを組み合わせ、スニペットを追加する方法を自分で理解します。
UltiSnipsとUltiSnips-Snippetsは、上記のスニペットとは異なります。
Tern for Vimは、正しいオートコンプリートを取得するために実際のコードイントロスペクションを実行する有望なライブラリです。ただし、バグが多く、速度が遅く、メモリリークが発生してVimがクラッシュし、おそらくは放棄されます。
YouCompleteMeは、サーバーをバックグラウンドで実行するあいまいなas-you-type補完と、スニペット補完のための自家製関数です。
Eclim -Eclipseサーバーをバックグラウンドで実行し、その場でイントロスペクトするオートコンプリートをVimに伝える高潔な試み。Ternと同様に動作します。
最後に、Closetag、delimitMate、autoclose、または自家製のバナナグラムを使用して、入力時にタグと括弧を自動的に閉じます。
このリストのほとんどすべてのプラグインは、このリストの他のほとんどすべてのプラグインと競合します。
YouCompleteMeはこのパックのリーダーのようですが、タグ補完を使用して正常に機能させることができなかったため、そのコードイントロスペクションの完了がまだ強力であることが証明されていません。
私の個人的な見解では、Vimのオートコンプリートの世界の現在の状態は悪い状態です。小規模なプロジェクトの場合は、上記のソリューションのいずれかを使用すると問題ない場合があります。単純なAPIを扱っている場合は、大部分を頭の中に置いておくことができます。コードイントロスペクション以外の完了はおそらく問題ありません。大規模なプロジェクトを扱っている場合、またはプログラミング中にタイプセーフの利点が必要な場合は、本格的なIDE(Eclipse、Visual Studio、WebStorm)がVimよりもはるかに適しています。
もちろん、IDEの欠点は、Vimの機能をもう手元にないことです。許容できるVimモードのIDEを1つも使用していません。
Vimには、型指定のないC言語のような言語に対する中程度の言語バイアスがあります。それ以外の場合は、ユーザーがプラグインとして言語固有の機能を追加することを期待しています。残念ながら、これにより、オートコンプリートエコシステムが分裂しました。いくつかのオプションはまともですが、完璧なものはなく、多数決リーダー/ベストプラクティスはめったにありません。
ここにいいものがあります:YouCompleteMe
入力時にドロップダウンメニューが自動的に表示させ、そしてそれはファジー選択をサポートし、あなたが呼ばれる識別子があればそうYouCompleteMe partition_finder
とを、あなたのようなものを入力ptf
C ++ファイルを編集中に、ドロップダウン候補リストには両方が含まれますprintf
し、partition_finder
彼らは同じ文字が含まれているので、同じ順序で。と呼ばれる変数がある場合myBrain
、タイプすることができbrn
、それはそれを示唆します。YouCompleteMeはまた、以前の使用頻度に基づいて提案に優先順位を付けます。
私が使用しneocomplcacheを snipmate + snipmateスニペットで
let g:neocomplcache_snippets_dir='~/.vim/bundle/snipmate-snippets/snippets'
あなたは私のvimrcを見ることができます
vimにはOmniCompleteと呼ばれる組み込み機能があると思います。挿入モードではを使用しますctrl+x,ctrl+o
。
それ以外の場合は、を使用して挿入モードからキーワード補完を実行できますctrl+n
。これを呼び出すと、編集中のファイルで見つかった単語と、開いている他のファイルで見つかった単語の一致候補を表示するドロップダウンが表示されます。打ってくださいctrl+n
オプションを循環します。必要な単語に到達したら、通常どおりに入力を続けます。
あなたは、あなたがしたい単語を見つけることができない場合はctrl+n
、リストオフになる最終的サイクルとあなたが入力を続けることができ、またはあなたがヒットすることができESC
、その後bcw
行くためにb
怒ら単語の先頭にACKをし、c
ハンゲw
あなたが望んでいたものにORDを。
<c-x><c-o>
vimがサポート方法を明示的に指示されているものに対してのみ機能します。デフォルトでは、マイナーなことをいくつかしか行えません。 CSS補完のようですが、Eclipseのようなものが必要な場合は、それを提供しようとするいくつかのvimプラグインがあります
partition_finder
にIDが呼び出されptf
、C ++ファイルの編集中に次のように入力すると、ドロップダウンメニューに両方printf
とpartition_finder
同じ順序で同じ文字が含まれているためです。と呼ばれる変数がある場合はmyBrain
、入力brn
すると表示されます。YouCompleteMeはまた、以前の使用頻度に基づいて提案に優先順位を付けます。こちらをご覧ください:valloric.github.io/YouCompleteMe
元のAutoComplPopから新しいプラグインSimpleAutoComplPopをフォークしました。rubyやsnipMateについてはよく知りませんが、試してみてください。フィードバックが得られてうれしいです:)
let g:acp_behaviorSnipmateLength=-1
参照:help autocomplpop
)。追加しましたか?