Emacs學習心得之 基礎配置
1.前言
2.基礎配置
一、前言
本篇博文記錄了Emacs的一些基礎配置,
其中,具體配置基於博客:
http://www.tuicool.com/articles/uaUNBzN (Emacs 配置文件新手攻略(2014))
並參考了以下文章:
http://blog.csdn.net/blueboy82006/article/details/5309280 (在emacs中顯示行號)
http://www.cnblogs.com/liyongmou/archive/2013/04/26/3044155.html#sec-1-1 (emacs自動補全插件auto-complet和yasnippet,安裝、配置和擴展)
https://github.com/joaotavora/yasnippet (yasnippet in Github)
https://www.douban.com/group/topic/9403585/ (大家如何在emacs里面執行命令行?)
二、基礎配置
使用目錄(~/.emacs.d/ ) 對Emacs進行簡單配置,完成了如下配置:
1. 自動補完( auto-complete 和yasnippet )
2. 顯示行數
配置放在 這里 ,目錄結構如下
~/.emacs.d/
README.md #請無視該文件
init.el #Emacs會自動從init.el開始執行
lisp/ #就是加載各個插件的初始化文件的位置啦
init-xxx.el #某初始化文件
具體配置如下:
init.el
init.el 主要就是下面幾句:
(add-to-list 'load-path (expand-file-name "lisp" user-emacs-directory)) (require 'init-utils) (require 'init-elpa) (require 'init-yasnippet) (require 'init-auto-complete) //顯示行數 (global-linum-mode t) (provide 'init)
init-utils.el
來自 Purcell ,目的是把一些相互依賴的feature的加載順序理順,例如feature A依賴於feature B,則可以寫成 (after-load 'B 'A) ,這樣如果錯誤地在B之前require了A也不會影響正常啟動。
;;after-load ;;例如feature A依賴於feature B,則可以寫成 (after-load 'B 'A) (defmacro after-load (feature &rest body) "After FEATURE is loaded, evaluate BODY." (declare (indent defun)) `(eval-after-load ,feature '(progn ,@body))) (provide 'init-utils)
init-elpa.el
也是來自 Purcell 那里截取過來的,但是去掉了很多用不上的函數。
該文件初始化Emacs的包管理系統 ELPA ,
(require 'package) ;; 增加軟件包倉庫 (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/")) (when (< emacs-major-version 24) (add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/"))) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/")) (add-to-list 'package-archives '("melpa-stable" . "http://melpa-stable.milkbox.net/packages/")) ;; 定義require-package函數 (defun require-package (package &optional min-version no-refresh) "Install given PACKAGE, optionally requiring MIN-VERSION. If NO-REFRESH is non-nil, the available package lists will not be re-downloaded in order to locate PACKAGE." (if (package-installed-p package min-version) t (if (or (assoc package package-archive-contents) no-refresh) (package-install package) (progn (package-refresh-contents) (require-package package min-version t))))) (package-initialize) (provide 'init-elpa)
有了ELPA,給Emacs裝插件就變的非常容易了。比方說你需要一個叫 example 的插件,那么可以在 lisp/ 目錄下增加一個文件 init-example.el :
;; init-example.el
(require-package 'example)
(require 'example-autoloads)
(provide 'init-example)
然后在 init.el 中加入一句 (require 'init-example) (注意這一句要放在 (require 'init-elpa) 之后)即可。
init-auto-complete.el 和 init-yasnippet.el
init-auto-complete.el 和 init-yasnippet.el 一起用於配置自動補完, 分別如下配置:
init-auto-complete.el:
(require-package 'auto-complete) (require 'auto-complete-config) (global-auto-complete-mode t) ;; 把自定義的dict加到auto-complete的字典中去 (add-to-list 'ac-dictionary-directories (expand-file-name "lisp/custom-dicts" user-emacs-directory)) ;; 按下TAB時首先縮進所在行,然后嘗試補全 (setq tab-always-indent 'complete) ;; 阻止自動觸發補全動作 (setq-default ac-expand-on-auto-complete nil) (setq-default ac-auto-start nil) ;; 用TAB作為手動觸發補全動作的快捷鍵 (ac-set-trigger-key "TAB") ;; 使用after-load來確保ac-source-yasnippet已經完成加載 (after-load 'init-yasnippet (set-default 'ac-sources '(ac-source-dictionary ac-source-words-in-buffer ac-source-words-in-same-mode-buffers ac-source-words-in-all-buffer ac-source-functions ac-source-yasnippet))) (require 'init-ac-source) (provide 'init-auto-complete)
init-yasnippet.el:
(require-package 'yasnippet) (require 'yasnippet) ;; 使用Ctrl-c k作為唯一的觸發快捷鍵 (define-key yas-minor-mode-map (kbd "<tab>") nil) (define-key yas-minor-mode-map (kbd "TAB") nil) (define-key yas-minor-mode-map (kbd "C-c k") 'yas-expand) (yas-global-mode t) (provide 'init-yasnippet)