YouCompleteMe(vim 插件) GoToDefinition 不起作用
YouCompleteMe(vim plugin) GoToDefinition doesn't work
let g:ycm_global_ycm_extra_conf='~/.vim/bundle/youcompleteme/.ycm_extra_conf.py'
let g:ycm_min_num_of_chars_for_completion=1
let g:ycm_confirm_extra_conf=0
let g:ycm_autoclose_preview_window_after_completion = 1
nnoremap <F5> :YcmForceCompileAndDiagnostics<CR>
nnoremap <leader>gic :YcmCompleter GoToInclude<CR>
nnoremap <leader>gdc :YcmCompleter GoToDeclaration<CR>
nnoremap <leader>gdf :YcmCompleter GoToDefinition<CR>
nnoremap <leader>gip :YcmCompleter GoToImprecise<CR>
nnoremap <leader>f :YcmCompleter FixIt<CR>
这是 ~/.vimrc
中与 ycm
相关的部分。
此外,.ycm_extra_conf.py
中的 flags
包含 echo | gcc -std=c++11 -v -E -x c++ -
的结果,它指的是 C-family
的包含路径。
问题
虽然 auto-complete
工作正常,但 GoToDefinition
根本不起作用。
(这里works
是什么意思,ycm
可以识别项目中的本地头文件。)
根据 NOTE,GoToDefinition
仅适用于当前 translation unit
。
但是,GoToDefinition
仅适用于我所编辑的文件。
我的尝试:放弃让.ycm_extra_conf.py
全球化
- 将
.ycm_extra_conf.py
复制到项目顶部并修改~/.vimrc
中的g:ycm_global_ycm_extra_conf
。
- 做
YcmForceCompileAndDiagnostics
- 检查
final_flags
in FlagsForFile
函数 in .ycm_extra_conf.py
file.
final_flags
是这样的。
['-Wall', '-Wextra', '-Werror', '-Wc++98-compat', '-Wno-long-long', '-Wno-variadic-macros', '-fexceptions', '-DN DEBUG', '-DUSE_CLANG_COMPLETER', '-std=c++11', '-x', 'c++', '-isystem', '/home/illuxic/Redbase/../BoostParts', ' -isystem', '/System/Library/Frameworks/Python.framework/Headers', '-isystem', '/home/illuxic/Redbase/../llvm/inc lude', '-isystem', '/home/illuxic/Redbase/../llvm/tools/clang/include', '-I', '/home/illuxic/Redbase/.', '-I', ' /home/illuxic/Redbase/./ClangCompleter', '-isystem', '/home/illuxic/Redbase/./tests/gmock/gtest', '-isystem', '/ home/illuxic/Redbase/./tests/gmock/gtest/include', '-isystem', '/home/illuxic/Redbase/./tests/gmock', '-isystem' , '/home/illuxic/Redbase/./tests/gmock/include', '-isystem', '/usr/include/c++/5', '-isystem', '/usr/include/x86 _64-linux-gnu/c++/5', '-isystem', '/usr/include/c++/5/backward', '-isystem', '/usr/lib/gcc/x86_64-linux-gnu/5/in clude', '-isystem', '/usr/local/include', '-isystem', '/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed', '-isystem ', '/usr/include/x86_64-linux-gnu', '-isystem', '/usr/include']
GoToDefinition
仍然给我 'RuntimeError: Can't jump to definition.
'
如何让 GoToDefinition
工作?
既不能识别间接包含的头文件,也不能识别直接包含的头文件。
您可以在 here 中查看更多详细信息。
我误解的是@puremourning 写的评论。
我建议您先阅读此评论。
let g:ycm_global_ycm_extra_conf='~/.vim/bundle/youcompleteme/.ycm_extra_conf.py'
let g:ycm_min_num_of_chars_for_completion=1
let g:ycm_confirm_extra_conf=0
let g:ycm_autoclose_preview_window_after_completion = 1
nnoremap <F5> :YcmForceCompileAndDiagnostics<CR>
nnoremap <leader>gic :YcmCompleter GoToInclude<CR>
nnoremap <leader>gdc :YcmCompleter GoToDeclaration<CR>
nnoremap <leader>gdf :YcmCompleter GoToDefinition<CR>
nnoremap <leader>gip :YcmCompleter GoToImprecise<CR>
nnoremap <leader>f :YcmCompleter FixIt<CR>
这是 ~/.vimrc
中与 ycm
相关的部分。
此外,.ycm_extra_conf.py
中的 flags
包含 echo | gcc -std=c++11 -v -E -x c++ -
的结果,它指的是 C-family
的包含路径。
问题
虽然auto-complete
工作正常,但GoToDefinition
根本不起作用。
(这里works
是什么意思,ycm
可以识别项目中的本地头文件。)
根据 NOTE,GoToDefinition
仅适用于当前translation unit
。
但是,GoToDefinition
仅适用于我所编辑的文件。我的尝试:放弃让
.ycm_extra_conf.py
全球化- 将
.ycm_extra_conf.py
复制到项目顶部并修改~/.vimrc
中的g:ycm_global_ycm_extra_conf
。 - 做
YcmForceCompileAndDiagnostics
- 检查
final_flags
inFlagsForFile
函数 in.ycm_extra_conf.py
file. final_flags
是这样的。
['-Wall', '-Wextra', '-Werror', '-Wc++98-compat', '-Wno-long-long', '-Wno-variadic-macros', '-fexceptions', '-DN DEBUG', '-DUSE_CLANG_COMPLETER', '-std=c++11', '-x', 'c++', '-isystem', '/home/illuxic/Redbase/../BoostParts', ' -isystem', '/System/Library/Frameworks/Python.framework/Headers', '-isystem', '/home/illuxic/Redbase/../llvm/inc lude', '-isystem', '/home/illuxic/Redbase/../llvm/tools/clang/include', '-I', '/home/illuxic/Redbase/.', '-I', ' /home/illuxic/Redbase/./ClangCompleter', '-isystem', '/home/illuxic/Redbase/./tests/gmock/gtest', '-isystem', '/ home/illuxic/Redbase/./tests/gmock/gtest/include', '-isystem', '/home/illuxic/Redbase/./tests/gmock', '-isystem' , '/home/illuxic/Redbase/./tests/gmock/include', '-isystem', '/usr/include/c++/5', '-isystem', '/usr/include/x86 _64-linux-gnu/c++/5', '-isystem', '/usr/include/c++/5/backward', '-isystem', '/usr/lib/gcc/x86_64-linux-gnu/5/in clude', '-isystem', '/usr/local/include', '-isystem', '/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed', '-isystem ', '/usr/include/x86_64-linux-gnu', '-isystem', '/usr/include']
GoToDefinition
仍然给我 'RuntimeError: Can't jump to definition.
'
- 将
如何让 GoToDefinition
工作?
既不能识别间接包含的头文件,也不能识别直接包含的头文件。
您可以在 here 中查看更多详细信息。
我误解的是@puremourning 写的评论。
我建议您先阅读此评论。