高效的emacs
2015-04-02来源:易贤网

这篇文章用来总结自己对emacs的理解。本人之前使用过vim和sublime,现在主要使用emacs。

Start

就编辑速度来说,是不会有编辑器比vim更快的了。我也常常将代码片段,或者日志,xml,考到sublime进行分析。多行编辑很实用。

但我在平时,主要还是使用emacs,无论是用它写博客,写代码,执行代码,写GTD,管理文档…都非常的方便。

键绑定

一个高效的编辑器,就是能够做到不用鼠标,编辑时在鼠标和键盘之间进行切换是一件很恼人的事情。这点在你抱着笔记本进行写作的时候会深有体会。

常用的快捷键:(C代表Ctrl,A代表Alt)

C-n 向下移动一个字符

C-p 向上移动一个字符

C-b 向左移动一个字符

C-f 向右移动一个字符

A-b 向左移动一个单词

A-f 向右移动一个单词

C-a 移动到行首

C-e 移动到行尾

C-@ 设置选择下标

C-w 剪贴选中区域

A-w 复制选中区域

C-l 将光标所在行,作为中心行,刷屏

C-x H 全选整个缓冲区。

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的时候,经常用日期作为文件名的一部分)

(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是没有这个快捷键的,只能自己去实现了。在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中查找,然后就会弹出网页上的查找结果)

(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中执行python

或者直接弹出显示结果,但是这样不能错误信息,而且你的python代码末尾必须要有raw_input() 否则一闪

;; emacs弹窗,执行,当前的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 我应该将我购买的域名挂到自己的网站上

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的函数式编程和c#的linq来实现操作,而非迭代器

CLOSED: [2014-11-24 周一 11:29]

** 写一篇关于c#的迭代器和python的迭代器,

不要神话emacs

之前在学习emacs和vim的时候,网上有许多文章神话这两个编辑器,说是什么神的编辑器和编辑器之神。 其实如果说智能,它们是不会比VS智能的,emacs和vim最多也就是文本匹配,而vs却真正的在内部构建代码对象。emacs只是比较方便,比较自由而已,比较能折腾而已,要从实用角度出发,而不是做一个脑残粉。

更多信息请查看IT技术专栏

推荐信息