這篇文章用來總結自己對emacs的理解。本人之前使用過vim和sublime,現(xiàn)在主要使用emacs。
Start
就編輯速度來說,是不會有編輯器比vim更快的了。我也常常將代碼片段,或者日志,xml,考到sublime進行分析。多行編輯很實用。
但我在平時,主要還是使用emacs,無論是用它寫博客,寫代碼,執(zhí)行代碼,寫GTD,管理文檔…都非常的方便。
鍵綁定
一個高效的編輯器,就是能夠做到不用鼠標,編輯時在鼠標和鍵盤之間進行切換是一件很惱人的事情。這點在你抱著筆記本進行寫作的時候會深有體會。
常用的快捷鍵:(C代表Ctrl,A代表Alt)
C-n 向下移動一個字符
C-p 向上移動一個字符
C-b 向左移動一個字符
C-f 向右移動一個字符
A-b 向左移動一個單詞
A-f 向右移動一個單詞
C-a 移動到行首
C-e 移動到行尾
C-@ 設置選擇下標
C-w 剪貼選中區(qū)域
A-w 復制選中區(qū)域
C-l 將光標所在行,作為中心行,刷屏
C-x H 全選整個緩沖區(qū)。
C-k 刪除光標后的整行內容
C-d 刪除一個字母
M-d 刪除一個單詞
C-_ Undo
C-? Redo
C-s 查找
A-j 換行,與上一行保持同樣的縮進
A-< 移動到文件頭部
A-> 移動到文件尾部
C-x 3 左右分屏
C-x 2 上下分屏
C-x 1 除此屏全部關閉
C-x 0 關閉此屏
A-/ 補全
其它的一些也是因為不常用,基本不會去記它們的。
除了emacs自己的keybinding,我還特意做了些鍵綁定,提高效率。
(global-set-key (kbd "C-M-h") 'backward-kill-word)
;; (bash中的回刪單詞,也是這三個鍵)
(global-set-key (kbd "C-x f") 'recentf-ido-find-file)
;; (在最近打開文件列表中,選擇要打開的文件,這個很實用)
(global-set-key (kbd "C-x t") 'insert-current-date)
;; (插入當前日期,在寫博客或者gtd的時候,經(jīng)常用日期作為文件名的一部分)
(global-set-key (kbd "<f8>") 'insert-current-file-fill-path)
;; (插入當前文件的完整路徑,這個也比較實用)
(global-set-key (kbd "M-g") 'goto-line)
;; (跳轉到某一行,是沒有vim中的:n快)
(global-set-key (kbd "C-x w") 'copy-word)
;; (復制一個單詞,只要光標落在單詞上,就可以復制整個單詞)
13 (global-set-key (kbd "C-x y") 'copy-line)
14 ;; (emacs是沒有這個快捷鍵的,只能自己去實現(xiàn)了。在vim中,yy就可以了)
15 (global-set-key (kbd "C-c C-b") 'comment-or-uncomment-region)
16 ;; (快速的對代碼進行注釋與反注釋)
17 (define-key global-map (kbd "C-c a") 'wy-go-to-char)
18 ;; (跳到此行的某個字母,vim的f和t,比這個快得多)
實用的多功能
多窗口編輯,文件管理器,都是emacs多功能的一部分。甚至還可以配置git等外部程序,僅僅打開一個emacs就夠了。
我的emacs還配置了以下實用的多功能
;; 快速的使用bing查找(直接在emacs中查找,然后就會彈出網(wǎng)頁上的查找結果)
(prelude-install-search-engine "bing" "=" "Search Bing:" )
(global-set-key (kbd "C-c b") 'prelude-bing)
;; emacs 彈窗 (我常常退彈出一個cmd,運行python,或者運行git)
(defvar popup-terminal-command
(cond ((memq system-type '(windows-nt cygwin))
'("cmd" "/c" "start" ))
(t '("x-terminal-emulator"))))
(defun popup-term ()
(interactive)
(apply 'start-process "terminal" nil popup-terminal-command))
(global-set-key (kbd "<f5>") 'popup-term)
寫博客
我的博客是使用jekyll進行搭建的,所以日常,基本就是用markdown編輯完之后,用git推送到服務器。
這里要提的就是snippet,因為jekyll擴展了一部分的markdown語法格式,配置成snippet后,快速的插入模板片段非常有用。
比如我的sinppet:hl就對應jekyll的語法高亮擴展。這要比markdown自帶的語法高亮(縮進),功能強大一些。
markdown 高亮:
if i == 3:
print "人生苦短"
else:
print "我用python"
jekyll 高亮:
if i == 3:
print "人生苦短"
else:
print "我用python"
寫代碼
我用emacs主要寫的代碼就是python,或者是其它的腳本,像是bash,反正我是不會用它寫c#的,沒有什么編輯器會比vs更適合寫c#。
sinppet 是必不可少的了,python中能用到的snippet我都有配置,之前還配置過一部分和tornado相關的snippet。
我將emacs配置成可以彈窗出一個shell,我一般就在這個shell中執(zhí)行python
或者直接彈出顯示結果,但是這樣不能錯誤信息,而且你的python代碼末尾必須要有raw_input() 否則一閃
;; emacs彈窗,執(zhí)行,當前的python
(defun popup-expython()
(interactive)
(let ((filename "test.py")
(args (list "cmd" "/c" "start" "python" (buffer-name))))
(apply 'start-process "terminal" nil args)))
(global-set-key (kbd "<f6>") 'popup-expython)
不僅僅是鍵盤綁定,這些有關編程的emacs配置,也值得一提。
;; 好代碼一行不應該超過80個字符
(add-hook 'python-mode-hook
(lambda () (highlight-lines-matching-regexp ".\{81\}" "red")))
還有我的emacs主題是zenburn,這種主題看起來不扎眼,代碼高亮美觀。很舒服。
寫GTD
我對GTD的理解,是要單獨寫的,這里只介紹用emacs寫gtd的一部分內容。
emacs使用org模式來寫GTD,基本上可以看作是*做的一棵樹,可以切TODO和DONE,展開,折疊,打標簽。
這里插入我gtd的一部分:
* Blog
** DONE 我應該將我購買的域名掛到自己的網(wǎng)站上
CLOSED: [2014-09-11 Thu 13:30]
** TODO 翻譯相關內容
* Book
** DONE 寫給上班族的世界史
CLOSED: [2014-09-05 周五 22:15]
** DONE 方與圓
CLOSED: [2014-09-21 周日 23:30]
* 周末寫兩篇博客
** DONE 使用python的函數(shù)式編程和c#的linq來實現(xiàn)操作,而非迭代器
CLOSED: [2014-11-24 周一 11:29]
** 寫一篇關于c#的迭代器和python的迭代器,
不要神話emacs
之前在學習emacs和vim的時候,網(wǎng)上有許多文章神話這兩個編輯器,說是什么神的編輯器和編輯器之神。 其實如果說智能,它們是不會比VS智能的,emacs和vim最多也就是文本匹配,而vs卻真正的在內部構建代碼對象。emacs只是比較方便,比較自由而已,比較能折騰而已,要從實用角度出發(fā),而不是做一個腦殘粉。
更多信息請查看IT技術專欄