0

C++ で omnicomplete を動作させようとしていますが、すべてが順調に進んでいるように見えますが、omnifunc を にリセットするとomnifunc=omni#cpp#complete#Main、プラグインが omnifunc を認識せず、pattern not foundエラーが発生します。Ctags をインストールして に配置し、必要なコマンド.vim/<name_of_dir>を追加cpp_srcして実行しました。.vim/tags(詳細はこちらをご覧ください)

問題は、何を試しても、まだこのエラーが発生することです。これを機能させるにはどうすればよいですか?以前にこれを試したことがありますが、最初は頭痛がしてうまく動作しませんでした。しかし、今回は決心しました。

VimRc

  1 syntax on
  2 set number
  3 set autoindent
  4 set ft=nasm
  5 set ts=4
  6 set nowrap
  7 set nocp
  8 filetype plugin on
  9 map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
 10 
 11 autocmd FileType cpp set omnifunc=omni#cpp#complete#Main
 12 
 13 " configure tags - add additional tags here or comment out not-used ones
 14 set tags+=~/.vim/tags/cpp
 15 set tags+=~/.vim/tags/gl
 16 set tags+=~/.vim/tags/sdl
 17 " set tags+=~/.vim/tags/qt4
 18 " " build tags of your own project with Ctrl-F12
 19 map <C-F12> :!ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
 20 "
 21 " " OmniCppComplete
 22 let OmniCpp_NamespaceSearch = 1
 23 let OmniCpp_GlobalScopeSearch = 1
 24 let OmniCpp_ShowAccess = 1
 25 let OmniCpp_ShowPrototypeInAbbr = 1 " show function parameters
 26 let OmniCpp_MayCompleteDot = 1 " autocomplete after .
 27 let OmniCpp_MayCompleteArrow = 1 " autocomplete after ->
 28 let OmniCpp_MayCompleteScope = 1 " autocomplete after ::
 29 let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
 30 " " automatically open and close the popup menu / preview window
 31 au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
 32 set completeopt=menuone,menu,longest,preview

いつものように、どんな助けも大歓迎です。

アップデート

問題が発生した場合に備えて、他の人が検査できるように Ctags ファイルを投稿します。

ctags -R --c++-kinds=+p --fields-+iaS --extra=+q .

map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
4

1 に答える 1

1

明らかに、Vim はタグ ファイルを見つけることができません。コマンドは、現在のディレクトリにファイルctags -R --c++-kinds=+p --fields-+iaS --extra=+q .を作成します。tagsこれがあなたが望むものであることを確認してください。

次のコマンドを実行してください。

:set tags?

タグファイルが結果リストに存在することを確認してください。カーソルを任意の記号 (クラス名など) に置いて を押すこともできますCtrl-]。問題がなければ、Vim はこのシンボル定義にジャンプしますtags。そうでない場合は、もちろん機能しomnicppcompleteません。(私はomnicppcomplete1年以上使用していますが、機能します。複雑なクラス/構造体では完全ではありませんが、機能します。)

そして、最後に、ここで私の回答を確認してください。まったく同じことをお勧めします。完全な C/C++/Objective-C コード補完を取得するには、Clang Completectagsを使用する必要があります (この種の補完には必要ありません)。

また、タグを表示する場合 (たとえば、シンボル定義に簡単にジャンプする場合) は、Indexerプラグインを使用してください。

于 2011-12-29T05:06:22.210 に答える