我从事C++项目,我在StackOverflow中浏览了Alex Ott的CEDET指南和其他关于标签的线程,但我仍然对Emacs如何与这些不同的标签系统进行交互以促进自动完成,查找定义,源代码导航感到困惑.代码库或doc-strings的预览.
有什么区别(在功能方面如)之间 etags,ebrowse,exuberant ctags,cscope,GNU Global和GTags?在Emacs中使用它们需要做什么?
如果我想使用标签导航/自动完成符号,我是否需要语义/参议员(CEDET)?
语义在这些不同的标记实用程序之上带来了什么?它如何与这些工具接口?
我对在Emacs 24.2.1中运行CEDET和ECB需要做些什么感到困惑.
Emacswiki 有以下文字:
如何启用与Emacs合并的CEDET工具
在Emacs 23.2中,CEDET被合并到主要的Emacs发行版中.CEDET教程中解释的配置代码不再起作用.例如,您不能使用(semantic-load-enable-gaudy-code-helpers)来启用有用的功能.
TODO:请说明加载CEDET提供的最有用的IDE工具所需的代码
我有一个基本配置来处理我的.emacs中的以下内容:
Run Code Online (Sandbox Code Playgroud)(global-ede-mode 1) (require 'semantic/sb) (semantic-mode 1)
我使用CEDET(最新的CVS)和几个中等规模的项目(每个几百kLOC,主要是C,但有些C++),有时会遇到长时间停顿,系统几秒钟内完全没有响应.更少见的是,它完全旋转失控,我必须进行混搭C-g并尝试移动光标或切换到不同的缓冲区以获得控制权.
我使用GNU Global为我使用的项目创建标签,但这有时仍然很慢,特别是对于semantic-symref-symbol,有些跳转似乎需要解析大量的头文件和源文件.在某些情况下semantic-ia-fast-jump,semantic-ia--fast-jump-helper: Tag SomeFunction has no buffer information即使gtags-find-tag发现它(在同一个项目中),也可能在过时的位置发现错误; 这可能是一个临时的错误,通常semantic-ia-fast-jump是可靠的.
我很感激有关如何做的任何建议
ede-cpp-root-project.文章http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html中有一些提示,我正在寻找除该文章之外的任何内容.
我知道这已经讨论了很多次但是在emacs中有没有很好的c/c ++ intellisense方法?我从来没有能够正确设置cedet.
现在我正在开发一个带有huuge代码库的维护项目,没有适当的智能感知就很难管理.目前我正在使用带有ctags/cscope的vim和用于intellisense的omnicomplete功能,效果很好; 但是我希望能够使用emacs.
我最近为OS X 10.6构建并安装了Emacs 23.2.1,它显然预先安装了CEDET 1.0pre7,但是我的旧CEDET配置失败了(例如(semantic-load-excessive-code-helpers)甚至(semantic-load-code-helpers)未定义),即使在我的.emacs中添加了以下内容之后:
(require 'cedet)
(semantic-mode 1)
(require 'semantic)
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我在Alex文章之后为emacs配置了CEDET (很棒!!).现在,问题:
/usr/include,如何检查语义是否正在使用GTAGS?我想make-shells在emacs中有一个命令,它将打开一些emacs-shell缓冲区,每个缓冲区都有自己的工作目录.我的想法是,对于我正在处理的每个项目,我都有一个从该项目目录开始的shell,因此我可以轻松地在它们之间切换.
目前我有这个代码:
(defun shell-dir (name dir)
(interactive "sShell name: \nDDirectory: ")
(shell name)
(switch-to-buffer name)
(comint-send-string (current-buffer) (concat "cd " dir "\r"))
(sleep-for 0 10)
(dirs))
(defun make-shells ()
(interactive)
(shell-dir "project1" "~/proj/project1")
(shell-dir "project2" "~/proj/project2")
(shell-dir "project3" "~/proj/project3")
(delete-window))
Run Code Online (Sandbox Code Playgroud)
但这很丑陋,有一半的时间(dirs)没有找到正确的路径,因此标签完成会中断,直到我手动重新运行它.是否有内置方法来设置emacs shell的当前工作目录?或者像CEDET这样的东西(再加上对shell和emacs模式的依赖程度更低)是一个更好的解决方案吗?
我目前在OS X上使用emacs24.
CEDET Version: 1.0
Requested File Loaded
Package Version Version Version
----------------------------------------------------------
cedet: 1.0 nil ok
eieio: 1.3 nil ok
semantic: 2.0 nil ok
srecode: 1.0 nil Not Loaded
ede: 1.0 nil Not Loaded
speedbar: 1.0 nil Not Loaded
Run Code Online (Sandbox Code Playgroud)
emacs24附带cedet,我正在尝试将cedet 1.0升级到1.1.我编译了cedet:
emacs -Q -nw -l cedet-build.el -f cedet-build -f save-buffers-kill-terminal
Run Code Online (Sandbox Code Playgroud)
然后加入(load-file "~/.emacs.d/cedet/common/cedet.el")到.emacscedet告诉我一切都很好,花花公子
CEDET Version: 1.1
Requested File Loaded
Package Version Version Version
----------------------------------------------------------
cedet: 1.1 ok ok
eieio: 1.4 ok ok
semantic: 2.1 ok ok …Run Code Online (Sandbox Code Playgroud) 我正在使用CEDET 1.1运行Emacs 23.3.1.该命令semantic-complete-jump-local总是返回"No Match"时semantic-complete-jump工作正常.
我调查了semantic-complete.el但是我对elisp的了解并不足以理解发生了什么......
我在一个新的linux主机上重新安装了emacs 24.2.50,并基于magnars emacs配置启动了一个新的dotEmacs 配置.由于我在之前的工作流程中使用了CEDET取得了一些成功,因此我开始配置它.但是,每当我加载C++源文件时,都会有一些奇怪的行为.
[本部分已解决]
正如预期的那样,语义解析所有包含的文件(并在初始设置期间解析由semantic-add-system-include变量指定的所有文件),但它会打印出如下所示的错误消息:
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是我正在编辑的文件和缓冲区,而IndexMap和fXBetween是我正在编辑的文件所包含的文件中定义的类型/我正在编辑的文件所包含的某个文件.
我没有测试CEDET /语义的任何进一步的功能,因为问题非常烦人.我的cedet配置可以在这里找到.
编辑:在Alex Ott的帮助下,我解决了第一个问题.这是由于我可怕的cedet初始化.请参阅他的第一个答案,了解配置CEDET的正确方法!
仍然存在问题Idle Service Error(当启用时global-semantic-idle-local-symbol-highlight-mode,永久发生,不仅在检查点上类型的定义时). …
cedet ×10
emacs ×10
c++ ×2
cscope ×2
c ×1
elisp ×1
emacs-ecb ×1
emacs24 ×1
gnu-global ×1
intellisense ×1
scalability ×1