十个提升效率的emacs配置

bcf2 9年前

使用emacs一段时间了,总结出自己实践的一些快捷配置,我用的版本是自己编译的24.5。

快速切换至上个buffer

切换缓冲区C-x b RET还是有点繁琐,当我在两个缓冲区间快速编辑的时候,我希望一个动作就能完成切换,所以我设置Shift+TAB切换至上个buffer

(global-set-key (kbd "<backtab>") #'(lambda ()                                        (interactive)                                        (switch-to-buffer (other-buffer (current-buffer) 1))))

键盘宏的录制和回放

默认F3是录制宏,F4是停止录制,C-x x回放宏

(global-set-key (kbd "C-x x") 'call-last-kbd-macro)

逗号后自动加空格

(global-set-key (kbd ",")                  #'(lambda ()                      (interactive)                      (insert ", ")))

使用yasnippet复制当前行的编辑模式

在多数编程语言中,相邻行的代码的冗余度是非常高的,下面的C-c TAB将当前行转化为临时的snippet模板,非常好用(依赖:yasnippet)

你可以尝试一下,编辑go代码是,在fmt.Prinln("hello world")上按C-c TAB是什么效果

(defun yasnippet-current-line ();; C-c TAB    (interactive)    (let ((current-line (string-trim-right (thing-at-point 'line t))))      (end-of-line)      (newline-and-indent)      (yas-expand-snippet (yasnippet-string-to-template (string-trim current-line)))))    (defun yasnippet-string-to-template (string)    (let ((count 1))      (labels ((rep (text)                    (let ((replace (format "${%d:%s}" count text)))                      (incf count)                      replace)))        (replace-regexp-in-string "[a-zA-Z0-9]+" #'rep string))))          (global-set-key (kbd "C-c TAB") 'yasnippet-current-line)

显示行号,括号匹配,高亮括号配对,美化符号显示

;; 显示行号  (global-linum-mode)  (setq column-number-mode t)    ;; 高亮括号配对  (electric-pair-mode)    ;; 高亮括号配对  (show-paren-mode t)  (setq show-paren-style 'parenthesis)    ;; 美化显示符号(elisp),比如lambda会显示为λ  (prettify-symbols-mode)  (global-prettify-symbols-mode 1)

undo-tree默认撤消一次

undo-tree非常棒,但是大多数时候我们只需要撤消一次,你需要按C-x u p RET,下面的绑定使得undo-tree默认处于撤消一次的状态上C-x u RET,少按一次p。我感觉对于撤消一次的情形应该单独设置一个快捷键,但好在我用撤消的次数并不多。

(require 'undo-tree)  (define-key undo-tree-map (kbd "C-x u") #'(lambda ()                                              (interactive)                                              (undo-tree-visualize)                                              (undo-tree-visualize-undo)))

speedbar

老实说,spacemacs内置了helm后,我不怎么用speedbar了。speedbar的问题是他创建了一个缓冲区,而这个缓冲区对于C-x b是可见的,我从来都不想切换至speedbar缓冲区,所以我写了下面的代码,按F2切换speedbar的开启状态,并且自动刷新,当你不希望显示speedbar的时候,干脆把buffer给kill掉。

注:我用了sr-speedbar

(require 'sr-speedbar)  (global-set-key (kbd "<f2>") (lambda()                                 (interactive)                                 (sr-speedbar-refresh)                                 (sr-speedbar-toggle)                                 (unless (sr-speedbar-exist-p)                                   (kill-buffer "*SPEEDBAR*"))))

s键在speedbar中搜索

(require 'speedbar)  (define-key speedbar-mode-map (kbd "s")    #'(lambda ()        (interactive)        (beginning-of-buffer)        (isearch-forward)))  (define-key speedbar-mode-map (kbd "u")    #'(lambda ()        (interactive)        (speedbar-up-directory)))

dot-spacemacs

配置elpa

把下面的代码放进spacemacs/init中

  (setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")                             ("marmalade" . "https://marmalade-repo.org/packages/")                             ("melpa" . "http://melpa.org/packages/")))

jazz颜色主题

jazz是一个暗色的主题,leuven则是亮版的代表,对Org Mode支持出奇的好,可惜在spacemacs下表现不佳。这些代码放在set-default里面

   dotspacemacs-themes '(jazz                           solarized-dark                           leuven                           solarized-light)

字体

我这里字体设置的有点大了,没办法,打游戏眼有点花,字体需要在spacemacs项目上找下载地址自行安装,话说我也喜欢exvim,但自从有了spacemacs,你懂的。

   dotspacemacs-default-font '("Source Code Pro"                                 :size 24                                 :weight normal                                 :width normal                                 :powerline-scale 1.1)

将private-layer挪出来

默认在~/.emacs.d/private目录下,那太傻,我根本不动spacemacs的源码,都是自己创建init-package-layer

configuration-layer-private-directory "~/dot-spacemacs/"

设置专属yasnippet模板

默认spacemacs带了一堆snippet模板,老实说我都不敢按TAB,谁知道会冒出些什么,于是我干脆自定义了snippet模板路径,所有的模板都改为大写,比如在golang里面fmt.Println,模板缩写是PLN。全部改为大写后,误操作少了很多。

      (require 'yasnippet)        (setq yas-snippet-dirs "~/dot-spacemacs/snippets")        (yas-global-mode 1)        (yas-reload-all)

Org Mode

外行用emacs第一动力应该是org mode,但org mode范围很广,强烈推荐看官方manual,下面是官方推荐的设置,我觉得太赞了。

(global-set-key "\C-cl" 'org-store-link)  (global-set-key "\C-cc" 'org-capture)  (global-set-key "\C-ca" 'org-agenda)  (global-set-key "\C-cb" 'org-iswitchb)
来自: