`
yueguangyuan
  • 浏览: 336859 次
  • 性别: Icon_minigender_1
  • 来自: 新加坡
社区版块
存档分类
最新评论

我的Emacs(Ubuntu下写C)

阅读更多

    最近实践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
分享到:
评论
2 楼 zouwu85 2011-04-27  
过滤词汇怎么不起作用
1 楼 Emy 2008-04-20  
羡慕死你了·~~

相关推荐

    emacs文本编辑器ubuntu下安装和使用

    在Ubuntu和大多数Linux发行版中,Emacs被视为一款必不可少的工具,尽管它可能不会预装在系统中。通过它的内置语言解释器,Emacs支持Elisp(Emacs Lisp)编程,这使得用户能够自定义和扩展其功能,使其成为一款极其...

    emacs配置IDE

    Emacs,被誉为“可扩展、可定制、自我文档化”的实时显示编辑器,不仅是一个文本编辑器,更是一个强大的集成开发环境(IDE)。它以其高度的可配置性和丰富的功能库,使得开发者能够根据个人需求定制自己的开发环境。...

    我的emacs配置

    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中文乱码问题的解决及中文输入模块的添加.docx

    在解决 ArchLinux 下 Emacs 中文乱码问题和添加中文输入模块的过程中,可能会遇到一些其他问题,例如 Ubuntu 下 Emacs 不能用法输入法的解决方法、Ubuntu 安装 Arduino 及用法 Emacs 开发、Ubuntu Server 设置 Emacs...

    Ubuntu下搭建Linux嵌入式开发环境

    本文将详细讲解如何在Ubuntu环境下配置所需的工具和环境。 首先,我们需要进行中文环境的设置,确保系统能够正确显示中文字符。在Ubuntu 9.04版本中,可以通过点击“系统”菜单,然后选择“系统管理”-&gt;“语言支持...

    ubuntu下C++开发环境汇总

    在 Ubuntu 环境下使用 Eclipse 需要安装相关的插件,例如 CDT(C/C++ Development Tooling),以便支持 C++ 语言的开发。Eclipse 的代码编辑器支持语法高亮、代码补全、代码重构等功能,提高了开发效率。 2. Anjuta...

    Ubuntu中c语言转Python.7z

    本资源“Ubuntu中c语言转Python.7z”显然关注的是如何在Ubuntu操作系统环境下将C语言程序转换为Python代码。这涉及到跨语言理解和迁移的过程,对程序员来说是一项有价值的技术挑战。 C语言是一种底层、高效的编程...

    .wsl-emacs.d:我在Windows 10 + WSL(Ubuntu 20.04)上时的个人Emacs配置

    当我使用Windows 10和WSL Ubuntu 20.04时,这是我的个人Emacs 27.1.50配置。 如果您更喜欢可以构建的,不受限制的Emacs“发行版”,请查看。 安装 首先备份~/.emacs.d/ (如果有): mv ~/.emacs.d ~/.emacs.d.bak...

    Ubuntu菜鸟使用手册

    第4章是关于Ubuntu的使用指南,开始部分强调了如何开始使用Ubuntu,随后介绍了一些类Unix环境下的操作,比如使用Midnight Commander(MC)进行文件管理,如何处理类Unix文本和文件系统,以及X窗口系统的基本使用和...

    Emacs教程初步 pdf

    2. **包管理器安装**:对于Ubuntu等基于Debian的系统,可以通过包管理器安装Emacs,例如使用命令`sudo apt-get install emacs`。 ##### 2.2 配置 Emacs的配置文件通常位于用户的主目录下的`.emacs`文件(或者`....

    基于立宇泰ARMSYS2440—ubuntu下linux嵌入式开发环境配置

    为了方便开发人员在Ubuntu下工作,首先需要设置中文环境: - 在“系统”菜单中选择“系统管理”,然后点击“语言支持”,将默认语言更改为中文(中国)。 - 使用`sudo fontconfig-voodoo -f -s zh_CN`命令配置字体。...

    Emacs_txt.rar

    文档可能讨论如何将Emacs转变为一个C/C++开发的理想环境,包括构建系统集成、代码导航和测试工具等。 9. **Emacs社区和资源**:Ubuntu中文论坛和CSDN博客是Emacs用户交流和获取帮助的重要平台。文档可能会推荐其他...

    深入解析Ubuntu操作系统

    Ubuntu为开发者提供了丰富的工具和环境,如Git进行版本控制,Vim或Emacs作为文本编辑器,Python、Java、C/C++等编程语言的SDK,以及Visual Studio Code、IntelliJ IDEA等集成开发环境。 通过以上内容,读者将对...

    Ubuntu中文参考手册

    - **C**:介绍了C语言的编程技巧及注意事项。 - **Web**:探讨了如何在Ubuntu中搭建Web开发环境。 - **准备文档**:说明了如何撰写技术文档,并使用LaTeX或Markdown等工具进行排版。 - **打包**:指导用户如何将...

    ubuntu下搭建汇编语言所需的软件

    GDB(GNU Debugger)是Linux下的调试工具,用于调试C、C++以及汇编程序。安装GDB: ``` sudo apt-get install gdb ``` 4. **文本编辑器**: 为了编写汇编代码,你需要一个合适的文本编辑器。常见的选择有Vim、...

    ubuntu8.04

    ### Ubuntu 8.04 入门与系统安装详解 #### 一、Ubuntu 8.04 概述 Ubuntu 8.04 LTS (Hardy Heron) 是一款基于 Linux 的操作系统,由 Ubuntu 社区开发和支持。该版本于 2008 年 4 月 24 日发布,并提供了长达三年的...

    Ubuntu命令参考手册第二版

    - **VIM/EMACS**:文本编辑器,尤其是VIM,在Linux环境下非常流行,支持多种插件扩展功能。 总之,《Ubuntu命令参考手册第二版》涵盖了从基础命令到高级工具的广泛内容,无论是对于初学者还是经验丰富的开发者来说...

    Linux(Ubuntu12.04)上玩儿STC89C52单片机

    在Linux(Ubuntu 12.04)环境下开发STC89C52单片机项目,可以摆脱对Windows和Keil的依赖,利用开源工具实现同样的功能。这里主要涉及的知识点包括:编辑器的选择、编译器SDCC的使用、hex2bin工具的安装以及gSTCISP...

    Ubuntu 完全教程.rar

    2. **Ubuntu桌面环境**:详细讲解GNOME的工作机制,桌面定制,窗口管理器,以及常用桌面应用程序的使用,如文件管理器Nautilus、终端Emacs等。 3. **命令行操作**:深入理解Linux命令行,学习如ls、cd、mv、cp、rm...

Global site tag (gtag.js) - Google Analytics