3

OS X では、次のコマンドを使用してシステム インクルードの一連の ctags を生成しました。

ctags -f c -h ".h" -R --c-kinds=+p --fields=+iaS --extra=+q /usr/include

これは~/.vim/ctags/、システム全体のヘッダー ファイル用に生成したすべての ctags を配置したディレクトリ内で実行されました (条件付きでロードする ROS と CPP 用のものもありますが、ここにもそこにもありません)。

ともかく。ctags ファイルは私の .vimrc で正しく設定されており、vim は間違いなく ctags を認識できますが、何らかの理由で、#includeシンボル全体を書き出してからバックスペースを開始すると、オートコンプリート ポップアップには d ヘッダー ファイルからの結果しか表示されません。たとえば、#include <string.h>プロジェクトで を呼び出しstrlen()、アクティブな vim バッファーに入力を開始するとstr、現在 vim バッファーにあるシンボルの結果のみが取得されます。しかし、入力してからstrlen1 文字または 2 文字のバックスペースを開始して を押すと<C-n>、ポップアップ メニューには、含まれている他のヘッダー ファイルからの一致が表示されます。

編集:「s」を押すだけ<C-n>で、それも機能することがわかりました。したがって、問題は、ポップアップ メニューが手動で起動された場合にのみ機能することです。これは、プラグインの問題だと思います(以下を参照)

追加情報:

  • completeoptに設定されていますcompleteopt=menuone,menu,preview,longest

  • 私はOmniCppCompleteを持っていますが、これは動作に干渉している可能性があります。現在、C++ ファイルに対してのみ、条件付きでロードされていません。OmniCppComplete の設定を .vimrc から編集して投稿してほしい場合は、お尋ねください。

  • AutoComplPopもインストールしていますが、何も構成していないため、既定の設定で実行されています。プラグインを実際に調査していないため、プラグインの動作の一部が結果に干渉している可能性があるかどうかはわかりません.

  • AutoTagとTagBarをインストールしましたが、これらは現在のディレクトリのローカル タグファイルをいじるだけです。

正直なところ、私は Vim にかなり慣れていないので、この問題のデバッグをどこから開始すればよいかわかりません。ランダム プラグインを使用するか、.vimrc 設定を使用するかは関係ありません。

4

2 に答える 2

4

Vim には、多くの特定の補完メカニズムがあります。

  • <C-n><C-p>オプションで定義された多くのソースを使用しcompleteます。デフォルトでは、現在およびすべてのロードおよびアンロードされたバッファ、タグ、およびインクルード ファイルを使用して補完を提供します。通常、これらを使用して非常に有用な提案を得ることができますが、これはちょっとした「キャッチオール」ソリューションです。かなり大規模なプロジェクトで作業している場合、まったく信頼できません。

  • <C-x><C-]>はタグのみを使用するので、もう少し便利かもしれません。

  • 他にもたくさんあります。 を参照してください:h ins-completion

  • オムニ補完はよりスマートです。通常、意味のある補完を提供しようとするカスタムのファイルタイプ固有のスクリプトを実行します。それはによって引き起こされ<C-x><C-o>、あなたはそれについて読むことができます:h ft-c-omni. コードを操作する場合は、多くの場合、オムニ補完を選択することをお勧めします。

重複する「自動」補完プラグインが 2 つあるため、どの補完メカニズムが機能しているかを判断するのは困難です。これらのプラグインを無効にして、利用可能なさまざまな補完メカニズムを試してみてください。

于 2013-01-18T17:57:12.037 に答える