【问题标题】:How to manually(without keybindings) search a symbol in a source code using coc-clangd/coc-nvim?如何使用 coc-clangd/coc-nvim 手动(不使用键绑定)搜索源代码中的符号?
【发布时间】:2020-12-22 20:37:03
【问题描述】:

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

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

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

:cs find global <symbol-name>

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

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

这不会导致任何错误,但会忽略<symbol-name>,而只是给出对光标下符号的引用列表。

【问题讨论】:

    标签: c++ c neovim coc.nvim clangd


    【解决方案1】:

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

    基于feature list of clangd,自clangd-10起可在整个项目范围内搜索符号。 (在了解了这个事实之后)我在 vim sample configuration for coc.nvim plugin 中找到了以下几行:

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

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

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

    .io_delay = xen_io_delay,
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-22
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      相关资源
      最近更新 更多