首页 > 其他分享 >ctags和youcompleteme的比较

ctags和youcompleteme的比较

时间:2023-05-14 11:55:19浏览次数:37  
标签:文件 clangd tags youcompleteme vim ctags 比较

ctags和youcompleteme是vim常用的两个代码提示工具。前者更古老简便,后者更先进。他们都是很优秀的软件工具,这里对他们进行对比梳理,以达到灵活使用他们的目的。

基本使用介绍。

ctags是vim内在就支持的,ctags -R产生tags文件,vim中通过set tags=/path/to/tags文件,即可达到使用tags文件中的符号进行补齐、查看定义点等目的。注意为了能全局使用最后使用ctags -R $PWD,产生的tagfile的路径为绝对路径。

youcompleteme是C-S模式的(主要讨论C/C++语言),client端为vim,vim将当前编译的文件、编辑点、编译选项等发送个clangd这个服务器,clangd返回补齐的提示信息、符号跳转的目的地址等信息。ycm更多是单个translation-unit的视角。
clangd的版本最好高一点。我用13.0版本有点问题。15.0 is ok。

使用场景介绍

ctags更多的是项目视角的。ctags适合在一个新的workspace上开始,又希望依赖某个成熟项目进行提示。实践下来,可以先写个函数,跳一下定义激活一下(原因可能是同时装了youcompleteme, vim没从ycm的模式中跳出来)。

而youcompleteme是translation-unit的视角,需要当前编辑的文件有一点基础代码。对于写一个空的C/C++程序时,我们记忆碎片可能就某些函数名片段、变量片段,而记不清头文件是什么。。。

可视化的友好程度的比较

总体上,youcompleteme的跳转更准确一点,clangd,tags的跳转精度取决于你的tags文件的生成质量,ctags程序生成的tags标签太多太杂。
代码补齐的提示信息方面,youcompleteme更丰富一些,如函数的原型、用户的注释提示信息都可以看到。

透明程度

作为用户,ctags的tags文件是明文的,很直接很透明。ycm vim和clangd的交互信息用户不可见。

vim的tags文件可以自己生成。只要了解了他的格式。
为了兼容性,tags文件每行的格式前三项都是(更多信息参考https://docs.ctags.io/en/latest/man/tags.5.html#tags-5

{tagname}\t{tagfile}\t{tagaddress}

tagname需要按照升序来排。这个可以作为跳转时匹配光标下函数、变量、头文件名等,也是补齐中会联想的符号。
tagfile表示标签定义的文件路径,要是想在任何地方用,最好定义成
tagaddress就像任何Ex命令(可以认为是非交互式vim,需要在脚本中自动去编辑文件的操作时可能会用到),用于定位到文件中的具体位置。可以是行号,也可以是匹配的pattern。后者的好处是即使tagfile中加了些无关的行,也能快速匹配到。
在满足基本兼容性的前提下,开发新应用的时候,可以在tagaddress中加;",可以作为更丰富的提示信息(如函数的原型而不仅仅是函数名)展示在prompt中。

Questions about youcompleteme

youcompleteme以plugin/youcompleteme.vim脚本形式出现在vim中,vimrc中runtimepath加这个plugin所在路径,即可使用YcmCompleter等命令

  1. vim怎么准备当前的数据给clangd?
  2. vim以怎么样参数告诉clangd?

vscode中用不好clangd可能是因为clangd的路径设置有问题。

set the clangd.path string in settings.json.

标签:文件,clangd,tags,youcompleteme,vim,ctags,比较
From: https://www.cnblogs.com/zwlwf/p/17398966.html

相关文章

  • Cassandra HBase和MongoDB性能比较
    这是一篇基于亚马逊云平台上对三个主流的NoSQL数据库性能比较,在读写两个操作不同的组合情况下性能表现不同。横坐标是吞吐量,纵坐标是延迟,这是一对矛盾,吞吐量越大,延迟越低,代表越好。1.纯粹插入,Cassandra领先,见下图:2.WorkloadA:读修改操作各占一半情况下的修改性能:MongoDB明显延迟......
  • H5U的一个比较完整的程序框架. PLC还是性价比挺高,特别是对于伺服的总线。
    H5U的一个比较完整的程序框架.PLC还是性价比挺高,特别是对于伺服的总线。主打的伺服控制是ETHERCAT总线程序写的条理分明,清晰易懂,注释清楚,对于初次使用汇川的总线控制有很好的参考价值,。气缸的控制宝库伸出、缩回、报警轴的控制是分为通讯、READY、使能、JOG、绝对定位、压合、......
  • 复数的比较
    一.问题描述:建立一个复数类,实数和虚数是其私有数据成员。建立一个>(大于号)的运算符重载,比较两个复数间模的大小。二.代码输入:#include"iostream"usingnamespacestd;classFu{public:doubleshi;doublexv;voidset(){cin>>this->shi;......
  • 分数比较
    分数比较:比较两个分数的大小。解题思路:输入两个分数,构造可以求出最小公倍数的函数,利用函数求出分母相同时两分子的大小,比较大小,根据要求输出结果。代码:#include<iostream>usingnamespacestd;intbei(intx,inty){   intt,temp,k=x*y;   if(x<y)   {......
  • 精选论文 | Capon算法与MUSIC算法性能的比较与分析
    公众号【调皮连续波】,其他平台为自动同步,内容若不全或乱码,请前往公众号阅读。持续关注调皮哥,获得更多雷达干货学习资料和建议,和大家一起学习雷达技术。【正文】首先说结论:当信噪比(SNR)足够大时,Capon算法和MUSIC算法的空间谱非常相似,因此在SNR比较大时它们的性能几乎一样,当不同信号源......
  • 使用Visual Studio进行文件差异比较
    一、启动VS命令窗口。依次点击【视图】>>【其它窗口】>>【命令窗口】,启动命令窗口 二、在命令窗口启动比较命令格式:工具.查找文件差异【空格】"file1"【空格】"file2",没错命令就是中文(在Windows命令行中,命令和参数之间需要用空格隔开)eg:工具.查找文件差异"D:\Aapi.h""......
  • H5U的一个比较完整的程序框架. PLC还是性价比挺高,特别是
    H5U的一个比较完整的程序框架.PLC还是性价比挺高,特别是对于伺服的总线。主打的伺服控制是ETHERCAT总线程序写的条理分明,清晰易懂,注释清楚,对于初次使用汇川的总线控制有很好的参考价值,。气缸的控制宝库伸出、缩回、报警轴的控制是分为通讯、READY、使能、JOG、绝对定位、压合、报......
  • 低压无感BLDC方波控制方案 反电动势和比较器检测位置 带载满载启动!
    低压无感BLDC方波控制方案反电动势和比较器检测位置带载满载启动!1.启动传统三段式,但是我强拖的步数少,启动很快,基本可以做到任意电机启动切闭环。2.入门方波控制的程序和原理图,方案简单,可移植。3.需要更多功能的:如电感法初始位置检测,双闭环控制,同步整流等特殊功能的加好友我!程序......
  • Python学习之二:不同数据库相同表是否相同的比较方法
    摘要昨天学习了使用python进行数据库主键异常的查看.当时想我们有跨数据库的数据同步场景.对应的我可以对不同数据库的相同表的核心字段进行对比.这样的话能够极大的提高工作效率.我之前写过很长时间的shell.昨天跟着同事开始学python.感觉的确用python能够节约大量的时间.......
  • SSA-LSTM,即麻雀搜索算法SSA优化LSTM的程序,麻雀搜索算法是2021年提出来的,比较有创新性
    SSA-LSTM,即麻雀搜索算法SSA优化LSTM的程序,麻雀搜索算法是2021年提出来的,比较有创新性。本程序优化隐含层神经元个数,最佳学习率,最佳迭代次数。相较于不经过优化的LSTM,预测精度明显提高。程序内注释详细,直接替换数据就可以用,可学习性强。直接运行可以出拟合预测图,优化迭代图,多种评价......