问题标签 [emacs-semantic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
190 浏览

emacs - 无法在 C++ 项目中的原型和实现之间切换

我曾经semantic-analyze-proto-impl-toggle在函数的 proto 和 impl 之间切换,但是当我使用此功能时,它总是什么都不做,除了说它找不到对应的实现,其他功能如名称完成是可以的。谁能帮我这个问题?而且我真的很想知道语义是否只解析当前缓冲区和包含路径中的头文件,而不解析其他实现文件。我的意思是当它试图找到一个函数的实现时,语义是否会解析项目中的所有文件。

0 投票
1 回答
538 浏览

java - 如何在 Emacs 中将外部标签文件添加到 CEDET

我尝试使用 CEDET 在 Emacs 中自动完成,这对于 C/C++ 来说效果很好。但是我找不到任何关于如何在没有 JDEE 的帮助下将 CEDET 与 Java 一起使用的信息,JDEE 被认为已经过时并且与 CEDET 1.1 不兼容。我使用此处找到的实用程序获得了一个标签文件,但我不知道如何将其集成到 CEDET 系统中。根据 CEDET 的网站,这是可能的。但他们没有解释如何做到这一点。有人愿意回答这个问题吗?

以下是该实用程序生成的标签文件的一些示例:

0 投票
0 回答
263 浏览

emacs - semantic-complete-jump-local 在 Emacs 中返回“No Match”

我正在使用 CEDET 1.1 运行 Emacs 23.3.1。该命令在正常工作时semantic-complete-jump-local总是返回。"No Match"semantic-complete-jump

我调查了semantic-complete.el但我对 elisp 的了解还不足以理解正在发生的事情......

0 投票
2 回答
1761 浏览

c++ - 奇怪的语义错误

我在新的 linux 主机上重新安装了 emacs 24.2.50,并基于magnars emacs 配置启动了新的 dotEmacs 配置。由于我在之前的工作流程中使用 CEDET 取得了一些成功,因此我开始对其进行配置。但是,每当我加载 C++ 源文件时,都会出现一些奇怪的行为。

[这部分已解决]
正如预期的那样,语义解析所有包含的文件(并且在初始设置期间解析由语义添加系统包含变量指定的所有文件),但它会打印出如下错误消息:

WARNING: semantic-find-file-noselect called for /usr/include/c++/4.7/vector while in set-auto-mode for /usr/include/c++/4.7/vector. You should call the responsible function into 'mode-local-init-hook'.

在上面的示例中,为 STL 向量打印了错误,但为我正在访问的文件和任何后续包含的每个文件都打印了相应的错误消息。结果它需要很长时间才能完成,不幸的是,这个过程会重复任何类型,我打开一个新的缓冲区。

[这个问题也解决了]
此外,当我将点放在非 c 原始类型(即不是 int、double、float 等)之上而不是在modeline 错误消息,例如

Idle Service Error semantic-idle-local-symbol-highlight-idle-function: "#<buffer DEPFETResolutionAnalysis.cc> - Wrong type argument: stringp, (((0) \"IndexMap\"))" Idle Service Error semantic-idle-summary-idle-function: "#<buffer DEPFETResolutionAnalysis.cc> - Wrong type argument: stringp, ((\"fXBetween\" 0 nil nil))"

其中DEPFETResolutionAnalysis.cc是我当前正在编辑的文件和缓冲区,IndexMapfXBetween是在我正在编辑的文件/我正在编辑的文件中包含的文件中定义的类型。

我没有测试 CEDET/semantic 的任何其他功能,因为这个问题很烦人。我的 cedet 配置可以在这里找到。

编辑:在 Alex Ott 的帮助下,我解决了第一个问题。这是由于我可怕的 cedet 初始化。有关配置 CEDET 的正确方法,请参阅他的第一个答案!
仍然存在问题Idle Service Error(启用时global-semantic-idle-local-symbol-highlight-mode,它会永久发生,不仅在检查点的类型定义时)。
还有一个问题是如何禁用站点级初始化文件

EDIT2:我已经semantic-debug-idle-function在出现问题的缓冲区中执行,它产生了 ~700kb [原文如此!] 输出。看起来它正在对数据容器执行一些操作,从外观上看,它包含有关已解析文件中定义的所有符号的信息。因为我解析了一个相当大的包(~20Mb 源文件),所以这个表相当大。语义可以处理这么大的数据库还是这是不可能的以及我的问题的原因?

EDIT3:删除~/.semanticdb并重新解析所有包含的内容就可以了。我仍然需要禁用站点级初始化文件,但由于这与 CEDET 无关,我将关闭此问题(与站点级初始化文件相关的问题可以在此处找到)。

0 投票
3 回答
864 浏览

emacs - 如何禁用特定类型文件的语义

对于具有混合类型的编程语言的文件,例如 .html,语义难以分析代码。有没有办法专门禁用这些类型文件的语义自动分析?

我正在使用 Emacs 24 附带的内置 cedet:

0 投票
2 回答
143 浏览

emacs - emacs cedet(语义)如何删除连字符函数装饰

多亏了这篇文章,我能够通过它的内联解析删除一些丑陋的下划线语义,但我仍然有一个连字符出现在我真的想删除的每个函数调用(有时还有其他地方)。我怎样才能做到这一点?我还浏览了http://www.gnu.org/software/emacs/manual/html_mono/semantic.html#Tag-Decoration-Mode

参考图片:

在此处输入图像描述

0 投票
2 回答
1612 浏览

emacs - 当我使用语义定位符号时出现“void-variable last-command-char”错误

由于我使用 Emacs 24,所以当我尝试查找符号与semantic-symref-symbol. 详情如下:

  1. 当光标位于源文件的某个符号上时,我按下一些键来调用semantic-symref-symbol,然后我得到一个描述符号在*Symref缓冲区中出现位置的列表。
  2. 在列表的一个条目上,我按下SPACERETURN键,它会跳转到正确的位置,但同时,Emacs*Backtrace*会在其他窗口中弹出缓冲区。其内容如下:

    然后我遵循在semantic-symref-list.elsemantic-symref-rb-goto-match中定义的函数。elisp 函数定义如下:

    last-command-char在函数中找到了 ,但我不明白为什么 Emacs 会抱怨(void-variable last-command-char). 应该是spaceor的键码return

我想知道原因并解决这个问题。

0 投票
1 回答
212 浏览

emacs - 在 emacs 中使用具有交互功能和默认参数调用的语义的键映射

在语义上;要在函数声明中移动,可以使用C-c , J打开声明,并C-u C-SPC返回调用函数的位置。然而,要将这些功能映射到其他一些类似的短键绑定M-right(意味着 alt 键与右箭头组合),所以在我们的.emacs中我们可以:

(define-key global-map [(M-right)] 'semantic-complete-jump)。

这确实有效,因为C-c , J被映射为调用语义完成跳转函数。

所以两个问题:

  1. 如何将 M-left 映射到C-u C-SPC? 请记住,这C-u不是命令的一部分,它只是传递给被调用函数的参数。

  2. 有没有什么方法可以在不交互的情况下调用语义完成跳转C-c , J并且默认情况下始终使用默认值(主要是光标在哪里的单词)?这将允许避免一个额外的击键在代码周围移动得更快。

这可以通过M-.(mapped to find-tag ) 和M-*(mapped to pop-tag-mark ) 使用 emacs 玩标签和 etags 来完成,但是使用语义它似乎更强大,更适合大型项目的大量代码。

s̲o̲t̲h̲e̲e̲p̲p̲r̲e̲e̲i̲u̲s̲s̲p̲ M-right_ M-left_

0 投票
0 回答
108 浏览

emacs - 在 emacs 中加载语义数据库标签而不重新访问文件

emacs 手册的这一部分指出,重新访问文件是从语义数据库加载标签的默认方式,但是(在第二段中)可以访问标签信息而无需再次打开该文件。它是否需要另一个程序连接到提到的 API 或是否有内置设置?我想也许搜索油门设置会做到这一点,但似乎没有帮助。如果它确实需要另一个程序,是否存在这样的应用程序?

例如,如果我打开 foo.cpp 和 foo.h,我可以使用 semantic-analyze-proto-impl-toggle 在定义/实现之间来回跳转。当我关闭 emacs 时,我可以调查 ~/.emacs.d/semanticdb/ 的内容并确保 foo.cpp 中的标签已保存。

然后,在新的 emacs 会话中打开 foo.h 并尝试跳转到定义的实现。在我在缓冲区中打开 foo.cpp 之前,我会收到“找不到合适的实现”消息。

我希望它立即工作。如果文件没有打开,我认为 emacs 应该将它加载到一个新的缓冲区中并带我去那里!

0 投票
1 回答
1741 浏览

emacs - 使用 cscope 设置语义

我开始尝试使用 emacs 作为我的开发环境,但遇到了一些麻烦。我希望将 cscope 与语义一起使用,以获得一种相当健壮的方式来搜索我的代码库。但是,在安装 cscope (with apt-get install cscope) 并xscope.el进入我~/.emacs.d/的 .emacs 文件后,我仍然无法调用一些设置。当我尝试调用(semanticdb-enable-cscope-databases)时,我收到一个错误,即符号的函数定义无效。我正在使用 emacs 24.3