Emacs IDE
庸置疑,Emacs是这个世界上最强悍的编辑器了。在此不想引起Emacs vs VI 的论战。Emcas的扩展能力可以说是无限的,这点从后来的Eclipse、Firefox之类的架构可以看出其影响力。
编辑器、IDE都在不断的发展和进步,Emacs这个老家伙也没有停止其步伐。最近23.1正式发布,内置支持Unicode编码,还增加了很多新功能。Textmate是编辑器的后起之秀,有很多新鲜的好用的功能,其他编辑器争相模仿,不过只能在Mac OSX上使用,也贵的要命。对于Emacs和Vim来说,利用其脚本扩展是轻易而举的。Emacs就出现了几个好用的插件。Yasnippet和Auto Complete就是其中佼佼者。
Yasnippet的不用多说,能实现Textmate的bundle功能。官方网站有详细介绍和说明,用起来很是顺手,不过bundles明显缺少,对于日常使用C++,python也够了。
对于Emacs的自动补全就有点麻烦了。智能提示已经是IDE的标配,Emacs当然也可以,只是要借助很多插件。首先必备的是cedet,主要是用其中的semantic,当然还可以加上ECB,浏览代码更方便。不过加上之后会慢很多。自动补全还有一个轻量级的Auto complete,可以和semantic、yasnippet等搭配使用。如图:
最新development version可以通过auto-install-batch安装,不过配置时发现一些问题。auto-complete-yasnippet.el中,
(defun ac-yasnippet-candidate ()
(let ((table (yas/snippet-table
major-mode)))
(if table
(ac-yasnippet-candidate-1 table))))
需要修改为:
(defun ac-yasnippet-candidate ()
(let ((table (yas/snippet-table-p
major-mode)))
(if table
(ac-yasnippet-candidate-1 table))))
另外,在.emacs中增加配置:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Auto complete ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (when (require 'auto-complete nil t) (require 'auto-complete-extension nil t) ;optional (require 'auto-complete-yasnippet nil t) ;optional (require 'auto-complete-semantic nil t) ;optional (require 'auto-complete-gtags nil t) ;optional (require 'auto-complete-cpp) (ac-c++-init) (require 'auto-complete-emacs-lisp) (ac-emacs-lisp-init) (require 'auto-complete-python) (ac-ropemacs-init) (require 'auto-complete-ruby) (ac-ruby-init) (require 'auto-complete-css) (ac-css-init) (require 'ac-anything) (define-key ac-complete-mode-map (kbd "C-:") 'ac-complete-with-anything) (setq-default ac-sources '(ac-source-yasnippet ac-source-semantic ac-source-imenu ac-source-abbrev ac-source-words-in-buffer ac-source-files-in-current-dir ac-source-filename)) (global-auto-complete-mode t) (define-key ac-complete-mode-map "\t" 'ac-expand) (define-key ac-complete-mode-map "\r" 'ac-complete) (define-key ac-complete-mode-map "\M-n" 'ac-next) (define-key ac-complete-mode-map "\M-p" 'ac-previous) (setq ac-auto-start 1) (global-set-key "\M-/" 'ac-start) (define-key ac-complete-mode-map "\M-/" 'ac-stop) (setq ac-dwim t) (setq ac-override-local-map nil) ;don't override local map ;; Enables omnicompletion with `c-mode-common'. (add-hook 'c-mode-common-hook '(lambda () (add-to-list 'ac-omni-completion-sources (cons "\\." '(ac-source-semantic))) (add-to-list 'ac-omni-completion-sources (cons "->" '(ac-source-semantic))) (add-to-list 'ac-sources 'ac-source-gtags))) )
对于python,还需要ropemacs插件,这样对于Python还有refactor的功能了。但是Rope和autocomplete的配合在新版本中不能使用以前的方法,如果使用老版本的auto complete可以参考 http://www.enigmacurry.com/2009/01/21/autocompleteel-python-code-completion-in-emacs/ 。目前还没有找到更好的办法,但使用ropemacs自动提示也没有问题。