又是很久沒更新了,不過還好,如今慢慢有點感受了,好長時間不寫博客會內心有點感受欠一點什麼東西.以爲每次寫了東西都往主頁推搞得壓力好大,之後就不往網站首頁推了,純留下來供參考,另外就是主要方便從搜索找過來的朋友,但願能幫助大家在折騰的道路上少走一些彎路.java
正題開始以前先說點題外話,最近使用org-mode,深深的佩服org-mode的做者,一個科學家(非計算機科學),從2003年到2013年的如今仍然在持續更新org-mode,讓更多的人認識到純文字的力量與好處,而且把org-mode作到了成爲emac生態中不可或缺的一部分,真是不容易,org-mode我用地不熟,之後應該會專門詳細地討論它.python
另外還有件事,這個系列的標題之後就再也不維持個人Emacs折騰經驗談了,有點文不對題.具體改爲什麼我再想一想.c++
進入正題:Yasnippetgit
對於文本編輯器來講,snippet這個東西應該算很是有用了,尤爲是對於java/c++程序員來講,能夠迅速而正確地寫出一個塊的基礎框架,沒有接觸過snippet的同窗能夠想想IDE裏面的快速補全,雖然兩個東西仍是頗有差異的.咱們拿sublime舉個例子:程序員
咱們寫java的時候輸入for,這時編輯器會有提示github
咱們可能會說for不是已經自動補全了嘛?爲啥還能夠選呢?別急,咱們就tab一下試試看:vim
這是啥?這就是咱們for語句循環體的必要的語法結構,咱們原本把這個語法結構填滿以後,就造成了咱們完整的for語句,可是,怎麼才能填滿這個結構呢?能夠看到,光標已經在第一個須要填的空上了,咱們這時輸入i=0什麼的,而後再按下tab,發生了什麼?markdown
咱們的光標越過了下一個分號,來到了應該填第二個空的地方.就像這樣不斷地輸入+tab咱們就填好了整個for語句結構.仔細想一想,這樣是否是很省事?是否是節省了不少時間?框架
其實,snippet就是一些自動的"填空題"機制,咱們須要某種語法結構的時候,就召喚出相應"填空題",而後把空填上就能夠了.說實在的,snippet就是這麼個東西.編輯器
Yasnippet是Yet Another Snippet的簡稱,說明在snippet方面以前已經有很多前人作過工做了,而yasnippet最出名無疑是由於它最好的作到了你們心目中足夠好用的snippet的標準.
安裝yasnippet很簡單,咱們的老辦法list-packages和package-install均可以用,我我的以爲這個東西在從此基本上都須要(本職工做碼農),因此就和linum同樣設置成了全局的,配置以下
;;yasnippet config (require 'yasnippet) (yas-global-mode 1)
而後,我常常寫clojure,可是yasnippet並無針對clojure的默認snippet,因而又找了clojure-snippet,就在list-package裏面,很是方便.
咱們一上來就是能夠用默認的snippet工做的,若是咱們須要自定義snippet呢?畢竟做者在github裏面說了再也不會加入更多的snippet,而是把這一工做開放給其餘人,能夠找一些好的snippet collection使用.
若是咱們要自定義snippet的話,能夠任意打開一個snippet的文件:
# name: FILE *fp = fopen(..., ...);
# key: fopen
# --
FILE *${fp} = fopen(${"file"}, "${r}");
這個是c語言的fopen的snippet,很好懂,fopen後按tab,就會跳出最下面一行(模板),被${}包圍的就是要填的"空",而包圍的東西是默認值,若是直接按tab略過的話就會保留默認值.第二行key: fopen代表這個snippet的觸發器是fopen,只有fopen+TAB才能觸發這個snippet.
固然snippet編寫遠不止這麼簡單:
# -*- coding: utf-8 -*- # name: def # contributor: Orestis Markou # contributor: Yasser González Fernández <yglez@uh.cu> # key: def # -- def ${1:name}($2): """$3 ${2:$ (let* ((indent (concat "\n" (make-string (current-column) 32))) (args (mapconcat '(lambda (x) (if (not (string= (nth 0 x) "")) (concat "- " (char-to-string 96) (nth 0 x) (char-to-string 96) ":"))) (mapcar '(lambda (x) (mapcar '(lambda (x) (replace-regexp-in-string "[[:blank:]]*$" "" (replace-regexp-in-string "^[[:blank:]]*" "" x))) x)) (mapcar '(lambda (x) (split-string x "=")) (split-string text ","))) indent))) (if (string= args "") (make-string 3 34) (mapconcat 'identity (list "" "Arguments:" args (make-string 3 34)) indent))) } $0
以上是python-mode的def的snippet,比原始的更加智能一些.雖然我不知道寫了什麼....
好吧等我研究一下了再改,最後說點無關的:Emacs的C-a快捷鍵移到行首,C-e快捷鍵移到行尾,很好用,並且很是神奇的是在不少不少的編輯器裏面均可以用,好比google的輸入框(沒作過實驗究竟是由於google有這個設定仍是firefox有這個設定仍是vimperator有這個設定,可是博客園編輯器沒有),還有markdown編輯器mou,以及命令行終端裏,不少時候都不用去找HOME鍵和END鍵,先試試C-a和C-e吧.