十個提升效率的emacs配置
使用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)</pre>
顯示行號,括號匹配,高亮括號配對,美化符號顯示
;; 顯示行號 (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)</pre>
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)來自: