站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
Emacs/在Emacs下用C、C++编程
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
{{Emacs top}} [[Emacs]]本身的功能非常的强大。[[程序员]]有三种,一种是用[[vi]]的,一种是用[[emacs]]的,还有一种是其他。或许有些夸张,但也颇能体现出emacs在程序员中的地位。 ==概述== emacs最大的问题在于入门门槛较高。它看起来和多数人想象中的[[IDE]]相差甚远,很多人看到emacs的第一眼就觉得它是个记事本(还是个非常难用的记事本),稍微好些的往往觉得emacs也就是个ultraEditor而已,真是暴殄天物了。 本例基本[[编程]]环境是: *Debian GNU/[[Linux]] sid [[操作系统]] *Gnome 2.10.0 桌面环境 *GUN Emacs 23.0.0.1 for debian *使用 Gnu tool chains(gcc,make,gdb等等) 后面的叙述都基于上述环境。另外,本文主要针对[[C]]/[[C++]]程序开发,对其他语言有些也适用。 ==基本流程== 写C++程序基本几个步骤: *编辑[[代码]] *编写Makefile *编译代码,修改编译错误 *调试代码,修改逻辑错误 当然,往往还需要阅读别人的代码。 根据上述步骤,本文主要针对以下几个方面: *配置Emacs,建立便利的代码编辑环境和Makefile编写环境。 *在Emacs中编译代码,并修改编译错误。 *在Emacs中配合GDB调试程序。 *利用cscope和ecb在emacs中阅读代码。 ==基本环境设置== ===编辑环境配置=== 要写C++程序,当然要用到cc-mode[[插件]]。CC-Mode原本是支持C语言的,但现在也能支持很多语言,比如 C++,[[Java]],[[Objective-C]],[[CORBA]],[[AWK]],[[Pike]]等等。CC-Mode是gnu-emacs的标准插件。如果您要求不高,那么默认的配置或许就能满足。CC-Mode的各种行为都可以自由地定制. 这里本例的.emacs文件中关于CC-Mode配置的部分,仅供参考: ;;;; CC-mode配置 http://cc-mode.sourceforge.net/ (require 'cc-mode) (c-set-offset 'inline-open 0) (c-set-offset 'friend '-) (c-set-offset 'substatement-open 0) <pre>;;;;本例的C/C++语言编辑策略 (defun my-c-mode-common-hook() (setq tab-width 4 indent-tabs-mode nil) ;;; hungry-delete and auto-newline (c-toggle-auto-hungry-state 1) ;;按键定义 (define-key c-mode-base-map [(control \`)] 'hs-toggle-hiding) (define-key c-mode-base-map [(return)] 'newline-and-indent) (define-key c-mode-base-map [(f7)] 'compile) (define-key c-mode-base-map [(meta \`)] 'c-indent-command) ;; (define-key c-mode-base-map [(tab)] 'hippie-expand) (define-key c-mode-base-map [(tab)] 'my-indent-or-complete) (define-key c-mode-base-map [(meta ?/)] 'semantic-ia-complete-symbol-menu)</pre> 注意一下,上面最后两行是代码自动补齐的快捷键。 <pre>;;预处理设置 (setq c-macro-shrink-window-flag t) (setq c-macro-preprocessor "cpp") (setq c-macro-cppflags " ") (setq c-macro-prompt-flag t) (setq hs-minor-mode t) (setq abbrev-mode t) ) (add-hook 'c-mode-common-hook 'my-c-mode-common-hook) ;;;;我的C++语言编辑策略 (defun my-c++-mode-hook() (setq tab-width 4 indent-tabs-mode nil) (c-set-style "stroustrup") ;; (define-key c++-mode-map [f3] 'replace-regexp) )</pre> ===自动补齐=== 自动补齐通常用的都是hippie-expand。不过有时候会觉得这个自动补齐“傻”了一点,常会补齐出一些毫不相干的东西,因为hippie-expand是根据你敲过的词和kill-ring等进行判断的,并不对程序语法进行分析。 所以你还需要安装一个代码分析工具,然后把它加进hippie-expand的扩展策略里去。我们可以用semantic。 Semantic是CEDET 中的一个工具,CEDET是Collection of Emacs Development Environment Tools的缩写,它包含了好几个工具,都挺不错的。 您可以在.emacs中对Semantic进行配置,下面是本例的.emacs相关的配置,仅供参考: 导入cedet: (load-file "~/lib/emacs-lisp/cedet-1.0pre3/common/cedet.el") 配置Semantic的检索范围: (setq semanticdb-project-roots (list (expand-file-name "/"))) 自定义自动补齐命令,如果在单词中间就补齐,否则就是tab。 <pre>(defun my-indent-or-complete () (interactive) (if (looking-at "\\>") (hippie-expand nil) (indent-for-tab-command)) ) (global-set-key [(control tab)] 'my-indent-or-complete)</pre> hippie的自动补齐策略,优先调用了senator的分析结果: <pre>(autoload 'senator-try-expand-semantic "senator") (setq hippie-expand-try-functions-list '( senator-try-expand-semantic try-expand-dabbrev try-expand-dabbrev-visible try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill try-expand-list try-expand-list-all-buffers try-expand-line try-expand-line-all-buffers try-complete-file-name-partially try-complete-file-name try-expand-whole-kill ) )</pre> 注意一下前面CC-Mode配置中有这么两行: (define-key c-mode-base-map [(tab)] 'my-indent-or-complete) define-key c-mode-base-map [(meta ?/)] 'semantic-ia-complete-symbol-menu) 这样,我们在CC-Mode中就可以调用自定义的hippie补全了,快捷键是Tab。 另外还把快捷键“Alt + / ”绑定到了semantic-ia-complete-symbol-menu命令上,这是semantic的命令,它会根据分析结果弹出补齐的菜单,效果如下图显示: [[Image:Thumbs_semantic-ia.jpg]] CEDET中还有一个不错的工具是speedbar,你可以用它在多个文件中快速切换。在本例的.emacs配置文件里,把speedbar关联到了F5上: (global-set-key [(f5)] 'speedbar) 这样用F5就可以调出speedbar,效果如下: [[Image:Thumbs speedbar.jpg]] ==编译和调试程序== 按上面的配置,写完程序和Makefile文件后,在Emacs源代码窗口中按F7就可以进行编译。因为在my-c-mode-common-hook()函数里,有这么一行: (define-key c-mode-base-map [(f7)] 'compile) 默认情况下,emacs的compile命令是调用make -k,本例把它改成了make。你也可以把它改成其他的,比如gcc之类的。改下面的“make”就行了。 '(compile-command "make") Emacs会划分一个窗格显示编译的消息,在编译结束后,emacs会自动将编译器的输出和程序关联起来,告诉你第几行的[[程序]]有问题。直接在出错的行号上按Enter,就可以跳转到相应文件的相应行。其实我通常都是用鼠标中键去点出错行号:) 搞定了编译错误后,接着要和逻辑错误斗争了。其实对简单的程序来说,把中间结果打印到终端是最简单好用的调试办法:)不过稍微复杂点的程序就会晕菜了,这时我们就需要拿gdb跟踪程序流程了。 你用下面的命令就可以启动gdb了。 M-x gdb gdb的命令就不在这里说了,它的文档几乎到处都是。emacs把gdb的命令和快捷键做了绑定,对于常用的命令,还是输入快捷键比较方便。比如,C-c C-n是Next line,C-c C-s是step in,其实用的最多的快捷键也就是这两个。 下面是本例的gdb效果图: [[Image:Thumbs gdb.jpg]] ==阅读代码== 在emacs下读代码通常有三种工具,最简单的是etags,最复杂的是ecb(emacs code browser),位于中间的是cscope。 etags和ctags一样,只不过前者是用于emacs的,后者是用于vi的。 使用tags之前要先对[[源代码]]分析建立tags文件,在代码所在目录中运行:etags -R 即可。 ==参考来源== [http://emacser.com/emacs-cpp-dev.htm 参考来源] {{Emacs}} [[category:Emacs|Z]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)
本页使用的模板:
模板:Emacs
(
编辑
)
模板:Emacs top
(
编辑
)