﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-海上月明-随笔分类-Emacs</title><link>http://www.blogjava.net/pts/category/35260.html</link><description>editer by sun</description><language>zh-cn</language><lastBuildDate>Thu, 16 Oct 2008 15:36:36 GMT</lastBuildDate><pubDate>Thu, 16 Oct 2008 15:36:36 GMT</pubDate><ttl>60</ttl><item><title>[转]emacs 代码自动补齐的三个方法</title><link>http://www.blogjava.net/pts/archive/2008/10/16/234734.html</link><dc:creator>pts</dc:creator><author>pts</author><pubDate>Thu, 16 Oct 2008 09:29:00 GMT</pubDate><guid>http://www.blogjava.net/pts/archive/2008/10/16/234734.html</guid><wfw:comment>http://www.blogjava.net/pts/comments/234734.html</wfw:comment><comments>http://www.blogjava.net/pts/archive/2008/10/16/234734.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pts/comments/commentRss/234734.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pts/services/trackbacks/234734.html</trackback:ping><description><![CDATA[<a href="http://fhf25.blog.sohu.com/73659103.html">Emacs -- 自动补齐</a><br />
<br />
在编写代码时,自动补齐（成员函数变量，以及&#8230;&#8230;）能提高很大的效率,emacs的自动补齐方法有很多种,我参考了很多其他网友的文章,简单总结了下,希望其他网友不要怪罪我哈,呵呵,我希望把我的学习过程记录下来,能对其他网友有所帮助.以下是几种不同的方法(也可以一块用哈)<br />
1.  Emacs 自带的hippie-expand (参考的是王垠的)<br />
hippie-expand是 Emacs 自带的功能,<br />
把M-/ 绑定到 hippie-expand，在.emacs文件中加入<br />
;;绑定按键  <br />
(global-set-key [(meta ?/)] 'hippie-expand)<br />
<br />
hippie-expand 的补全方式。它是一个优先列表， hippie-expand 会优先使用表最前面的函数来补全。通常的设置是：<br />
<br />
(setq hippie-expand-try-functions-list <br />
'(try-expand-dabbrev<br />
try-expand-dabbrev-visible<br />
try-expand-dabbrev-all-buffers<br />
try-expand-dabbrev-from-kill<br />
try-complete-file-name-partially<br />
try-complete-file-name<br />
try-expand-all-abbrevs<br />
try-expand-list<br />
try-expand-line<br />
try-complete-lisp-symbol-partially<br />
try-complete-lisp-symbol))<br />
首先使用当前的buffer补全，如果找不到，就到别的可见的窗口里寻找，<br />
如果还找不到，那么到所有打开的buffer去找，如果还&#8230;&#8230;那么到kill-ring里，<br />
到文件名，到简称列表里，到list，&#8230;&#8230; 当前使用的匹配方式会在 echo 区域<br />
显示.<br />
确实是非常好用,基本上我M-/就能到达我想要的了.<br />
<br />
2 采用etags<br />
etags能像cscope那样,在代码里跳来跳去,比如查找函数,变量等,它还能够自动补齐代码.<br />
1),先生成etags文件<br />
find .  /usr/include/ -name "*.c"  -or -name "*.cpp" -or -name "*.hpp" -or -name "*.h" |xargs etags --members --language=c++<br />
2).配置.emacs<br />
(setq tags-file-name "~/TAGS")<br />
3),使用<br />
在emacs中,M-tab 就可以自动补齐了,不过有时候还是不是很好用.     <br />
M-. 查找一个tag，比如函数定义类型定义等。<br />
C-u M-. 查找下一个tag的位置<br />
M-* 回到上一次运行M-.前的光标位置。  M-TAB 自动补齐函数名。 <br />
<br />
3 采用cedet包<br />
1)下载cedet <br />
网址是 http://cedet.sourceforge.net/<br />
2)编译<br />
tar -zxf cedet-1.0pre3.tar.gz<br />
cd cedet-1.0pre3<br />
make<br />
如果make不成功的话,就看看那个说明吧<br />
3)配置<br />
查看emacs的配置文件在哪里<br />
whereis emacs<br />
拷贝编译好了的cedet <br />
cp -r cedet-1.0pre3 /usr/share/emacs/<br />
查看是否有我们需要的那个文件<br />
ls /usr/share/emacs/cedet-1.0pre3/common/cedet.el<br />
<br />
配置.emacs文件,在.emacs文件中加入<br />
;;;;;;;;;;cedet<br />
(load-file "/usr/share/emacs/cedet-1.0pre3/common/cedet.el")<br />
<br />
;;设置检索范围<br />
(setq semanticdb-project-roots <br />
(list<br />
(expand-file-name "/")));;可以设置为项目的顶级目录<br />
<br />
;;绑定按键,ctr+tab,以下三种,任意选择一个,我喜欢第二个<br />
;;(global-set-key [(control tab)] 'senator-complete-symbol);<br />
(global-set-key [(control tab)] ' senator-completion-menu-popup)<br />
;; (global-set-key [(control tab)] 'semantic-ia-complete-symbol-menu)<br />
<br />
4)使用<br />
在一个未输入完成的函数上尝试下ctr+tab键
<img src ="http://www.blogjava.net/pts/aggbug/234734.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pts/" target="_blank">pts</a> 2008-10-16 17:29 <a href="http://www.blogjava.net/pts/archive/2008/10/16/234734.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>