web-dev-qa-db-ja.com

vim用のオートコンプリートプラグインはありますか?

Vim用のオートコンプリートプラグインはありますか?ここでの私のオプションは何ですか?

現時点では AutoComplPop を使用していますが、使用するsnipMateとの統合が悪く、Rubyファイル(100行未満でも))で非常に遅くなります。

他にもいくつかのプラグインを見てきましたが、少なくとも1年以上経ってから死んでいます。それで、何かアイデアはありますか?

10
naquad

これは古い質問ですが、Vimで完璧なオートコンプリートを実現するためのプラグインの適切な組み合わせがいつか見つかると思って、ぼんやりと色褪せた希望を抱き続けています。検索は続けられますが、これは私が数年にわたって行ったすべての調査です。

まず、理解する必要がありますVimはテキストエディターであり、コードエディターではありません。コードエディター(IDES)は、JetbrainsのツールスイートであるVisualのようなツールです。 Studio Code、Eclipseなど。

Vim基本的にコードを正確に「オートコンプリート」することはできません。オートコンプリートには、ソースコードを調べてASTを分析する必要があります。 Vimは2016年にVim 8がリリースされるまで非同期操作を実行できなかったので、Vimプラグインであらゆる種類のコードイントロスペクションソフトウェアを実行しようとすると、悪夢になります。これを行わないことは、Vimエコシステムの歴史に組み込まれています。そして、Tern For Vimのように、これを行おうとするものはすべて、実際に使用するのは悪夢です。

テキストエディターにできる最善のことは、スニペットと、それが知っている同じ単語/行/その他を完成させることです。コードのオートコンプリートを検討している場合は、テキストエディターではなく、コードエディターを使用する必要があります。

これらはあなたのオプションです、私はすべてを試しました:

  • 2つの便利なキーボードショートカットは次のとおりです。 Ctrl-n、開いている現在のバッファのみに基づいてWordをオートコンプリートし(コードイントロスペクションなし)、 Ctrl-xCtrl-l 複製する場合は、コードの全行をオートコンプリートします。あなたはおそらく知っています Ctrl-xCtrl-f、現在の:pwdを基準にして、パスを含むファイル名をオートコンプリートします。 pattern-complete プラグインは、/\vで検索しない場合に多少役立ちます。

  • 組み込みのVim " Omnicompletion "によってトリガーされます Ctrl-xCtrl-o (それはVimの作者が毎回入力することを望んでいるものです) 言語固有 プラグインが存在する場合、それらと一緒にファイルを:echo &omnifuncして、選択したファイルにVimによってOmnicompletionがすでに設定されているかどうかを確認できます。

  • AutoComplPop 入力時に上記のOmnicompletionメニューを自動的に開くため。

  • SuperTab これを押すと Tab Vimの組み込み完了をトリガーします。

  • NeoComplCache これはキーワード補完(Vimの組み込み補完との違いは指定されていません)、複雑な.vimrcセットアップ、および NeoSnippet スニペット補完です。

  • exuberant-ctagsDoctorJS(1年間死んでいるMozillaプロジェクト)、 TagBar 、および 自家製のもの のモンスターの組み合わせタグファイルから補完を抽出します。

  • SnipMate 、基本的なタグ補完プラグイン、および スニペット 、少し注意が必要なため、スニペットを追加する方法を自分で理解してください。

  • ltiSnipsltiSnips-Snippets 上記のスニペットとは異なる

  • Tern for Vim 、正しいオートコンプリートを取得するために実際のコードイントロスペクションを行う有望なライブラリ。ただし、バグがあり、非常に遅く、Vimをクラッシュさせるメモリリークがあり、おそらくアバンダンウェアです。

  • YouCompleteMe 、サーバーをバックグラウンドで実行するファジーな入力時の補完と、 自家製の関数 スニペット補完。

  • Eclim --Eclipseサーバーをバックグラウンドで実行し、Vimにその場でイントロスペクトする自動完了を伝える高貴な試み。 Ternと同様に機能します。

  • 最後に、 Closetag または delimitMate または autoclose または 自家製のバナナグラム は、タグと括弧を自動的に閉じるタイピング。

このリストのほぼすべてのプラグインは、このリストの他のほぼすべてのプラグインと競合します。

YouCompleteMeはパックのリーダーのようですが、タグの補完とそのコードイントロスペクションで正しく動作させることができませんでした-完了はまだ強力であることが証明されていません。

私の個人的な意見は、Vimのオートコンプリートの世界の現在の状態が悪い状態にあるということです。小規模なプロジェクトの場合は、上記のソリューションのいずれかを使用しても問題ない場合があります。ほとんど頭の中で維持できる単純なAPIを扱っている場合は、コード内省以外の完了で問題ない可能性があります。大規模なプロジェクトを扱っている場合、またはプログラミング中にタイプセーフの利点が必要な場合は、本格的なIDE( EclipseVisual Studio =、 WebStorm )は、Vimよりもはるかに適しています。

もちろん、IDEの欠点は、Vimのパワーが手元にないことです。許容できるVimモードを持つ単一のIDE)を使用していません。

Vimは、型指定されていないCのような言語に対して中程度の言語バイアスを持っており、それ以外の場合は、言語固有の機能がプラグインとしてユーザーによって追加されることを期待しています。残念ながら、これにより、オートコンプリートエコシステムが分裂しました。いくつかのオプションはまともですが、完璧なものはなく、多数決のリーダー/ベストプラクティスはめったにありません。

14
Andy Ray

これがいいものです: YouCompleteMe

入力時にドロップダウンメニューを自動的に表示するYouCompleteMe。ファジー選択をサポートしているため、partition_Finderと呼ばれる識別子があり、C++ファイルの編集中にptfのようなものを入力すると、ドロップダウンの提案リストにはprintfpartition_Finderの両方が含まれます。これは、同じ文字が同じ順序で含まれているためです。 myBrainという変数がある場合は、brnと入力すると、それが示唆されます。 YouCompleteMeはまた、以前の使用頻度に基づいて提案に優先順位を付けます。

6
trusktr

私はnecomplecacheを neosnippet で試しています。両方が同じ人によって作成されているので、より良い統合になると思います。

2
Forethinker

私は neocomplcache をsnipmate + snipmateスニペットで使用します

let g:neocomplcache_snippets_dir='~/.vim/bundle/snipmate-snippets/snippets'

あなたは私の vimrc を見ることができます

2
juanpablo

VimにはOmniCompleteというビルトインが1つあると思います。挿入モードでは、ctrl+x,ctrl+oを使用します。

それ以外の場合は、ctrl+nを使用して挿入モードからキーワード補完を実行できます。これを呼び出すと、編集中のファイルで見つかった単語と、開いている他のファイルで見つかった単語との一致候補を表示するドロップダウンが表示されます。 ctrl+nを押し続けて、オプションを切り替えます。必要な単語になったら、通常どおり入力を続けます。

必要な単語が見つからない場合は、ctrl+nが最終的にリストから外れて入力を続けるか、ESCを押してからbcwを押して、問題のある単語の先頭にbackを移動し、cwordに変更します。あなたが望むものに。

1
Conrad.Dean

元のAutoComplPopから新しいプラグイン SimpleAutoComplPop をフォークしました。私はRubyまたはsnipMateに精通していませんが、試してみるとよいでしょう。フィードバックをいただければ幸いです:)

1
rox