我在Alex文章之后为emacs配置了CEDET (很棒!!).现在,问题:
/usr/include,如何检查语义是否正在使用GTAGS?我正在使用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 1.0和ECB 2.40设置了emacs 23.1.50.1(受到Alex Otts设置的极大启发,位于http://github.com/alexott/emacs-configs/blob/master/rc/emacs-rc-cedet.el和他对Cedet的热情介绍(http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html),谢谢Alex).它工作得很好,但我需要更多地了解在处理多个项目时如何处理代码完成和符号引用.
我创建了一个简单的ede项目,如下所示:
(ede-cpp-root-project "test"
:file "~/src/sw/anchor"
:include-path '("/Common")
:system-include-path '("~/include"))
Run Code Online (Sandbox Code Playgroud)
加载此项目时,Semantic是否仅在项目配置中指定的各个目录中查找完成?
我按照http://mmmyddd.freeshell.net/blog/Computer/Emacs/usecscopesemanticdbbackend使用cscope作为semanticdb的后端.我可以在没有emacs抛出任何错误的情况下运行semanticdb-enable-cscope-in-buffer,但我不知道语义是否使用了我的数据库.我是否可以在项目定义中添加对cscope.out的引用,以便更好地控制在当前上下文中搜索引用的文件?
有几个古怪的东西:
当我尝试打开一个新的源文件时,我收到错误"apply:Searching for program:no such file or directory,global",没有任何反应.如果我再试一次,一切都很好.
当我尝试通过指向锚文件加载项目时,我收到此错误:"if:Wrong type argument:class-p,ede-cpp-root"
从我从文档中可以看出,语义通过在您访问它们时分析每个文件(可能还有它的邻居)来慢慢建立项目中的内容.这太慢了.我想让它访问我项目中的所有文件.是否有捷径可寻?在我能够获得体面的自动完成工作之前,必须访问数百个文件似乎很疯狂.
我还生成了一个etags文件.我能以某种方式利用它吗?
相关信息:Windows上的Emacs,版本23.2.1
如何在不破坏语义和自动完成的情况下集成SCons和emacs + cedet?
我一直在尝试为C++设置一个EDE项目(emacs24 +内置CEDET),我开始变得绝望,因为我似乎无法找到我希望生成makefile的方式.我对Emacs比较陌生.我会试着描述一下我在做什么:
我有一个像这样的玩具项目:
main.cpp
other/
Utils.cpp
Utils.h
CGrabBuffer.cpp
CGrabBuffer.h
Run Code Online (Sandbox Code Playgroud)
main.cpp在"other /"目录中包含.h's.以下是使用此简单目录设置设置EDE项目的步骤:
M-x ede-new; 类型:Make; 姓名:main-proj.M-x ede-new; 类型:Make; 姓名:aux-proj.M-x ede-new-target; 名称:main; 类型:program.出现提示时,我将main.cpp添加到此目标.M-x ede-customize-current-target所有三个目标,然后添加一些包含路径,一些库等.M-x ede-compile-project它不会编译,因为:
正如你所看到的,我正处于一团糟之中.也许我甚至不理解EDE中"目标"的含义.我还读到了ede-cpp-root-project的存在,它必须在.emacs文件中指定.我没有尝试过,因为我认为它只是帮助语义.它不会生成Makefile,是吗?我是否可以(或者我需要)使用Project.el构建的EDE项目和使用ede-cpp-root-project进行语义相同的事情?还是多余的?
抱歉,如果我误解了很多东西,但我很困惑,对emacs不熟悉会让事情变得更糟.谢谢你的耐心!
编辑:通过一些修补和我收到的回复,我已经能够找出很多东西,所以非常感谢.我还不明白的是使用ede-cpp-root-project,它必须在.emacs文件中指定.它只是用于c ++语义吗?使用Project.el的项目和.emacs中的elisp行是否是多余的?
我的emacs版本是23.2.1虽然我使用以下内容来更改后端以使用GTAGS.(需要'semantic/db-global)(semanticdb-enable-gnu-global-databases'c-mode)(semanticdb-enable-gnu-global-databases'c ++ - mode)我试着生成一个GTAGS文件用作语义的后端.但是,每次打开C文件时,Semantic仍然在不使用GTAGS文件的情况下解析文件.
是否可以使用GTAGS文件而不是内置的语义解析器?我发现内置的解析器不是很准确.
是否可以在不指定项目范围的情况下使用GTAGS文件?在我的情况下,我试图将GTAGS文件放在/ usr/include中,这应该是emacs的标准包含路径.但是语义学并没有使用它.
我正在使用Emacs 23.2.这是我加载语义的方式:
(setq semantic-default-submodes '(global-semantic-idle-scheduler-mode
global-semanticdb-minor-mode
global-semantic-idle-summary-mode
global-semantic-mru-bookmark-mode))
(semantic-mode 1)
Run Code Online (Sandbox Code Playgroud)
因此,如果我创建一个简单的java文件并访问它,我将获得本地定义的方法和类的代码完成.但我无法弄清楚如何使语义识别jdk库.例如,如果我尝试semantic-ia-complete-symbol使用String变量,我会得到Cannot find types for 'String blah'.
有谁知道如何将jdk库加载到semanticdb中,因此可以使用像String这样的标准对象类型的代码完成?
我刚刚开始设置cedet跟随各种指南,包括Alex Ott的.
这是我目前在我的init文件中所拥有的内容.
(require 'cedet)
(semantic-load-enable-code-helpers)
;; imenu breaks if I don't enable this
(global-semantic-highlight-func-mode 1)
(global-semantic-tag-folding-mode)
Run Code Online (Sandbox Code Playgroud)
我非常喜欢代码折叠,因为语义比hideshow等软件包更多地了解代码.
我想为红宝石做同样的折叠.我知道cedet还有其他的东西,但我现在只是蘸着脚趾.
所以我在contrib /文件夹中看到有明智的ruby.el.看起来语义肯定知道如何解析Ruby.INSTALL表示它应该"自动"安装.我打开一个Ruby文件,代码折叠魔术三角形不存在.现在怎么办?
我正在开发一个大型的c ++项目.我在过去的六个月里一直在使用emacs.我尝试配置CEDET以便能够轻松导航但我发现了一些问题.
1.-有时语义不会找到一些符号,有时候他不会...我不清楚哪些文件是语义索引.我曾尝试使用EDE(按照本文中的说明http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html),但我也发现了一些问题......
2.-前段时间我正在使用vim + cscope,我记得有一种方法可以在符号堆栈中导航回来(Ctrl-t).在emacs中有这样的东西吗?
PD>一些数据使问题更加清晰.
我有同一个项目的多个版本.每个人都有自己的根目录.每个项目都有多个模块,每个模块都在一个子目录中.每个模块都有头文件.
/home/user/
|
\Release-001
| |
| \makefile
| \ Module-001
| | |
| | \makefile
| | \subdir-001
| | | \header-001.h
| | | \header-002.h
| | \subdir-002
| | | \header-003.h
| \ Module-002
| | |
| | \makefile
| | \subdir-003
| | | \header-004.h
| | | \header-005.h
| | \subdir-004
| | | \header-006.h
|
\Release-002
| |
| \makefile
| …Run Code Online (Sandbox Code Playgroud) 由于我使用Emacs 24,当我试图找到符号出现的位置时,我总是会收到错误semantic-symref-symbol.细节是:
semantic-symref-symbol当光标在我的源文件的某个符号上时,我按下一些键来调用,然后我得到一个列表,描述符号在*Symref缓冲区中的位置.在列表的一个条目上,我按SPACE或RETURN键,它跳转到正确的位置,但同时,Emacs弹出*Backtrace*缓冲区在其他窗口中.其内容如下:
Debugger entered--Lisp error: (void-variable last-command-char)
semantic-symref-rb-goto-match(#<overlay from 97 to 126 in *Symref stateStack>)
push-button(97)
call-interactively(push-button nil nil)
Run Code Online (Sandbox Code Playgroud)
然后我遵循semantic-symref-rb-goto-match在semantic-symref-list.el中定义的函数.elisp函数定义如下:
(defun semantic-symref-rb-goto-match (&optional button)
"Go to the file specified in the symref results buffer.
BUTTON is the button that was clicked."
(interactive)
(let* ((tag (button-get button 'tag))
(line (button-get button 'line))
(buff (semantic-tag-buffer tag))
(win (selected-window))
)
(switch-to-buffer-other-window buff)
(goto-line line)
(pulse-momentary-highlight-one-line (point)) …Run Code Online (Sandbox Code Playgroud)emacs ×12
emacs-semantic ×12
cedet ×11
c++ ×4
autocomplete ×1
c ×1
cscope ×1
etag ×1
folding ×1
gnu-global ×1
java ×1
ruby ×1
scons ×1