內容簡(jiǎn)介
1、Emacs簡(jiǎn)介
2、Emacs三個(gè)平臺的安裝與配置
3、自動(dòng)補全插件
4、小編的Emacs配置文件
5、常用快捷方式
6、和版本控制系統的配合(以SVN為例)
【程序員小助手】系列
在這個(gè)系列文章中(不定期更新),小編會(huì )把這些年(也沒(méi)幾年)的編程學(xué)習和工作中使用到的個(gè)人感覺(jué)非常好的軟件推薦給大家,希望能夠共享美好資源,使大家提高編程和辦事效率。
Emacs,最強編輯器,沒(méi)有之一
小編知道,此標題一出,肯定會(huì )遭受廣大群眾“詬病”,說(shuō)不好還會(huì )被其他編輯器的粉絲暗地里“干掉”。
比如,Vim編輯器的粉絲可能就會(huì )來(lái)“踢館”,VS或Eclipse的粉絲也興許會(huì )“群起而攻”,但是小編只是表達一下自己的感受,請拍磚的時(shí)候輕一點(diǎn),雞蛋少扔幾個(gè),如果扔的雞蛋多也請多扔幾個(gè)番茄過(guò)來(lái),這樣我可以做番茄炒蛋,謝謝。
對于很多人來(lái)說(shuō),使用Vim和Emacs,不僅是提升“逼格”的方式,更是上升到“信仰”的層面,夸張吧。當然這和宗教信仰不一樣,只是一種可愛(ài)的“偏執”而已。
Emacs實(shí)在能做很多事,不要認為它就只是一個(gè)文本編輯器,它可以說(shuō)是一個(gè)整合環(huán)境,或可稱(chēng)它為“集成開(kāi)發(fā)環(huán)境”,它還可以做以下事情:
上網(wǎng),瀏覽網(wǎng)頁(yè)
看視頻
收發(fā)郵件
調試程序,結合GDB,EDebug等。支持C/C++,Perl,Python,Lisp等等
玩游戲
計算器
記日記
管理日程,Task,ToDo,約會(huì )等
個(gè)人信息管理
目錄管理
文件比較
閱讀info和man文檔
等等
小編以前在Linux下編寫(xiě)代碼是使用Vim編輯器的,也非常強大,但是自從2014年接觸到Emacs之后,就愛(ài)上了Emacs(fall in love with Emacs),Vim雖然有時(shí)還會(huì )用到,但是大部分時(shí)間編寫(xiě)代碼還是用的Emacs。
一開(kāi)始我不知道為什么Emacs如此優(yōu)美又強大,直到后來(lái)閱讀了《黑客與畫(huà)家》這部經(jīng)典著(zhù)作(硅谷創(chuàng )業(yè)教父 Paul Graham 保羅·格雷厄姆所寫(xiě),其實(shí)也就是他的一些日志匯編而成),里面講述了Lisp語(yǔ)言的強大和優(yōu)美,而Emacs就是用Lisp語(yǔ)言編寫(xiě)的,怪不得。
閑扯一下為什么Lisp語(yǔ)言如此強大,雖然這門(mén)語(yǔ)言很老了,在2015年6月的TIOBE編程語(yǔ)言排行榜也只有第31位,但是:
摘錄自 阮一峰 翻譯的《黑客與畫(huà)家》一書(shū),推薦大家一讀:
********************************************
如果我們把流行的編程語(yǔ)言,以這樣的順序排列:Java、Perl、Python、Ruby。你會(huì )發(fā)現,排在越后面的語(yǔ)言,越像Lisp。 Python模仿Lisp,甚至把許多Lisp黑客認為屬于設計錯誤的功能,也一起模仿了。至于Ruby,如果回到1975年,你聲稱(chēng)它是一種Lisp方言,沒(méi)有人會(huì )反對。
編程語(yǔ)言現在的發(fā)展,不過(guò)剛剛趕上1958年Lisp語(yǔ)言的水平。
1958年,John McCarthy設計了Lisp語(yǔ)言。我認為,當前最新潮的編程語(yǔ)言,只是實(shí)現了他在1958年的設想而已。 這怎么可能呢?計算機技術(shù)的發(fā)展,不是日新月異嗎?
1958年的技術(shù),怎么可能超過(guò)今天的水平呢? 讓我告訴你原因。 這是因為John McCarthy本來(lái)沒(méi)打算把Lisp設計成編程語(yǔ)言,至少不是我們現在意義上的編程語(yǔ)言。他的原意只是想做一種理論演算,用更簡(jiǎn)潔的方式定義圖靈機。 所以,為什么上個(gè)世紀50年代的編程語(yǔ)言,到現在還沒(méi)有過(guò)時(shí)?簡(jiǎn)單說(shuō),因為這種語(yǔ)言本質(zhì)上不是一種技術(shù),而是數學(xué)。數學(xué)是不會(huì )過(guò)時(shí)的。
你不應該把Lisp語(yǔ)言與50年代的硬件聯(lián)系在一起,而是應該把它與快速排序(Quicksort)算法進(jìn)行類(lèi)比。這種算法是1960年提出的,至今仍然是最快的通用排序方法。
直到今天,最高級的主流語(yǔ)言,也只是剛剛接近Lisp的水平。雖然已經(jīng)很接近了,但還是沒(méi)有Lisp那樣強大。
Lisp語(yǔ)言誕生的時(shí)候,就包含了9種新思想。其中一些我們今天已經(jīng)習以為常,另一些則剛剛在其他高級語(yǔ)言中出現,至今還有2種是Lisp獨有的。
*******************************************
怎么樣,是不是很有興趣了解一下如此強大的Lisp語(yǔ)言開(kāi)發(fā)出來(lái)的Emacs是如何優(yōu)美呢?
當然此文不可能帶大家領(lǐng)略所有Emacs的優(yōu)美之處。說(shuō)實(shí)話(huà),Emacs肯定存在不足之處: 小編還是很識相的,不敢冒天下之大不韙。
更多Emacs的好處只有大家使用了才能慢慢領(lǐng)略。
Emacs簡(jiǎn)介
Emacs是一種強大的文本編輯器,在程序員和其他以技術(shù)工作為主的計算機用戶(hù)中廣受歡迎。
EMACS,即Editor MACroS(編輯器宏)的縮寫(xiě),最初由Richard Stallman(理查德·馬修·斯托曼)于1975年在MIT協(xié)同Guy Steele共同完成。
(Richard Stallman可是開(kāi)源運動(dòng)之父啊,這位可愛(ài)的長(cháng)胡子大叔抵制Apple,抵制Facebook,抵制Amazon,抵制不少公司和機構。他也是自由軟件基金會(huì )(Free Software Foundation,簡(jiǎn)稱(chēng)FSF)的主席,而自由軟件基金會(huì )主導了包括GNU在內的很多開(kāi)源工程。GNU工程使得世界各地的程序員可以為L(cháng)inux操作系統開(kāi)發(fā)周邊軟件等,才有了Linux的今天。不然Linus Tovarlds(Linux之父)基本上光是寫(xiě)了一個(gè)Linux內核,哪夠啊。所以今天的Linux最正確的稱(chēng)謂應該是GNU/Linux )
自誕生以來(lái),Emacs演化出了眾多分支,其中使用最廣泛的兩種分別是:1984年由Richard Stallman發(fā)起并由他維護至今的GNU Emacs,以及1991年發(fā)起的XEmacs。XEmacs是GNU Emacs的分支,至今仍保持著(zhù)相當的兼容性。它們都使用了Emacs Lisp這種有著(zhù)極強擴展性的編程語(yǔ)言,從而實(shí)現了包括編程、編譯乃至網(wǎng)絡(luò )瀏覽等等功能的擴展。
你可以使用Lisp語(yǔ)言改寫(xiě)Emacs的功能組件,而且可以更改配置,完全自定義Emacs,所有Emacs是充滿(mǎn)無(wú)限可能的編輯器。
國際化
Emacs支持對多種文字的文本編輯,包括UTF-8在內的諸多編碼系統,加上對多種字符集、文稿、書(shū)寫(xiě)系統,以及不同文化的書(shū)寫(xiě)習慣都提供了支持,使得世界上大多數語(yǔ)言的使用者都能通過(guò)Emacs進(jìn)行文本處理。Emacs還能通過(guò)調用諸如ispell這樣的外部程序,實(shí)現多種語(yǔ)言的拼寫(xiě)檢查。
跨平臺性
Emacs是目前世界上最具可移植性的重要軟件之一,能夠在當前大多數操作系統上運行,包括類(lèi)Unix系統(GNU/Linux、各種BSD、Solaris、AIX、IRIX、Mac OS X等等)、MS-DOS、Microsoft Windows以及OpenVMS等,還有移動(dòng)Android平臺以及iOS。
緩沖區的概念
初學(xué)Emacs需要理解什么是緩沖區:
Emacs里的一切操作都發(fā)生在編輯緩沖區(buffer)里,它通常是某個(gè)文件的工作副本。如果你正在編輯的編輯緩沖區里包含著(zhù)某個(gè)文件的一個(gè)副本,那么當你保存自己所做的改動(dòng)時(shí),Emacs把編輯緩沖區的內容復制到文件中。 除了工作在文件副本上的緩沖區外,還有一些做臨時(shí)工作的緩沖區,它就像一張草稿紙,當然也可以隨時(shí)使用write-file命令("C-x C-w")或save-buffer命令(“C-x C-s”)保存這類(lèi)臨時(shí)工作緩沖區的內容。
小編一開(kāi)始也是對緩沖區的概念一知半解,不要怕,用著(zhù)用著(zhù)馬上就理解了。
可以參考一些高手的Emacs教程和“練級”系列:
http://www.cnblogs.com/robertzml/archive/2009/09/10/1564108.html
http://blog.csdn.net/redguardtoo/article/details/7222501/
http://blog.sina.com.cn/s/blog_6df127760101ll7a.html
http://arch.pconline.com.cn//pcedu/soft/gj/photo/0609/865628_1.html
Emacs的官網(wǎng):
http://www.gnu.org/software/emacs/
Emacs的中文WiKi:
http://www.emacswiki.org/emacs?interface=zh-cn
輕松一下,關(guān)于Emacs的一則玩笑
《Emacs 的日子是這個(gè)樣子的》
1. 聽(tīng)說(shuō)有 Emacs 這個(gè)東西。試了一下,感覺(jué)就像記事本一樣。沒(méi)什么學(xué)習曲線(xiàn)。就是……咋也找不到退出的辦法……
2. 開(kāi)始會(huì )一些 Emacs 了,開(kāi)始學(xué)習各種 mode,按鍵綁定,配置方法,開(kāi)始熟悉 Emacs……
3. 比較熟悉 Emacs了,基本使用 Emacs干活,每天“活在” Emacs 里面……
4. 非常熟悉自己“常用”的 Emacs,可以教別人 Emacs,大量泡 Emacs社區,大量下載、使用和跟蹤別人的擴展,已經(jīng)離不了 Emacs……
5. 漸漸不滿(mǎn) Emacs,漸漸熟悉 Lisp 語(yǔ)言,開(kāi)始改寫(xiě)“自己”的Emacs,在這期間,又開(kāi)始四處碰壁,工作效率總是被一個(gè)失敗的修改所影響……
6. 經(jīng)常修改 Emacs,自己手中的 Emacs基本上每周都和上一周有那么一點(diǎn)不太一樣…… 就是,改的太多了,經(jīng)常在某天整理代碼的時(shí)候突然發(fā)現……原來(lái)還有這么個(gè)易用的功能…… 忘記好久了……
7. …… ……
Emacs三個(gè)平臺的安裝與配置
1. Windows下安裝Emacs
請到以下鏈接下載Windows版的Emacs:
https://ftp.gnu.org/gnu/emacs/windows/
請大家下載列表中最新版本的zip文件,比如目前最新版的是2015年5月1日發(fā)布的24.5版:
emacs-24.5-bin-i686-mingw32.zip
下載后,用Winrar或7-zip解壓,會(huì )出來(lái)一個(gè)文件夾 emacs-24.5-bin-i686-mingw32
內含四個(gè)子文件夾:
bin
libexec
share
var
打開(kāi)bin文件夾,運行其中的 emacs.exe 文件即可開(kāi)啟Emacs,不需要安裝:
你可以把emacs.exe這個(gè)文件鎖定到任務(wù)欄,就很方便了,按一下圖標就啟動(dòng)了。
2. Linux下安裝Emacs
Debian一族(包括Ubuntu)下安裝Emacs:
sudo apt-get install emacs
Redhat一族(包括Fedora)下安裝Emacs:
sudo yum install emacs
其他的可以搜索如何安裝,或者下載Emacs的源代碼來(lái)編譯安裝。
下面演示Linux如何下載Emacs的代碼來(lái)編譯安裝(逼格最高的方式):
首先去
ftp://ftp.gnu.org/pub/gnu/emacs
上面有Emacs的幾乎所有版本的源代碼包,下載最新版的(用老版的也可以),如: emacs-24.5.tar.gz
解壓 emacs-24.5.tar.gz 并編譯,安裝,在終端(Terminal)中依次運行以下命令(如果是其他版本,則將如下命令中的24.5替換為相應版本即可):
tar -zxvf emacs-24.5.tar.gz (解壓文件)
cd emacs-24.5 (進(jìn)入目錄)
./configure (配置)
make (編譯)
sudo make install (安裝,會(huì )提示你輸入管理員密碼)
安裝完之后要啟動(dòng)Emacs很簡(jiǎn)單,開(kāi)一個(gè)終端(Terminal),輸入emacs,回車(chē),就可以了。不過(guò)小編嫌這樣太麻煩,可以用更簡(jiǎn)單的方式來(lái)打開(kāi)Emacs,我這里用一個(gè)鍵就可以了(演示環(huán)境是Fedora 21,不過(guò)其他系統如Ubuntu類(lèi)似):
打開(kāi)Fedora的“設置” (肯定知道設置在哪里吧)
選擇“鍵盤(pán)”
選擇列表中的“自定義快捷方式”,然后點(diǎn)擊加號“+”,用于添加新的快捷方式
選擇快捷方式的按鍵,小編這里選的是F2這個(gè)鍵,然后填寫(xiě)命令,就是“emacs”,再填寫(xiě)快捷方式的名稱(chēng),這個(gè)隨便填,我填的是“Emacs”,確定

按F2鍵試試,是不是就啟動(dòng)Emacs啦?這酸爽不言而喻!
3. Mac OS下安裝Emacs
Mac下安裝Emacs,網(wǎng)上有不少文章,有用Git弄下來(lái)Emacs的源碼然后編譯安裝的; 也有用一些包管理軟件來(lái)安裝的,但是小編推薦一個(gè)更方便的方式,和Mac下安裝QQ,迅雷那樣方便:
http://emacsformacosx.com/
上這個(gè)網(wǎng),然后下載那個(gè)dmg包,Mac用戶(hù)肯定懂的,就是Mac下安裝軟件的最常用方式。然后就沒(méi)有然后了... 如果這樣你都不會(huì )裝Emacs,那真心沒(méi)必要用Emacs了...
自動(dòng)補全插件
安裝完Emacs之后,還需要安裝一個(gè)自動(dòng)補全(可以自動(dòng)補全關(guān)鍵字,文本等)的擴展,非常強大,名叫company-mode,官網(wǎng):
http://company-mode.github.io/
幸好,這個(gè)擴展并不需要我們按照傳統的方式從官網(wǎng)下載、安裝到Emacs里面,因為Emacs里有個(gè)安裝擴展的列表,有點(diǎn)類(lèi)似 Debian系列的 apt-get 和 Redhat系列的yum 這樣的包管理工具,所以我們只需要按步驟安裝:
按下 M-x 來(lái)調出命令輸入
輸入 list-packages,回車(chē)

在出現的列表里,點(diǎn)擊 company
在右邊出現的新緩沖區里點(diǎn)擊 Install(英文: 安裝)

點(diǎn)擊 Yes

用此方法(list-packages命令)也可以安裝很多其他的Emacs的插件(擴展),大家也看到列表里有很多插件了吧,所以說(shuō)Emacs都有點(diǎn)像一個(gè)小型的操作系統。
小編的Emacs配置文件
請點(diǎn)擊“閱讀原文”來(lái)下載小編打包好的壓縮文件(.rar格式),內含小編的 Emacs配置文件.emacs (前面有一個(gè)點(diǎn)的,不要忘啦)和三個(gè)有用的模塊,供 .emacs 文件調用。
當然大家可以從網(wǎng)上下載一些大牛的Emacs配置文件,看一下他們的Emacs快捷鍵(除了基本的一些通用快捷鍵以外,用戶(hù)可以自定義很多快捷鍵,可以定義在 .emacs 文件中)。
如果你“不幸”選擇使用小編的Emacs配置文件,那么:
請用小編的 .emacs 文件替換你的家目錄的.emacs文件 (安裝完Emacs,你的家目錄,也就是 ~ 下就會(huì )有一個(gè) .emacs 文件)。
把壓縮文件里的其他三個(gè)模塊文件放置到 .emacs.d 這個(gè)文件夾下的modules文件夾 (.emacs.d 文件夾是安裝完Emacs就會(huì )有的,也在家目錄里,不過(guò)modules文件夾需要你自己創(chuàng )建):
cd ~/.emacs.d/
mkdir modules
cp php-mode.el psvn.el saved-places modules/ (或者手動(dòng)直接把三個(gè)模塊文件復制到modules文件夾里)
常用快捷方式
Emacs的快捷鍵都是綁定于Ctrl和Alt(或稱(chēng)Meta, 在Mac下就是Cmd鍵)上的,例如C-x就是Ctrl+x,M-x就是Alt+x (在Mac下就是Cmd鍵)。當然所有的按鍵都可以自定義。
所以下面我在講述快捷鍵的組合表示方式時(shí):
C 代表Ctrl鍵
M 代表Alt鍵或者在蘋(píng)果的Mac系統下是Cmd鍵
C-x C-c 代表著(zhù),先按C-x,再按C-c
C-x k 代表著(zhù),先按C-x,松開(kāi)手,再按k
小編平時(shí)最常用的是這些快捷鍵組合
M-s : 新建一個(gè)buffer(緩沖區)
C-x O : 注意是大寫(xiě)的O,不是零,所以需要按住shift鍵再按o鍵。用于在緩沖區之間切換
C-g : 取消當前操作
C-x u : 回到上一步,相當于Undo
C-x C-3 : 把緩沖區(buffer)分為左右兩個(gè),新的一個(gè)緩沖區是復制當前的緩沖區 (可以執行多次,來(lái)分割出很多小窗口)
C-x C-2 : 把緩沖區(buffer)分為上下兩個(gè),新的一個(gè)緩沖區是復制當前的緩沖區 (可以執行多次,來(lái)分割出很多小窗口)
M-w : 選中文字的情況是復制文字,而如果沒(méi)有選中文字則是復制當前的一行
C-w : 選中文字的情況是剪切文字,而如果沒(méi)有選中文字則是剪切當前的一行
M-x : 調出命令輸入,可以在后面接命令,比如man,svn-status,等
C-y : 黏貼
C-x C-s : 保存文本
C-x C-f : 打開(kāi)文件,如果文件不存在,則新建文件
C-x C-v : 打開(kāi)一個(gè)文件,取代當前緩沖區
C-x k : 關(guān)閉當前緩沖區(buffer)
C-s : 向前搜索
C-r : 向后搜索
C-x h : 全選
C-v : 向下翻頁(yè)
M-v : 向上翻頁(yè)
C-f : 前進(jìn)一個(gè)字符
C-b : 后退一個(gè)字符
M-f : 前進(jìn)一個(gè)單詞
M-b : 后退一個(gè)單詞
C-@ : 標記開(kāi)始區域
C-a : 移到行首
C-e : 移到行尾
M-a : 移到句首
M-e : 移到句尾
M-< : 緩沖區頭部
M-> : 緩沖區尾部
M-g M-g,再輸入數字 : 跳轉到文本的第幾行
C-x 0 : 關(guān)閉當前緩沖區
C-x C-c : 退出Emacs
暫時(shí)只能記起來(lái)這么多啦,還有很多快捷鍵就要你自己去發(fā)掘啦!小編平時(shí)也不會(huì )所有的快捷鍵都用上,上述的快捷鍵組合是最常用的。
注意: 千萬(wàn)不要死記這些快捷鍵組合,隨著(zhù)你使用Emacs,很快就能記住的,相信我!
還有一個(gè)平時(shí)常用的功能就是查詢(xún)函數,可以方便查詢(xún)已定義的函數:
按下 M-x 來(lái)調出命令輸入
輸入 man ,也就是Linux或Unix系統的man命令,是manuall的縮寫(xiě),也就是"手冊"的意思
然后輸入你要查詢(xún)的函數名,回車(chē)
就出來(lái)啦,比如小編查詢(xún)fprintf函數,就會(huì )彈出下圖右邊的緩沖區:

給出小編的 .emacs 配置文件的內容吧,免得萬(wàn)一下載鏈接失效了(至于那三個(gè)模塊,可以在網(wǎng)上找到下載的: php-mode.el psvn.el saved-places):
;;
;; ADDITIONAL REPOSITORY FOR MODULES TO LOAD
;;
(add-to-list 'load-path "~/.emacs.d/modules")
;;
;; ADDITIONNALS MODULES
;;
;;(require 'dsvn)
(require 'psvn)
(require 'php-mode)
(require 'saveplace)
;;(require 'unxls)
;; display the path to the file in the sidebar.
;;(require 'uniquify)
;;
;; KEYBOARD SHORTCUT
;;
(global-set-key [f9] 'compile)
(global-set-key [(control z)] 'undo)
;; We could use 'dabbrev-completion or 'dabbrev-expand
(global-set-key [(control return)] 'dabbrev-completion)
;;(global-set-key "\C-)" 'dabbrev-completion)
;;(global-set-key "\C-=" 'dabbrev-expand)
(global-set-key "\C-n" 'imenu)
(defun try-to-add-imenu ()
(condition-case nil (imenu-add-to-menubar "imenu") (error nil)))
(add-hook 'font-lock-mode-hook 'try-to-add-imenu)
;; Company mode in all buffers
(add-hook 'after-init-hook 'global-company-mode)
(global-set-key "\M-s" 'new-shell)
(global-set-key (kbd "C-x t") 'todo-show)
;;
;; Copy or Cut one line if no content selected
;;
;; copy region or whole line
(global-set-key "\M-w"
(lambda ()
(interactive)
(if mark-active
(kill-ring-save (region-beginning)
(region-end))
(progn
(kill-ring-save (line-beginning-position)
(line-end-position))
(message "copied line")))))
;; kill region or whole line
(global-set-key "\C-w"
(lambda ()
(interactive)
(if mark-active
(kill-region (region-beginning)
(region-end))
(progn
(kill-region (line-beginning-position)
(line-end-position))
(message "killed line")))))
;;
;; FUNCTION DEFINITION
;;
(defun new-shell ()
(interactive)
(let (
(currentbuf (get-buffer-window (current-buffer)))
(newbuf (generate-new-buffer-name "*shell*"))
)
(generate-new-buffer newbuf)
(set-window-dedicated-p currentbuf nil)
(set-window-buffer currentbuf newbuf)
(shell newbuf)
)
)
;;
;; resolving compilation problems. This force the environment variables
;; to be set before compiling.
;;
(let ((path (shell-command-to-string ". ~/.bashrc; echo -n $PATH")))
(setenv "PATH" path)
(setq exec-path
(append
(split-string-and-unquote path ":")
exec-path)))
;;
;; Ugly code for READING XLS (but works)
;; Requires: xlhtml & w3m
;;
(add-to-list 'auto-mode-alist '("\\.xls\\'" . no-xls))
(defun no-xls (&optional filename)
"Run xlhtml and w3m -dump on the entire buffer.
Optional FILENAME says what filename to use.
This is only necessary for buffers without
proper `buffer-file-name'. FILENAME should
be a real filename, not a path."
(interactive "fExcel File: ")
(when (and filename
(not (buffer-file-name)))
(write-file (make-temp-file filename)))
(erase-buffer)
(shell-command
(format "xlhtml -nc -te %s | w3m -dump -T text/html" (buffer-file-name))
(current-buffer))
(setq buffer-file-name nil)
(set-buffer-modified-p nil))
;;
;; START
;;
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(c-block-comment-prefix "http://")
'(case-fold-search nil)
'(column-number-mode t)
'(comint-completion-autolist t)
'(comint-completion-recexact t)
'(compilation-always-kill t)
'(compilation-auto-jump-to-first-error nil)
'(compilation-environment PATH=/home/griffon/trunk/indus/bin:/home/fox/components/gnutools/ecos-3\.0/arm-eabi/bin:/home/fox/components/ecos-3\.0/tools/bin:/home/avrdev/bin:/home/thomas/mes_fonctions:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin)
'(compilation-scroll-output (quote first-error))
'(compile-command "./makemake 5010 clean && ./makemake 5010 all -j 8 && ./makemake 5010 program")
'(completion-show-help t)
'(dabbrev-case-distinction t)
'(dabbrev-case-replace t)
'(doc-view-continuous t)
'(doc-view-image-width 850)
'(doc-view-resolution 200)
'(dynamic-completion-mode t)
'(grep-command "grep --exclude-dir=.svn --exclude=\\TAGS --exclude=\\*.{lst,lss,sym,list,o,elf,xml,json,sta,map,deps,d,sx,hex,doc,txt,pdf,tex} -inHr \"")
'(gud-gdb-command-name "arm-eabi-gdb -i=mi main.elf")
'(initial-scratch-message ";; This buffer is for notes you don't want to save, and for Lisp evaluation.
;; If you want to create a file, visit that file with C-x C-f,
;; then enter the text in that file's own buffer.
;; M-s: Open a new shell
")
'(safe-local-variable-values (quote ((todo-categories "Todo") (todo-categories "barracuda" "alligator" "Todo") (todo-categories "alligator" "Todo"))))
'(send-mail-function (quote mailclient-send-it))
'(svn-status-hide-unknown t)
'(svn-status-hide-unmodified t))
;;
;; EDITING/IDE
;;
(global-font-lock-mode 1)
(setq auto-mode-alist
(append '(("\.php$" . php-mode)
("\.module$" . php-mode))
auto-mode-alist))
;; saving position in files opened with emacsclient
;;(setq server-visit-hook (quote (save-place-find-file-hook)))
(setq-default save-place t)
(setq save-place-file "~/.emacs.d/saved-places")
;; Code completion case-insensitive, seems not working
;;(setq pcomplete-ignore-case t)
;;(setq case-fold-search t)
;;(setq read-buffer-completion-ignore-case t)
;;(setq read-file-name-completion-ignore-case t)
;; display the path to the buffer file using uniquify (required).
;;(setq uniquify-buffer-name-style 'reverse)
;; SHOW FILE PATH IN FRAME TITLE
;;(setq-default frame-title-format "%b (%f)")
;; Affiche le numéro de ligne et de colonne
(column-number-mode t)
(line-number-mode t)
;;
;; FORMATAGE
;;
;; Suppression des espaces en fin de ligne a l'enregistrement
(add-hook 'c++-mode-hook '(lambda ()
(add-hook 'write-contents-hooks 'delete-trailing-whitespace nil t)))
(add-hook 'c-mode-hook '(lambda ()
(add-hook 'write-contents-hooks 'delete-trailing-whitespace nil t)))
;;(defun set-newline-and-indent ()
;; (local-set-key (kbd "RET") 'newline-and-indent))
;;(add-hook 'lisp-mode-hook 'set-newline-and-indent)
;;
;; COLORS
;;
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(default ((t (:inherit nil :stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 135 :width normal :foundry "unknown" :family "DejaVu Sans Mono"))))
'(compilation-warning ((t (:inherit warning))))
'(font-lock-comment-face ((t (:foreground "darkorange4"))))
'(font-lock-function-name-face ((t (:foreground "navy"))))
'(font-lock-keyword-face ((t (:foreground "red4"))))
'(font-lock-type-face ((t (:foreground "black"))))
'(linum ((t (:inherit shadow :background "gray95"))))
'(mode-line ((t (nil nil nil nil :background "grey90" (:line-width -1 :color nil :style released-button) "black" :box nil :width condensed :foundry "unknown" :family "DejaVu Sans Mono"))))
'(svn-status-directory-face ((t (:foreground "tomato")))))
;; sort of fullscreen
(add-to-list 'default-frame-alist '(left . 0))
(add-to-list 'default-frame-alist '(top . 0))
(add-to-list 'default-frame-alist '(height . 100))
(add-to-list 'default-frame-alist '(width . 200))
和版本控制系統的配合(以SVN為例)
因為有導入Emacs的SVN模塊(psvn.el),所以如果你使用了小編的Emacs配置文件,還可以和SVN(當然你要先安裝SVN, Fedora下是 sudo yum install subversion ; Ubuntu下是 sudo apt-get install subversion )配合使用,超級方便,比如你修改了幾個(gè)文件,那么在包含 .svn 這個(gè)文件的那個(gè)文件夾里按下: M-x,然后輸入: svn-status,回車(chē),確認,就會(huì )顯示一個(gè)列表啦,就是SVN的svn status命令所顯示的狀態(tài)列表。

然后,選中你要提交的文件,按 m 鍵,你可以一次選中好幾個(gè),取消選中按 u 鍵。
按 c 鍵開(kāi)始編輯提交注釋?zhuān)–omment),如下圖(綠色的是已經(jīng)選中(按 m 鍵)要提交的文件):

我這里輸入了“修改了幫助文檔”這一句注釋?zhuān)瓿芍?,按兩?“C-c”,就提交(commit)好了,非??旖?。
不知道SVN是什么的讀者,可以百度一下,SVN是一個(gè)常用的版本控制軟件。其他的更先進(jìn)的版本控制系統有Git, Mercurial等。目前所在公司不大,所以用SVN(集中式版本控制系統)也方便,之前在其他公司用過(guò)Git和Mercurial(這兩個(gè)是分布式版本控制系統)。
嘗試一下Emacs吧,真的是“神器”!
誰(shuí)用誰(shuí)知道,用過(guò)都說(shuō)好~
點(diǎn)擊下方鏈接查看 “Emacs配置文件和三個(gè)模塊的壓縮文件 (小編的百度云盤(pán)下載)”
http://pan.baidu.com/s/1bn74FhH
您若覺(jué)得本文不錯,請點(diǎn)擊“分享”
新朋友請關(guān)注「程序員聯(lián)盟」微信搜公眾號 ProgrammerLeague
小編微信號: frogoscar
小編郵箱: enmingx@gmail.com
聯(lián)系客服