- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从事 C++ 项目,我浏览了 Alex Ott 的 guide to CEDET以及 StackOverflow 中有关标签的其他线程,但我仍然对 Emacs 如何与这些不同的标签系统交互以促进自动完成、定义查找、源代码库导航或文档字符串预览感到困惑。
etags
、ebrowse
、exuberant ctags
之间有什么区别(例如在功能方面) , cscope
, GNU Global
和 GTags
?我需要做什么才能在 Emacs 中使用它们?
如果我想使用标签来导航/自动完成符号,我是否需要语义/参议员 (CEDET)?
除了这些不同的标签实用程序之外,语义还带来了什么?它如何与这些工具交互?
最佳答案
这是一个很好的问题,因为我最近在这里读到过,所以我将尝试更详细地解释其中的差异:
第 1 点:
etags
和 ctags
都生成源文件中找到的语言对象的索引(也称为标签/TAGS)文件,允许用户快速轻松地找到这些项目。文本编辑器或其他实用程序。标签表示索引条目可用的语言对象(或者,为该对象创建的索引条目)。 ctags 生成的标签在元数据方面更丰富,但 Emacs 无论如何都无法解释附加数据,因此您应该认为它们或多或少是相同的(ctags
的主要优点是它支持更多语言)。标签文件的主要用途是查找类/方法/函数/常量/等声明/定义。
cscope
是更强大的野兽(至少就 C/C++ 和 Java 而言)。虽然它的运行原理或多或少相同(生成有用元数据的文件),但它允许您执行一些更奇特的操作,例如查找对符号的所有引用,查看函数被调用的位置等(您也可以找到定义) 。
总结一下:
ctags
允许您导航到符号声明/定义(有些人将其称为单向查找)。 ctags
是一个适用于多种语言的通用工具。
另一方面(如项目页面所述)cscope
允许您:
此时,任何人都不会感到惊讶,当我处理 C/C++ 项目时,我大量使用 cscope
而很少关心 ctags
。当处理其他语言时,情况显然会相反。
第 2 点。
要拥有智能自动完成功能,您需要一个真正的 source code parser (如语义),否则您将不知道应用程序中对象(例如)的类型以及可以在它们上调用的方法。您可以根据许多不同的来源进行自动完成,但为了获得最佳结果,您最终需要一个解析器。语法高亮也是如此 - 目前 Emacs 主要模式中的语法高亮仅基于正则表达式,而且非常脆弱且容易出错。希望随着 Emacs 23.2 中包含语义(在此之前它曾经是一个外部包),我们将开始看到它的更多用途(例如使用它来分析缓冲区源代码以正确突出显示它)
自 Emacs 24.1 起,语义可从 Emacs 完成框架中使用。测试它的最简单方法是打开 C 源代码文件并输入 M-TAB 或 C-M-i 并观察语义自动为您完成。对于默认情况下未启用语义的语言,您可以将以下行添加到您选择的主要模式 Hook 中:
(add-to-list 'completion-at-point-functions 'semantic-completion-at-point-function)
第 3 点。
语义带来了真正的代码感知(对于它当前支持的少数语言)并缩小了 IDE 和 Emacs 之间的差距。它并没有真正与 etags
和 cscope
等工具交互,但这并不意味着您不能将它们一起使用。
希望我的解释有意义并且对您有用。
附注我不太熟悉 global
和 ebrowse
,但如果我没记错的话,他们使用了 etag。
关于emacs - Emacs : Relationship between etags, ebrowse、cscope、GNU Global 和 exuberant ctags 的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12922526/
我正在使用一个非常大的代码库,我发现有选择地选择包含哪些目录以供 Exuberant Ctags 使用非常有用。 --exclude 选项可以很好地消除单个文件和目录名称(带有全局通配符),但我不知道
我有一个 $HOME/.ctags文件来自 exuberant-tags ,但是 universal-tags似乎没有从中挑选我的选择。通用标签是否支持这些配置文件? 最佳答案 见 this docu
我已经查看并尝试使用旺盛的 ctags,但对我想做的事情没有运气。我在 Mac 上尝试在一个项目中工作,在该项目中我想排除 .git、node_modules、test 等目录。当我尝试类似 ctag
我可以使用什么字符在 Exuberant Ctags .ctags 中添加评论文件? 我想添加带有解释的评论,也许要禁用一些正则表达式。 但我找不到任何 ctags-exuberant 接受的评论字符
我目前正在使用 vim 进行 PHP 开发。几周前我给自己买了一台 mac,想为新的 Zend Framework 版本重新生成我的标签。 我过去使用以下脚本(linux 机器)生成标签: #!/bi
今天早上,当我尝试在 Vim 中打开文件时,我开始收到该消息。 Vim 是我选择的配置文件、git 提交消息等的编辑器,但不是我的日常代码编辑器。我显然做了一些事情来邀请这个消息,但我不知道是什么。我
当 python 类定义跨越多行时,Exuberant-ctags 会生成错误的标签,只有最后一行进入搜索模式: 考虑文件test.py: class FirstSubclass( LongL
我需要用 Symbol Browser 做一个编辑器,我说我会玩 ctags。好吧,我阅读了 ctags 格式并尝试使用 Google 并在此处搜索。我发现的只是关于 ctags 和 vim 的问题,
为了研究新文件,我习惯于使用适当的选项运行 ctags,问题是显然这个程序不支持 C++11,我只是很好地使用它,直到我发现这个程序的开发在几年前就结束了。 现在我需要一个适用于 C++11 及更高版
我目前正在将基于 C++ 的 IDE 从 XCode 切换到 Vim。我一直在阅读有关 Vim 插件“YCM”的信息,它需要在源目录中存在 .ycm_extra_conf.py。我正在使用 YCM G
我喜欢通过 TagHighlight 插件在 vim 中突出显示我的语法,该插件使用丰富的 ctags 来生成 vim 用于语法的标记文件。 直到最近,我才使用常规枚举类型,例如 enum count
从技术上讲,我正在使用 Tagbar在 vim 中查看文件的标签,但这个问题通常适用于 exuberant ctags,v5.8。 假设我有以下 python 文件,将其命名为 foo.py : cl
我正在尝试在 emacs 中使用带有 JavaScript 的 exuberant ctags,遵循此处的指导:http://mattbriggs.net/blog/2012/03/18/awesom
为了让 vim 的 YouCompleteMe 插件能够识别我的 ctags,我已经尝试了几个小时。 YouCompleteMe 中的其他所有内容似乎都在工作,例如标题中的自动完成功能等。我真的希望它
如何让 ctags 解析 using 类型别名,如下所示? using FooPtr = std::shared_ptr; 它只选取那些用 typedef 声明的。 最佳答案 从 Exuberant-
我正在尝试使用 Exuberant Ctags 5.8 为 C 标准库生成标签,但似乎标题没有完全解析......例如,当我为/usr/include/string.h 生成标签时,我明白了: !_T
我们在工作中使用 .NET,我们的项目有点混合,其中包含一些 VB 和 C#。 Exuberant Ctags 生成 C# 标签对我来说很好,遵循 these instructions 。但是,我还没
我想在工作时在 Vista(可能还有 XP 笔记本电脑)上使用 Exuberant Ctags;操作系统别无选择。我使用 GVim 而不是我的同事推荐的 Flex Builder,因为 FB 有问题,
我从事 C++ 项目,我浏览了 Alex Ott 的 guide to CEDET以及 StackOverflow 中有关标签的其他线程,但我仍然对 Emacs 如何与这些不同的标签系统交互以促进自动
我在 Windows 7 中使用 GVim 7.4 和 TDM-GCC 64。我知道这个编译器的包含目录,并将路径添加到 gvim 的标签搜索路径中。在 Windows 中一切正常。 但我是 ubun
我是一名优秀的程序员,十分优秀!