2

我使用 neovim 和 coc-clangd 进行 C/C++ 编程。一切都很好,我可以通过将光标放在符号上并使用gr键绑定来调用jumpReferences操作,从而在我的所有项目文件中跳转定义和搜索符号的引用。

我想知道是否有任何选项可以通过简单地键入而不是gr在 coc-clangd 中使用键绑定来搜索符号?

实际上我可以通过以下命令使用 cscope 完成这项工作:

:cs find global <symbol-name>

但是使用 coc-clangd 会更好,因为索引过程更简单。所以我搜索并找到了这个链接,在那里我找到了jumpReferencescoc 动作。我玩了很多这个动作。例如我运行了以下命令:

:call CocAction('jumpReferences', <symbol-name>)

这不会导致任何错误,但会忽略<symbol-name>并仅提供对光标下符号的引用列表。

4

1 回答 1

3

经过更多搜索,我找到了答案。实际上,我已经在coc.nvim 存储库中看到了我的问题的答案,但要弄清楚我必须更仔细地阅读它。

基于clangd的特性列表,可以在整个项目范围内搜索符号clangd-10。(在了解了这个事实之后)我在coc.nvim 插件的 vim 示例配置中找到了以下几行:

" Search workspace symbols.
nnoremap <silent><nowait> <space>s  :<C-u>CocList -I symbols<cr>

因此,我们只需<space>s在打开的交互式缓冲区中点击并键入符号名称即可在项目中搜索符号。

注意:coc-clangd 找到的符号列表比 cscope 少。我实际上认为这并不意味着 coc-clangd 不完整。实际上, coc-clangd 效果很好。例如,考虑io_delaylinux 内核中符号的情况。这个符号是一个函数,并且 coc.nvim/coc-clangd 在项目中找到它的所有引用,但是有些地方使用它,如下所示:

.io_delay = xen_io_delay,

而 clangd 没有看到这些用法,但 cscope 找到了它们。在这种情况下,我知道这io_delay不是一个函数,而 clangd 看不到它的事实并不是它的缺点,实际上我认为它运行良好。我认为(我不完全知道)cscope 索引有时像 vim 中的搜索一样工作,因为io_delay在这种情况下使用了这个词,cscope 看到了这种用法io_delay。(​​这是我想到这种情况的原因,所以我会如果有人专家解释更多并为大家澄清它,我很高兴。)

于 2020-12-23T21:30:58.657 回答