使用tags之前要先对源代码分析建立tags文件,在代码所在目录中运行:etags -R 即可。
我常用的就这几个命令和快捷键:
M-x visit-tags-table <RET> FILE <RET> 选择tags文件
M-. [TAG] <RET> 访问标签
M-* 返回
C-u M-. 寻找标签的下一个定义
cscope用用吧。它其实是一个独立的软件,完全可以脱离vi和emacs使用。但是结合emacs的强大功能,cscope就显得更加方便了。GNU Emacs默认自带cscope的支持。在使用之前,cscope也需要对代码进行索引。在emacs中可以这样做:
C-c s a 设定初始化的目录,一般是你代码的根目录
C-s s I 对目录中的相关文件建立列表并进行索引
建完索引之后,你就可以用cscope在代码里游荡了。常用的一些命令如下:
C-c s s 序找符号
C-c s g 寻找全局的定义
C-c s c 看看指定函数被哪些函数所调用
C-c s C 看看指定函数调用了哪些函数
C-c s e 寻找正则表达式
C-c s f 寻找文件
C-c s i 看看指定的文件被哪些文件include
简单配置
;;;; 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)
;;;;..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)
;;.....
(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)
(global-font-lock-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)
)
// 函数跳转
(require 'xcscope)
(setq cscope-do-not-update-database t)
Emacs常用命令速查
现在我已经能够熟练使用这些命令了,基本上可以算一个初段的Emacser了,哈哈,总结一下,把这些命令打印出来贴在电脑上,不记得了再查查,从今以后尽量做到写代码和文档都用Emacs来完成.
1)与文件操作有关的命令
C-x C-f 查找文件并且在新缓冲区中打开
C-x C-v 读入另一个文件替换掉用C-x C-f打开的文件
C-x i 把文件插入到光标的当前位置
C-x C-s 保存文件
C-x C-w 把缓冲区内容写入一个文件
C-x C-c 退出Emacs
2)与光标移动操作有关的命令
C-f 光标前移一个字符(右)
C-b 光标后移一个字符(左)
C-p 光标前移一行(上)
C-n 光标后移一行(下)
M-f 前移一个单词
M-b 后移一个单词
C-a 移动到行首
C-e 移动到行尾
M-e 前移一个句子
M-a 后移一个句子
M-} 前移一个段落
M-{ 后移一个段落
C-v 屏幕上卷一屏
M-v 屏幕下卷一屏
C-x ] 前移一页
C-x [ 后移一页
M-< 前移到文件头
M->; 后移到文件尾
C-l 重新绘制屏幕,当前行放在画面中心
M-n 或者 C-u n 重复执行n次后续命令
按下M-x后在辅助输入区中输入"goto-line"跳到指定的行,输入"goto-char"跳到指定的字符
3)与文件删除操作有关的命令
C-d 删除光标位置上的字符
DEL 删除光标前面的字符
M-d 删除光标后面的单词
M-DEL 删除光标前面的单词
C-k 从光标位置删除到行尾
M-k 删除光标后面的句子
C-x DEL 删除光标前面的句子
C-y 恢复被删除的文本或者粘贴最近删除或复制的文本
C-w 删除文件块
按下M-x后在辅助输入区中输入"kill-paragraph"删除光标后面的段落,按下"backward-kill-paragraph"删除光标前面的段落
4)与文本块操作有关的命令
C-@ 标记文本块的开始(或结束)位置
C-x C-x 互换插入点和文本标记的位置
C-w 或 SHIFT-DEL 删除文本块
M-w 复制文本块
M-h 标记段落
C-x C-p 标记页面
C-x h 标记整个缓冲区
5)与位置交换操作有关的命令
C-t 交换两个字符的位置
M-t 交换两个单词的位置
C-x C-t 交换两个文本行的位置
按下M-x后在辅助输入区中输入"transpose-sentences"交换两个句子的位置,按下"transpose-paragraph"交换两个段落的位置
6)与改变字母大小写操作有关的命令
M-c 单词首字母改为大写
M-u 单词的字母全部改为大写
M-l 单词的字母全部改为小写
7)与查找操作相关的命令
C-s 向前递增查找
C-r 向后递增查找
C-s C-w 开始递增查找,把光标位置的单词做查找字符串
C-s C-y 开始递增查找,把光标位置到行尾之间的文本做查找字符串
C-s return searchstring return 向前开始非递增查找操作
C-r return searchstring return 向后开始非递增查找操作
C-s return C-w 向前开始单词查找(不受换行符、空格、标点符号影响)
C-r return C-w 向后开始单词查找(不受换行符、空格、标点符号影响)
8) 与使用编辑缓冲区和窗口有关的命令
C-x b 如果输入一个新的文件名则新建一个文件并且编辑,否则打开该文件
C-x s 保存全部缓冲区
C-x b 删除缓冲区
M-x rename-buffer 重命名当前缓冲区
C-x C-q 把当前编辑缓冲区设置为只读属性
C-x 0 删除当前所在的窗口
C-x 1 当前缓冲区满屏显示
C-x 2 创建上下排列的窗口
C-x 3 创建左右排列的窗口
C-x o 在窗口之间移动