Emacs學習心得之 基礎配置

Emacs學習心得之 基礎配置html

1.前言
2.基礎配置git

 

1、前言

本篇博文記錄了Emacs的一些基礎配置,github

其中,具體配置基於博客:
http://www.tuicool.com/articles/uaUNBzN                      (Emacs 配置文件新手攻略(2014))ide

並參考瞭如下文章:
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裏面執行命令行?)函數

 

2、基礎配置

使用目錄(~/.emacs.d/ ) 對Emacs進行簡單配置,完成了以下配置:
1. 自動補完( auto-complete 和yasnippet )
2. 顯示行數學習

配置放在 這裏 ,目錄結構以下ui

~/.emacs.d/
README.md   #請無視該文件
init.el       #Emacs會自動從init.el開始執行
lisp/       #就是加載各個插件的初始化文件的位置啦
init-xxx.el    #某初始化文件lua

具體配置以下:spa

init.el

init.el 主要就是下面幾句:.net

(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)
相關文章
相關標籤/搜索