emacs代码浏览+跳转
2013-04-30 00:54
155 查看
emacs代码浏览+跳转
分类:
Linux/Unix
Emacs
Android 2011-11-04 10:22
2208人阅读
评论(0)
收藏
举报
emacssemanticlambdaautoloadprototypelist
折腾半年多了,总算是找到个比较合适的方式。
我的选择是cedet+ecb+global
gnu-global是一个兼容tag工具,看名字就知道它打算怎么干活的了。gtags是emacs下与global交互的插件
首先一次去下载上面三个的源码,global是gtags,
cedet官网http://cedet.sourceforge.net/
ecb官网http://ecb.sourceforge.net/
然后ubuntu下不要使用sudo apt-get install 来的global,版本问题可能会和你下载gtags不兼容,有个参数不识别。
下载地址http://www.gnu.org/s/global/download.html
下载后解压,$./configure
$make
$sudo make install
然后源码包里有个gtags.el这是我们的emacs插件
把cedet,ecb,gtags插件放到你保存插件的位置,我的都在~/emacs/下面,然后每个插件有自己单独的目录。
[plain]
view plaincopyprint?
;;配置cedet
(add-to-list 'load-path "~/emacs/cedet-1.0pre7/common")
(add-to-list 'load-path "~/emacs/cedet-1.0pre7/contrib")
;;(load-file "~/emacs/cedet-1.0pre7/common/cedet.el")
(require 'cedet)
(require 'semantic-ia)
(global-ede-mode 1) ; Enable the Project management system
(semantic-load-enable-code-helpers) ; Enable prototype help and smart completion
(global-srecode-minor-mode 1) ; Enable template insertion menu
(require 'semantic-tag-folding nil 'noerror)
(global-semantic-tag-folding-mode 1)
(global-set-key [f12] 'semantic-ia-fast-jump)
(global-set-key [S-f12]
(lambda ()
(interactive)
(if (ring-empty-p (oref semantic-mru-bookmark-ring ring))
(error "Semantic Bookmark ring is currently empty"))
(let* ((ring (oref semantic-mru-bookmark-ring ring))
(alist (semantic-mrub-ring-to-assoc-list ring))
(first (cdr (car alist))))
(if (semantic-equivalent-tag-p (oref first tag)
(semantic-current-tag))
(setq first (cdr (car (cdr alist)))))
(semantic-mrub-switch-tags first))))
;(define-key c-mode-map [M-S-f12] 'semantic-analyze-proto-impl-toggle)
(global-set-key (kbd "M-q") 'semantic-ia-complete-symbol-menu)
(define-key semantic-tag-folding-mode-map (kbd "C-c , -") 'semantic-tag-folding-fold-block)
(define-key semantic-tag-folding-mode-map (kbd "C-c , +") 'semantic-tag-folding-show-block)
(define-key semantic-tag-folding-mode-map (kbd "C-_") 'semantic-tag-folding-fold-all)
(define-key semantic-tag-folding-mode-map (kbd "C-+") 'semantic-tag-folding-show-all)
;; (setq semanticdb-project-roots (list (expand-file-name "/")))
(defconst cedet-user-include-dirs
(list
"/home/backfire/work/android/kernel/include"
"/home/backfire/work/android/kernel/arch/arm/include"
"/home/backfire/work/android/kernel/arch/arm/mach-XXX/include"
""))
;; (defconst cedet-win32-include-dirs
;; (list "C:/MinGW/include"
;; "C:/MinGW/include/c++/3.4.5"
;; "C:/MinGW/include/c++/3.4.5/mingw32"
;; "C:/MinGW/include/c++/3.4.5/backward"
;; "C:/MinGW/lib/gcc/mingw32/3.4.5/include"
;; "C:/Program Files/Microsoft Visual Studio/VC98/MFC/Include"))
(require 'semantic-c nil 'noerror)
(let ((include-dirs cedet-user-include-dirs))
;; (when (eq system-type 'windows-nt)
;; (setq include-dirs (append include-dirs cedet-win32-include-dirs)))
(mapc (lambda (dir)
(semantic-add-system-include dir 'c++-mode)
(semantic-add-system-include dir 'c-mode))
include-dirs))
基本是用的Meteor
Liu的配置。
F12快速跳转,shift+F12跳回。这个不是很好用,一般我只是在本文见内跳转采用。
然后是代码折叠的配置,不想用鼠标的话就可以看看。
include路径是用来补全的,我用的是M-q,但是用ac+gtags的时候比较多。这个大部分时间是闲置了
然后配置ecb,这个是分隔窗口类似ide的配件,主要用的就是tag-list类似的功能,别的其实很少用。
[plain]
view plaincopyprint?
;;配置ecb (add-to-list 'load-path "~/emacs/ecb-2.40") (require 'ecb) ;;关掉每日提示 (setq ecb-tip-of-the-day nil) ;; 各窗口间切换 (global-set-key [C-left] 'windmove-left) (global-set-key [C-right] 'windmove-right) (global-set-key [C-up] 'windmove-up) (global-set-key [C-down] 'windmove-down) ;; 隐藏和显示ecb窗口 (define-key global-map [(control f1)] 'ecb-hide-ecb-windows) (define-key global-map [(control f2)] 'ecb-show-ecb-windows) ;; 使某一ecb窗口最大化 ;(define-key global-map "/C-c1" 'ecb-maximize-window-directories) ;(define-key global-map "/C-c2" 'ecb-maximize-window-sources) ;(define-key global-map "/C-c3" 'ecb-maximize-window-methods) ;(define-key global-map "/C-c4" 'ecb-maximize-window-history) ;; 恢复原始窗口布局 ;(define-key global-map "/C-c`" 'ecb-restore-default-window-sizes)
ctrl加箭头在各个窗口间移动,别的几个快捷键按习惯来,不需要就不要看了。
然后说几个常用的配置,你可以调整左边窗口的默认宽度,你可以配置分隔的样式,具体配置需要你去看看ecb的手册,
强制性的,否则你会觉得ecb不好用,查看ecb帮助,先启动ecb,然后M-x ecb-show-help。就会打开ecb的info。
配置global
[plain]
view plaincopyprint?
;;配置gtags
(add-to-list 'load-path "~/emacs/global")
;(autoload 'gtags-mode "gtags" "" t)
;(setq c-mode-hook '(lambda ()
; (gtags-mode 1)))
(global-set-key (kbd "C-c g f") 'gtags-find-tag)
(global-set-key (kbd "C-c g p") 'gtags-pop-stack)
(global-set-key (kbd "C-c g s") 'gtags-select-tag)
这个也推荐看下手册,先启动gtags再启动cedet的semantic会有冲突,所以我的gtags-mode都是手动启动,自己把gtags-mode这个命令绑到舒服的按键上。
然后是我的3个常用快捷键,
[plain]
view plaincopyprint?
C-c g f查找tag,<SPAN style="LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; COLOR: rgb(85,85,85)"></SPAN><PRE class=plain name="code">C-c g p返回,</PRE><PRE class=plain name="code"><SPAN style="LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; COLOR: rgb(85,85,85)"></SPAN><PRE class=plain name="code">C-c g s,多个tags时选择一个tags,这个还有待研究,手册上说的任何emacs命令就可以选择,但是我没用处来。</PRE><PRE class=plain name="code"></PRE><PRE class=plain name="code"></PRE><PRE class=plain name="code">gtags和ac可以配置补全,很好用,不过补全傻了点,不过基本是够用了。</PRE><P></P>
<PRE></PRE>
<PRE></PRE>
<P></P>
<P><SPAN style="FONT-FAMILY: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; COLOR: #555555"><SPAN style="LINE-HEIGHT: 16px"><BR>
</SPAN></SPAN></P>
<P><SPAN style="FONT-FAMILY: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; COLOR: #555555"><SPAN style="LINE-HEIGHT: 16px">这个配置搞android还是满合适的。</SPAN></SPAN></P>
<P><BR>
</P>
<P><BR>
</P>
<P><BR>
</P>
<P><BR>
</P>
</PRE>
分类:
Linux/Unix
Emacs
Android 2011-11-04 10:22
2208人阅读
评论(0)
收藏
举报
emacssemanticlambdaautoloadprototypelist
折腾半年多了,总算是找到个比较合适的方式。
我的选择是cedet+ecb+global
gnu-global是一个兼容tag工具,看名字就知道它打算怎么干活的了。gtags是emacs下与global交互的插件
首先一次去下载上面三个的源码,global是gtags,
cedet官网http://cedet.sourceforge.net/
ecb官网http://ecb.sourceforge.net/
然后ubuntu下不要使用sudo apt-get install 来的global,版本问题可能会和你下载gtags不兼容,有个参数不识别。
下载地址http://www.gnu.org/s/global/download.html
下载后解压,$./configure
$make
$sudo make install
然后源码包里有个gtags.el这是我们的emacs插件
把cedet,ecb,gtags插件放到你保存插件的位置,我的都在~/emacs/下面,然后每个插件有自己单独的目录。
[plain]
view plaincopyprint?
;;配置cedet
(add-to-list 'load-path "~/emacs/cedet-1.0pre7/common")
(add-to-list 'load-path "~/emacs/cedet-1.0pre7/contrib")
;;(load-file "~/emacs/cedet-1.0pre7/common/cedet.el")
(require 'cedet)
(require 'semantic-ia)
(global-ede-mode 1) ; Enable the Project management system
(semantic-load-enable-code-helpers) ; Enable prototype help and smart completion
(global-srecode-minor-mode 1) ; Enable template insertion menu
(require 'semantic-tag-folding nil 'noerror)
(global-semantic-tag-folding-mode 1)
(global-set-key [f12] 'semantic-ia-fast-jump)
(global-set-key [S-f12]
(lambda ()
(interactive)
(if (ring-empty-p (oref semantic-mru-bookmark-ring ring))
(error "Semantic Bookmark ring is currently empty"))
(let* ((ring (oref semantic-mru-bookmark-ring ring))
(alist (semantic-mrub-ring-to-assoc-list ring))
(first (cdr (car alist))))
(if (semantic-equivalent-tag-p (oref first tag)
(semantic-current-tag))
(setq first (cdr (car (cdr alist)))))
(semantic-mrub-switch-tags first))))
;(define-key c-mode-map [M-S-f12] 'semantic-analyze-proto-impl-toggle)
(global-set-key (kbd "M-q") 'semantic-ia-complete-symbol-menu)
(define-key semantic-tag-folding-mode-map (kbd "C-c , -") 'semantic-tag-folding-fold-block)
(define-key semantic-tag-folding-mode-map (kbd "C-c , +") 'semantic-tag-folding-show-block)
(define-key semantic-tag-folding-mode-map (kbd "C-_") 'semantic-tag-folding-fold-all)
(define-key semantic-tag-folding-mode-map (kbd "C-+") 'semantic-tag-folding-show-all)
;; (setq semanticdb-project-roots (list (expand-file-name "/")))
(defconst cedet-user-include-dirs
(list
"/home/backfire/work/android/kernel/include"
"/home/backfire/work/android/kernel/arch/arm/include"
"/home/backfire/work/android/kernel/arch/arm/mach-XXX/include"
""))
;; (defconst cedet-win32-include-dirs
;; (list "C:/MinGW/include"
;; "C:/MinGW/include/c++/3.4.5"
;; "C:/MinGW/include/c++/3.4.5/mingw32"
;; "C:/MinGW/include/c++/3.4.5/backward"
;; "C:/MinGW/lib/gcc/mingw32/3.4.5/include"
;; "C:/Program Files/Microsoft Visual Studio/VC98/MFC/Include"))
(require 'semantic-c nil 'noerror)
(let ((include-dirs cedet-user-include-dirs))
;; (when (eq system-type 'windows-nt)
;; (setq include-dirs (append include-dirs cedet-win32-include-dirs)))
(mapc (lambda (dir)
(semantic-add-system-include dir 'c++-mode)
(semantic-add-system-include dir 'c-mode))
include-dirs))
;;配置cedet (add-to-list 'load-path "~/emacs/cedet-1.0pre7/common") (add-to-list 'load-path "~/emacs/cedet-1.0pre7/contrib") ;;(load-file "~/emacs/cedet-1.0pre7/common/cedet.el") (require 'cedet) (require 'semantic-ia) (global-ede-mode 1) ; Enable the Project management system (semantic-load-enable-code-helpers) ; Enable prototype help and smart completion (global-srecode-minor-mode 1) ; Enable template insertion menu (require 'semantic-tag-folding nil 'noerror) (global-semantic-tag-folding-mode 1) (global-set-key [f12] 'semantic-ia-fast-jump) (global-set-key [S-f12] (lambda () (interactive) (if (ring-empty-p (oref semantic-mru-bookmark-ring ring)) (error "Semantic Bookmark ring is currently empty")) (let* ((ring (oref semantic-mru-bookmark-ring ring)) (alist (semantic-mrub-ring-to-assoc-list ring)) (first (cdr (car alist)))) (if (semantic-equivalent-tag-p (oref first tag) (semantic-current-tag)) (setq first (cdr (car (cdr alist))))) (semantic-mrub-switch-tags first)))) ;(define-key c-mode-map [M-S-f12] 'semantic-analyze-proto-impl-toggle) (global-set-key (kbd "M-q") 'semantic-ia-complete-symbol-menu) (define-key semantic-tag-folding-mode-map (kbd "C-c , -") 'semantic-tag-folding-fold-block) (define-key semantic-tag-folding-mode-map (kbd "C-c , +") 'semantic-tag-folding-show-block) (define-key semantic-tag-folding-mode-map (kbd "C-_") 'semantic-tag-folding-fold-all) (define-key semantic-tag-folding-mode-map (kbd "C-+") 'semantic-tag-folding-show-all) ;; (setq semanticdb-project-roots (list (expand-file-name "/"))) (defconst cedet-user-include-dirs (list "/home/backfire/work/android/kernel/include" "/home/backfire/work/android/kernel/arch/arm/include" "/home/backfire/work/android/kernel/arch/arm/mach-XXX/include" "")) ;; (defconst cedet-win32-include-dirs ;; (list "C:/MinGW/include" ;; "C:/MinGW/include/c++/3.4.5" ;; "C:/MinGW/include/c++/3.4.5/mingw32" ;; "C:/MinGW/include/c++/3.4.5/backward" ;; "C:/MinGW/lib/gcc/mingw32/3.4.5/include" ;; "C:/Program Files/Microsoft Visual Studio/VC98/MFC/Include")) (require 'semantic-c nil 'noerror) (let ((include-dirs cedet-user-include-dirs)) ;; (when (eq system-type 'windows-nt) ;; (setq include-dirs (append include-dirs cedet-win32-include-dirs))) (mapc (lambda (dir) (semantic-add-system-include dir 'c++-mode) (semantic-add-system-include dir 'c-mode)) include-dirs))
基本是用的Meteor
Liu的配置。
F12快速跳转,shift+F12跳回。这个不是很好用,一般我只是在本文见内跳转采用。
然后是代码折叠的配置,不想用鼠标的话就可以看看。
include路径是用来补全的,我用的是M-q,但是用ac+gtags的时候比较多。这个大部分时间是闲置了
然后配置ecb,这个是分隔窗口类似ide的配件,主要用的就是tag-list类似的功能,别的其实很少用。
[plain]
view plaincopyprint?
;;配置ecb (add-to-list 'load-path "~/emacs/ecb-2.40") (require 'ecb) ;;关掉每日提示 (setq ecb-tip-of-the-day nil) ;; 各窗口间切换 (global-set-key [C-left] 'windmove-left) (global-set-key [C-right] 'windmove-right) (global-set-key [C-up] 'windmove-up) (global-set-key [C-down] 'windmove-down) ;; 隐藏和显示ecb窗口 (define-key global-map [(control f1)] 'ecb-hide-ecb-windows) (define-key global-map [(control f2)] 'ecb-show-ecb-windows) ;; 使某一ecb窗口最大化 ;(define-key global-map "/C-c1" 'ecb-maximize-window-directories) ;(define-key global-map "/C-c2" 'ecb-maximize-window-sources) ;(define-key global-map "/C-c3" 'ecb-maximize-window-methods) ;(define-key global-map "/C-c4" 'ecb-maximize-window-history) ;; 恢复原始窗口布局 ;(define-key global-map "/C-c`" 'ecb-restore-default-window-sizes)
;;配置ecb (add-to-list 'load-path "~/emacs/ecb-2.40") (require 'ecb) ;;关掉每日提示 (setq ecb-tip-of-the-day nil) ;; 各窗口间切换 (global-set-key [C-left] 'windmove-left) (global-set-key [C-right] 'windmove-right) (global-set-key [C-up] 'windmove-up) (global-set-key [C-down] 'windmove-down) ;; 隐藏和显示ecb窗口 (define-key global-map [(control f1)] 'ecb-hide-ecb-windows) (define-key global-map [(control f2)] 'ecb-show-ecb-windows) ;; 使某一ecb窗口最大化 ;(define-key global-map "/C-c1" 'ecb-maximize-window-directories) ;(define-key global-map "/C-c2" 'ecb-maximize-window-sources) ;(define-key global-map "/C-c3" 'ecb-maximize-window-methods) ;(define-key global-map "/C-c4" 'ecb-maximize-window-history) ;; 恢复原始窗口布局 ;(define-key global-map "/C-c`" 'ecb-restore-default-window-sizes)
ctrl加箭头在各个窗口间移动,别的几个快捷键按习惯来,不需要就不要看了。
然后说几个常用的配置,你可以调整左边窗口的默认宽度,你可以配置分隔的样式,具体配置需要你去看看ecb的手册,
强制性的,否则你会觉得ecb不好用,查看ecb帮助,先启动ecb,然后M-x ecb-show-help。就会打开ecb的info。
配置global
[plain]
view plaincopyprint?
;;配置gtags
(add-to-list 'load-path "~/emacs/global")
;(autoload 'gtags-mode "gtags" "" t)
;(setq c-mode-hook '(lambda ()
; (gtags-mode 1)))
(global-set-key (kbd "C-c g f") 'gtags-find-tag)
(global-set-key (kbd "C-c g p") 'gtags-pop-stack)
(global-set-key (kbd "C-c g s") 'gtags-select-tag)
;;配置gtags (add-to-list 'load-path "~/emacs/global") ;(autoload 'gtags-mode "gtags" "" t) ;(setq c-mode-hook '(lambda () ; (gtags-mode 1))) (global-set-key (kbd "C-c g f") 'gtags-find-tag) (global-set-key (kbd "C-c g p") 'gtags-pop-stack) (global-set-key (kbd "C-c g s") 'gtags-select-tag)
这个也推荐看下手册,先启动gtags再启动cedet的semantic会有冲突,所以我的gtags-mode都是手动启动,自己把gtags-mode这个命令绑到舒服的按键上。
然后是我的3个常用快捷键,
[plain]
view plaincopyprint?
C-c g f查找tag,<SPAN style="LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; COLOR: rgb(85,85,85)"></SPAN><PRE class=plain name="code">C-c g p返回,</PRE><PRE class=plain name="code"><SPAN style="LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; COLOR: rgb(85,85,85)"></SPAN><PRE class=plain name="code">C-c g s,多个tags时选择一个tags,这个还有待研究,手册上说的任何emacs命令就可以选择,但是我没用处来。</PRE><PRE class=plain name="code"></PRE><PRE class=plain name="code"></PRE><PRE class=plain name="code">gtags和ac可以配置补全,很好用,不过补全傻了点,不过基本是够用了。</PRE><P></P>
<PRE></PRE>
<PRE></PRE>
<P></P>
<P><SPAN style="FONT-FAMILY: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; COLOR: #555555"><SPAN style="LINE-HEIGHT: 16px"><BR>
</SPAN></SPAN></P>
<P><SPAN style="FONT-FAMILY: Verdana, 'BitStream vera Sans', Tahoma, Helvetica, sans-serif; COLOR: #555555"><SPAN style="LINE-HEIGHT: 16px">这个配置搞android还是满合适的。</SPAN></SPAN></P>
<P><BR>
</P>
<P><BR>
</P>
<P><BR>
</P>
<P><BR>
</P>
</PRE>
相关文章推荐
- emacs代码浏览+跳转
- emacs cscope浏览代码
- emacs code navigate 浏览代码
- emacs Bookmark Plus 代码浏览/导航
- wap浏览自动跳转到wap页面的js代码
- Emacs中使用Ebrowse来浏览C++代码
- 在Emacs中使用etags来浏览代码
- wap浏览自动跳转到wap页面的js代码
- vim中浏览c++代码使用ctags和cscope进行函数跳转时vimrc的配置
- [emacs] 使用ggtags浏览代码
- 在Emacs中使用etags来浏览代码
- 在Emacs中使用etags来浏览代码
- Emacs中使用Ebrowse来浏览C++代码
- 深入浅出学习Struts1框架(二):重构MVC模式代码中跳转路径和业务逻辑
- 判断是否为手机浏览跳转不同域名
- jsp里面,实现跳转,可以在javascript里面,添加代码:
- 兼容各浏览哭的js无缝滚动代码
- UITabBarController通过代码实现跳转到指定的view 【原创】
- vue element table 相关页面跳转实例代码
- window实现sublime的C++代码跳转