web-dev-qa-db-ja.com

Vim:オートコンプリートをよりスマートにする

Vimで自動補完するために、ctags、taglistなどを使用します。ただし、Visual StudioのインテリセンスまたはEclipseのオートコンプリートと比較すると、非常に制限されています。 Vimを次のように調整できるかどうか疑問に思っています。

  1. いつでもオートコンプリートを表示します。または->と入力します。ただし、変数である可能性のあるテキストの後にのみ(たとえば、数字の後に自動補完を表示しないようにします)。

  2. (が入力されたときに関数パラメーターを表示します。

  3. 後にすべての文字が削除された場合、自動補完リストの削除を停止します。または->:変数名を入力したら、を押します。または->特定のメンバーを検索するには、の後に入力したすべての文字を頻繁に削除する必要があります。または->ですが、これによりVimは自動補完リストを非表示にします。 Escキーを押さない限り、表示したままにします。

  4. 関連する自動補完の表示:変数を入力して^ X ^ Oを押すと、通常、ctagsファイル内のすべてのタグが表示されます。変数に関連するタグのみを表示するようにします。

助けてくれてありがとう。

[〜#〜] edit [〜#〜]:一部の人々はこの質問に投票していますが、誰も答えを知らないようです。したがって、完全な答えを提供する必要はないことを言及したかっただけです。上記のポイントのいずれかに対する部分的な回答も良いでしょう。

73
Rafid

AutoComplPop は必要なものです。

21
romainl

For(1)C++またはCを使用する場合 clang complete は本当に素晴らしいオプションです

15

キーが押されたときにvimが特定の動作をトリガーするようにするには、キーを関数にマップする必要があります。

たとえば、キー.INSERTモードで行う必要がある場合に、何らかのタイプの補完を呼び出すには:

:inoremap <expr> <buffer> . MyFunction()

そして、関数は呼び出されたコンテキストを評価し、適切な回答をユーザーに提示する必要があります。

編集:これがclang complete @honk Worksによる言及。

Omn​​ifuncの動作をあなたのニーズに合わせてカスタマイズできるかどうかはわかりませんが、私の経験では、あまり行き過ぎたことはありません。 @Mikhailが言ったように、実際にはある程度コードを解釈したり実行したりすることを意味するものを追跡する必要があります。

8
unode

私は毎日vimを使用していますが、これを行う可能性のある既存のスクリプトについては知りません。このアクションには、クラスの理解と変数の追跡が必要です。 someObject->は、VIMが変数someObjectがどのクラスであるかを認識し、そのクラス内のメソッド/変数を検索できることを意味します。

あなたがコメントしたように、vimのスクリプトを書くのは比較的簡単です-誰もまだこれに答えていません。私からの賛成票。

5
Mikhail

私はあなたが探しているのと同じ機能を持ちたいと思っており、有望なプラグインに出会ったばかりです:

https://github.com/Shougo/neocomplcache 新しいautocomplpopである可能性があり、最初のトライアルで非常にうまく機能するようです... 〜

2
neildaemond

いずれにせよ、 YouCompleteMe(YCM) をお勧めします。現在のファイルの識別子の(ファジー)マッチング、およびパス補完、外部補完エンジンとの統合などを提供します...

広告1)
Eclipseのセマンティック補完が好きな場合は、 eclim を使用してvimをEclipseに統合します。 (代わりに、YCMに別のセマンティックエンジンを使用します)

広告2)
これら2つはうまく一緒にプレイします。:YCMは最近完成した関数の関数定義(=パラメーターリスト)を提供することさえできます!

広告3)
それはYCMがとにかくすることです

広告4)
よくわかりませんが、その意味はわかりません。 ctagsを使用したことはありません!

PS: ltiSnips および Tagbar を使用することを強くお勧めします(そして ndoTree がお好きなら、vimを完璧にするIDE。

1
Florian

最近発見したのは YouCompleteMe で、Visual Studioのオートコンプリートツールと同様に動作します。デモはここで見ることができます:

https://www.youtube.com/watch?v=YuMyHAHF0xs

1
warsong