最近实践Ubuntu下编写C语言程序,在Emacs配置和使用上费了不少功夫,所以在这里重新整理
1.配置文件
为了方便修改(比如增加一些新插件产生冲突的情况),把配置文件分开,方便管理和修改
.emacs,某些实验的插件先放在主配置文件中,后期会分类出去。目前使用的插件主要有color-theme.el,cedet,linum.el,gud,gdb,yasnippet,javascript.el,插件的安装方法还算简单,但是想让它们都生效并且一起工作的很好就不那么容易,上面几乎每个插件我都折腾了好久才能正常使用。后面的部分我会记录几个容易犯错的地方
;;将配置文件分成多个文件
;;face.el emacs外观
;;plugin.el 插件
;;cmode.el C/C++配置
;插件路径
(add-to-list 'load-path "~/.emacs.d")
;; 导入配置的文件
(load "face.el")
(load "plugin.el")
(load "cmode.el")
;;gdb配置
(setq gdb-many-windows t)
(load-library "multi-gud.el")
cmode.el(参考http://www.caole.net/diary/emacs_write_cpp.html)
;;;; 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)
;;cscope
;;2008422增加
(add-hook 'c-mode-common-hook
'(lambda()
(require 'xcscope)))
(setq cscope-do-not-update-database t)
;;;;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-command "make"))
(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)
;;预处理设置
(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)
)
;载入cedet插件
(load-file "~/.emacs.d/cedet-1.0pre4/common/cedet.el")
;配置Semantic的检索范围
(setq semanticdb-project-roots
(list
(expand-file-name "/")))
;自定义自动补齐命令
(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)
;hippie的自动补齐策略
(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
)
)
face.el,设置界面、主题,可以看附件中的截图,黑色主题、最大化和一些习惯设置
;------------------------------- 设置界面-------------------------------
;最大化
(defun my-maximized ()
(interactive)
(x-send-client-message
nil 0 nil "_NET_WM_STATE" 32
'(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0))
(x-send-client-message
nil 0 nil "_NET_WM_STATE" 32
'(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0))
)
;启动时最大化
(my-maximized)
(setq inhibit-startup-message t);启动不出现闪屏
(setq visible-bell t);关闭出错提示声
(setq make-backup-files nil);不产生备份文件
(global-font-lock-mode t);语法高亮
(auto-image-file-mode t);打开图片显示功能
(column-number-mode t);显示列号
(tool-bar-mode nil);去掉那个大大的工具栏
(scroll-bar-mode nil);去掉滚动条
(setq x-select-enable-clipboard t);允许和clipboard交互
(transient-mark-mode t);加亮选中部分
(require 'linum)
(global-linum-mode t);显示行号
(require 'color-theme)
;;(color-theme-initialize)
;;(color-theme-tty-dark)
(color-theme-comidia)
;-----------------------------end of 设置界面--------------------------
;------------------------------- 设置显示时间---------------------------
(display-time-mode 1)
(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
;--------------------------------endof 设置显示时间---------------------
(global-set-key [f11] 'my-fullscreen)
;------------------------------- 设置屏幕初始大小---------------------------
;全屏
(defun my-fullscreen ()
(interactive)
(x-send-client-message
nil 0 nil "_NET_WM_STATE" 32
'(2 "_NET_WM_STATE_FULLSCREEN" 0))
)
plugin.el(http://code.google.com/p/yasnippet/),一个模拟TextMate的东西,可以自定义snippet,目前用用感觉不是特别好,希望后期版本能有提高,还与其他插件有冲突,这个就比较头疼
(require 'yasnippet-bundle)
(autoload 'javascript-mode "javascript" nil t
(add-to-list 'auto-mode-alist '("\\.js\\'" . javascript-mode))
2.使用gdb插件进行调试
算是一个插件的使用了,但是说起来还是挺烦的,搞了很久才运行的差不多,参考好多网站,安装的话看这个:http://blog.csdn.net/nhczp/archive/2007/11/02/1862695.aspx,安装很容易,然后就可以打开编辑器调试了,我用的时候一直无法手动添加断点,提示是Current buffer has no process,不知道是啥问题,索性每次都是命令行敲命令(b main或者break (line),挺郁闷。还有一个比较容易出错的地方是编译的文件需要加上-g的选项,确保每个文件都可以进入调试模式,否则将无法出现在调试界面里面。
gdb在Emacs里面使用很方便,提供了很多命令的快捷键绑定,我目前常用三个,为了形象起见,对比Eclipse Debug mode快捷键说明:
C-c C-N 单行执行 对应Eclipse的F6
C-c C-s 单步执行 对应Eclipse的F5
C-c C-r continue命令,执行到下一断点 对应Eclipse的F8
另外还有一些常用的命令行命令
run (args) 启动程序,如果程序包含参数,直接在后面写
b (method_name) 为指定方法加断点 (还不知道怎么为某个文件某行加断点怎么做)
break (line_number) 为当前视图中的文件指定行增加断点
quit 退出gdb
print (args) 打印变量 如果args是$1这种形式,则可以打印历史变量,它是GDB按照顺序记录的
whatis (args) 打印变量的类型
3.日积月累的快捷键
用Emacs已经有半年多,写Java的时候主要是在Eclipse里面用Emacs Mode,感觉还是不错的,而且还能郁闷其他想用你电脑的同事:P。
Emacs快捷键实在是太多了,所以只能列点比较常用的,虐待自己手指头哇
C/M-F B N P C/M-V M-< > C-a C-e经典Emacs位移快捷键,没啥好说的
C-x o / C-x 1,2... 窗口移动 数量控制
C-x b/ C-x C-b 切换buffe
C-x k 关闭当前buffer
C-o 创建新行 光标不动
C-j 创建新行 光标到新行并缩进(类似于Vim的o)
C-s r /C-M-s r 增量搜索和正则搜索 C-%/M-% 替换
C-M-2 Mark Set(超级不爽的快捷键,除非你愿意损失C-Spc)
C-x h 全选 配合 C-M-\ 格式化整个文本
C-x C-c 关闭Emacs C-z 最小化
C-x C-s 保存当前文本
C-h m 打开帮助文档
C-h k 查看快捷键锁定(看看你设定的快捷键是否正确绑定功能)
C/M-w 复制、剪切
C-y 将killing-ring中的东西粘贴
C-k 删除光标以后到行尾
C/M-d 删除光标后单字或单词
C-c C-c 格式化
C-x C-f 打开文件
4.在emacs中使用cscope对C/C++代码管理
参考http://pluskid.lifegoo.com/wiki/EmacsCscope.html
安装cscope,然后将安装包中自带的xcscope.el加载到emacs配置文件中即可使用,可以方便查看源代码
- 描述: Emacs gdb
- 大小: 34.8 KB
分享到:
相关推荐
在Ubuntu和大多数Linux发行版中,Emacs被视为一款必不可少的工具,尽管它可能不会预装在系统中。通过它的内置语言解释器,Emacs支持Elisp(Emacs Lisp)编程,这使得用户能够自定义和扩展其功能,使其成为一款极其...
Emacs,被誉为“可扩展、可定制、自我文档化”的实时显示编辑器,不仅是一个文本编辑器,更是一个强大的集成开发环境(IDE)。它以其高度的可配置性和丰富的功能库,使得开发者能够根据个人需求定制自己的开发环境。...
root@ubuntu-vps:~# locale -a locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set ...
在解决 ArchLinux 下 Emacs 中文乱码问题和添加中文输入模块的过程中,可能会遇到一些其他问题,例如 Ubuntu 下 Emacs 不能用法输入法的解决方法、Ubuntu 安装 Arduino 及用法 Emacs 开发、Ubuntu Server 设置 Emacs...
本文将详细讲解如何在Ubuntu环境下配置所需的工具和环境。 首先,我们需要进行中文环境的设置,确保系统能够正确显示中文字符。在Ubuntu 9.04版本中,可以通过点击“系统”菜单,然后选择“系统管理”->“语言支持...
在 Ubuntu 环境下使用 Eclipse 需要安装相关的插件,例如 CDT(C/C++ Development Tooling),以便支持 C++ 语言的开发。Eclipse 的代码编辑器支持语法高亮、代码补全、代码重构等功能,提高了开发效率。 2. Anjuta...
本资源“Ubuntu中c语言转Python.7z”显然关注的是如何在Ubuntu操作系统环境下将C语言程序转换为Python代码。这涉及到跨语言理解和迁移的过程,对程序员来说是一项有价值的技术挑战。 C语言是一种底层、高效的编程...
当我使用Windows 10和WSL Ubuntu 20.04时,这是我的个人Emacs 27.1.50配置。 如果您更喜欢可以构建的,不受限制的Emacs“发行版”,请查看。 安装 首先备份~/.emacs.d/ (如果有): mv ~/.emacs.d ~/.emacs.d.bak...
第4章是关于Ubuntu的使用指南,开始部分强调了如何开始使用Ubuntu,随后介绍了一些类Unix环境下的操作,比如使用Midnight Commander(MC)进行文件管理,如何处理类Unix文本和文件系统,以及X窗口系统的基本使用和...
2. **包管理器安装**:对于Ubuntu等基于Debian的系统,可以通过包管理器安装Emacs,例如使用命令`sudo apt-get install emacs`。 ##### 2.2 配置 Emacs的配置文件通常位于用户的主目录下的`.emacs`文件(或者`....
为了方便开发人员在Ubuntu下工作,首先需要设置中文环境: - 在“系统”菜单中选择“系统管理”,然后点击“语言支持”,将默认语言更改为中文(中国)。 - 使用`sudo fontconfig-voodoo -f -s zh_CN`命令配置字体。...
文档可能讨论如何将Emacs转变为一个C/C++开发的理想环境,包括构建系统集成、代码导航和测试工具等。 9. **Emacs社区和资源**:Ubuntu中文论坛和CSDN博客是Emacs用户交流和获取帮助的重要平台。文档可能会推荐其他...
Ubuntu为开发者提供了丰富的工具和环境,如Git进行版本控制,Vim或Emacs作为文本编辑器,Python、Java、C/C++等编程语言的SDK,以及Visual Studio Code、IntelliJ IDEA等集成开发环境。 通过以上内容,读者将对...
- **C**:介绍了C语言的编程技巧及注意事项。 - **Web**:探讨了如何在Ubuntu中搭建Web开发环境。 - **准备文档**:说明了如何撰写技术文档,并使用LaTeX或Markdown等工具进行排版。 - **打包**:指导用户如何将...
GDB(GNU Debugger)是Linux下的调试工具,用于调试C、C++以及汇编程序。安装GDB: ``` sudo apt-get install gdb ``` 4. **文本编辑器**: 为了编写汇编代码,你需要一个合适的文本编辑器。常见的选择有Vim、...
### Ubuntu 8.04 入门与系统安装详解 #### 一、Ubuntu 8.04 概述 Ubuntu 8.04 LTS (Hardy Heron) 是一款基于 Linux 的操作系统,由 Ubuntu 社区开发和支持。该版本于 2008 年 4 月 24 日发布,并提供了长达三年的...
- **VIM/EMACS**:文本编辑器,尤其是VIM,在Linux环境下非常流行,支持多种插件扩展功能。 总之,《Ubuntu命令参考手册第二版》涵盖了从基础命令到高级工具的广泛内容,无论是对于初学者还是经验丰富的开发者来说...
在Linux(Ubuntu 12.04)环境下开发STC89C52单片机项目,可以摆脱对Windows和Keil的依赖,利用开源工具实现同样的功能。这里主要涉及的知识点包括:编辑器的选择、编译器SDCC的使用、hex2bin工具的安装以及gSTCISP...
2. **Ubuntu桌面环境**:详细讲解GNOME的工作机制,桌面定制,窗口管理器,以及常用桌面应用程序的使用,如文件管理器Nautilus、终端Emacs等。 3. **命令行操作**:深入理解Linux命令行,学习如ls、cd、mv、cp、rm...