微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 coc-clangd/coc-nvim 手动无键绑定在源代码中搜索符号?

如何解决如何使用 coc-clangd/coc-nvim 手动无键绑定在源代码中搜索符号?

我使用 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> 并仅提供对光标下符号的引用列表。

解决方法

经过更多搜索,我找到了答案。实际上,我已经在 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>

因此,我们可以通过点击 <space>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 的这种用法。(​​这就是我的想法关于这种情况的原因,所以如果有人专家解释更多并为每个人澄清,我会很高兴。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?