【程序員小助手】Emacs,最強編輯器,沒有之一






內容簡介

1Emacs簡介

2Emacs三個平臺的安裝與配置

3、自動補全插件

4、小編的Emacs配置文件

5、常用快捷方式

6、和版本控制系統的配合(以SVN爲例)



【程序員小助手】系列


在這個系列文章中(不定期更新),小編會把這些年(也沒幾年)的編程學習和工作中使用到的個人感覺非常好的軟件推薦給大家,希望能夠共享美好資源,使大家提高編程和辦事效率。



Emacs,最強編輯器,沒有之一


小編知道,此標題一出,肯定會遭受廣大羣衆“詬病”,說不好還會被其他編輯器的粉絲暗地裏“幹掉”。


比如,Vim編輯器的粉絲可能就會來“踢館”,VS或Eclipse的粉絲也興許會“羣起而攻”,但是小編只是表達一下自己的感受,請拍磚的時候輕一點,雞蛋少扔幾個,如果扔的雞蛋多也請多扔幾個番茄過來,這樣我可以做番茄炒蛋,謝謝。

有種張無忌在光明頂被6大門派羣“圍剿”的架勢...


對於很多人來說,使用Vim和Emacs,不僅是提升“逼格”的方式,更是上升到“信仰”的層面,誇張吧。當然這和宗教信仰不一樣,只是一種可愛的“偏執”而已。感覺自己萌萌噠~


不過,Emacs實在能做很多事,不要認爲它就只是一個文本編輯器,它可以說是一個整合環境,或可稱它爲“集成開發環境”,它還可以做以下事情:


  1. 上網,瀏覽網頁

  2. 看視頻

  3. 收發郵件

  4. 調試程序,結合GDB,EDebug等。支持C/C++,Perl,Python,Lisp等等

  5. 玩遊戲

  6. 計算器

  7. 記日記

  8. 管理日程,Task,ToDo,約會等

  9. 個人信息管理

  10. 目錄管理

  11. 文件比較

  12. 閱讀info和man文檔

  13. 等等


小編以前在Linux下編寫代碼是使用Vim編輯器的,也非常強大,但是自從2014年接觸到Emacs之後,就愛上了Emacs(fall in love with Emacs),Vim雖然有時還會用到,但是大部分時間編寫代碼還是用的Emacs。


一開始我不知道爲什麼Emacs如此優美又強大,直到後來閱讀了《黑客與畫家》這部經典著作(硅谷創業教父 Paul Graham 保羅•格雷厄姆所寫,其實也就是他的一些日誌彙編而成),裏面講述了Lisp語言的強大和優美,而Emacs就是用Lisp語言編寫的,怪不得。


閒扯一下爲什麼Lisp語言如此強大,雖然這門語言很老了,在2015年6月的TIOBE編程語言排行榜也只有第31位,但是:


摘錄自 阮一峯 翻譯的《黑客與畫家》一書,推薦大家一讀


********************************************


如果我們把流行的編程語言,以這樣的順序排列:Java、Perl、Python、Ruby。你會發現,排在越後面的語言,越像Lisp。 Python模仿Lisp,甚至把許多Lisp黑客認爲屬於設計錯誤的功能,也一起模仿了。至於Ruby,如果回到1975年,你聲稱它是一種Lisp方言,沒有人會反對。

編程語言現在的發展,不過剛剛趕上1958年Lisp語言的水平。


1958年,John McCarthy設計了Lisp語言。我認爲,當前最新潮的編程語言,只是實現了他在1958年的設想而已。 這怎麼可能呢?計算機技術的發展,不是日新月異嗎?

1958年的技術,怎麼可能超過今天的水平呢? 讓我告訴你原因。 這是因爲John McCarthy本來沒打算把Lisp設計成編程語言,至少不是我們現在意義上的編程語言。他的原意只是想做一種理論演算,用更簡潔的方式定義圖靈機。 所以,爲什麼上個世紀50年代的編程語言,到現在還沒有過時?簡單說,因爲這種語言本質上不是一種技術,而是數學。數學是不會過時的。


你不應該把Lisp語言與50年代的硬件聯繫在一起,而是應該把它與快速排序(Quicksort)算法進行類比。這種算法是1960年提出的,至今仍然是最快的通用排序方法。


直到今天,最高級的主流語言,也只是剛剛接近Lisp的水平。雖然已經很接近了,但還是沒有Lisp那樣強大。


Lisp語言誕生的時候,就包含了9種新思想。其中一些我們今天已經習以爲常,另一些則剛剛在其他高級語言中出現,至今還有2種是Lisp獨有的。按照被大衆接受的程度,這9種思想依次是:


  1. 條件結構(即"if-then-else"結構)。現在大家都覺得這是理所當然的,但是Fortran I就沒有這個結構,它只有基於底層機器指令的goto結構。

  2. 函數也是一種數據類型。在Lisp語言中,函數與整數或字符串一樣,也屬於數據類型的一種。它有自己的字面表示形式(literal representation),能夠儲存在變量中,也能當作參數傳遞。一種數據類型應該有的功能,它都有。

  3. 遞歸。Lisp是第一種支持遞歸函數的高級語言。

  4. 變量的動態類型。在Lisp語言中,所有變量實際上都是指針,所指向的值有類型之分,而變量本身沒有。複製變量就相當於複製指針,而不是複製它們指向的數據。

  5. 垃圾回收機制

  6. 程序由表達式(expression)組成。Lisp程序是一些表達式區塊的集合,每個表達式都返回一個值。這與Fortran和大多數後來的語言都截然不同,它們的程序由表達式和語句(statement)組成。

  7. 符號(symbol)類型。符號實際上是一種指針,指向儲存在哈希表中的字符串。所以,比較兩個符號是否相等,只要看它們的指針是否一樣就行了,不用逐個字符地比較。

  8. 代碼使用符號和常量組成的樹形表示法(notation)

  9. 論什麼時候,整個語言都是可用的。Lisp並不真正區分讀取期、編譯期和運行期。你可以在讀取期編譯或運行代碼;也可以在編譯期讀取或運行代碼;還可以在運行期讀取或者編譯代碼。

*******************************************


怎麼樣,是不是很有興趣瞭解一下如此強大的Lisp語言開發出來的Emacs是如何優美呢?


當然此文不可能帶大家領略所有Emacs的優美之處。說實話,Emacs肯定存在不足之處: 小編還是很識相的,不敢冒天下之大不韙。


更多Emacs的好處只有大家使用了才能慢慢領略。



Emacs簡介


Emacs是一種強大的文本編輯器,在程序員和其他以技術工作爲主的計算機用戶中廣受歡迎。


EMACS,即Editor MACroS(編輯器宏)的縮寫,最初由Richard Stallman(理查德·馬修·斯托曼)於1975年在MIT協同Guy Steele共同完成。

(Richard Stallman可是開源運動之父啊,這位可愛的長鬍子大叔抵制Apple,抵制Facebook,抵制Amazon,抵制不少公司和機構。他也是自由軟件基金會(Free Software Foundation,簡稱FSF)的主席,而自由軟件基金會主導了包括GNU在內的很多開源工程。GNU工程使得世界各地的程序員可以爲Linux操作系統開發周邊軟件等,纔有了Linux的今天。不然Linus Tovarlds(Linux之父)基本上光是寫了一個Linux內核,哪夠啊。所以今天的Linux最正確的稱謂應該是GNU/Linux )


自誕生以來,Emacs演化出了衆多分支,其中使用最廣泛的兩種分別是:1984年由Richard Stallman發起並由他維護至今的GNU Emacs,以及1991年發起的XEmacs。XEmacs是GNU Emacs的分支,至今仍保持着相當的兼容性。它們都使用了Emacs Lisp這種有着極強擴展性的編程語言,從而實現了包括編程、編譯乃至網絡瀏覽等等功能的擴展。


你可以使用Lisp語言改寫Emacs的功能組件,而且可以更改配置,完全自定義Emacs,所有Emacs是充滿無限可能的編輯器。


國際化

Emacs支持對多種文字的文本編輯,包括UTF-8在內的諸多編碼系統,加上對多種字符集、文稿、書寫系統,以及不同文化的書寫習慣都提供了支持,使得世界上大多數語言的使用者都能通過Emacs進行文本處理。Emacs還能通過調用諸如ispell這樣的外部程序,實現多種語言的拼寫檢查。


跨平臺性

Emacs是目前世界上最具可移植性的重要軟件之一,能夠在當前大多數操作系統上運行,包括類Unix系統(GNU/Linux、各種BSD、Solaris、AIX、IRIX、Mac OS X等等)、MS-DOS、Microsoft Windows以及OpenVMS等,還有移動Android平臺以及iOS。


緩衝區的概念

初學Emacs需要理解什麼是緩衝區:

Emacs裏的一切操作都發生在編輯緩衝區(buffer)裏,它通常是某個文件的工作副本。如果你正在編輯的編輯緩衝區裏包含着某個文件的一個副本,那麼當你保存自己所做的改動時,Emacs把編輯緩衝區的內容複製到文件中。 除了工作在文件副本上的緩衝區外,還有一些做臨時工作的緩衝區,它就像一張草稿紙,當然也可以隨時使用write-file命令("C-x C-w")或save-buffer命令(“C-x C-s”)保存這類臨時工作緩衝區的內容。


小編一開始也是對緩衝區的概念一知半解,不要怕,用着用着馬上就理解了。


可以參考一些高手的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的官網

http://www.gnu.org/software/emacs/


Emacs的中文WiKi

http://www.emacswiki.org/emacs?interface=zh-cn



輕鬆一下,關於Emacs的一則玩笑


《Emacs 的日子是這個樣子的》

1. 聽說有 Emacs 這個東西。試了一下,感覺就像記事本一樣。沒什麼學習曲線。就是……咋也找不到退出的辦法……

2. 開始會一些 Emacs 了,開始學習各種 mode,按鍵綁定,配置方法,開始熟悉 Emacs……

3. 比較熟悉 Emacs了,基本使用 Emacs幹活,每天“活在” Emacs 裏面……

4. 非常熟悉自己“常用”的 Emacs,可以教別人 Emacs,大量泡 Emacs社區,大量下載、使用和跟蹤別人的擴展,已經離不了 Emacs……

5. 漸漸不滿 Emacs,漸漸熟悉 Lisp 語言,開始改寫“自己”的Emacs,在這期間,又開始四處碰壁,工作效率總是被一個失敗的修改所影響……

6. 經常修改 Emacs,自己手中的 Emacs基本上每週都和上一週有那麼一點不太一樣…… 就是,改的太多了,經常在某天整理代碼的時候突然發現……原來還有這麼個易用的功能…… 忘記好久了……
7. …… ……



Emacs三個平臺的安裝與配置


1. Windows下安裝Emacs


請到以下鏈接下載Windows版的Emacs:


https://ftp.gnu.org/gnu/emacs/windows/


請大家下載列表中最新版本的zip文件,比如目前最新版的是2015年5月1日發佈的24.5版:


emacs-24.5-bin-i686-mingw32.zip




下載後,用Winrar或7-zip解壓,會出來一個文件夾 emacs-24.5-bin-i686-mingw32


內含四個子文件夾:


bin

libexec

share

var




打開bin文件夾,運行其中的 emacs.exe 文件即可開啓Emacs,不需要安裝:




你可以把emacs.exe這個文件鎖定到任務欄,就很方便了,按一下圖標就啓動了。


2. Linux下安裝Emacs


Debian一族(包括Ubuntu)下安裝Emacs:


sudo apt-get install emacs


Redhat一族(包括Fedora)下安裝Emacs:


sudo yum install emacs


其他的可以搜索如何安裝,或者下載Emacs的源代碼來編譯安裝。


下面演示Linux如何下載Emacs的代碼來編譯安裝(逼格最高的方式):


  1. 首先去

    ftp://ftp.gnu.org/pub/gnu/emacs


    上面有Emacs的幾乎所有版本的源代碼包,下載最新版的(用老版的也可以),如: emacs-24.5.tar.gz

  2. 解壓 emacs-24.5.tar.gz 並編譯,安裝,在終端(Terminal)中依次運行以下命令(如果是其他版本,則將如下命令中的24.5替換爲相應版本即可):

    tar -zxvf emacs-24.5.tar.gz (解壓文件)

    cd emacs-24.5 (進入目錄)

    ./configure (配置)

    make (編譯)

    sudo make install (安裝,會提示你輸入管理員密碼)


安裝完之後要啓動Emacs很簡單,開一個終端(Terminal),輸入emacs,回車,就可以了。不過小編嫌這樣太麻煩,可以用更簡單的方式來打開Emacs,我這裏用一個鍵就可以了(演示環境是Fedora 21,不過其他系統如Ubuntu類似):


  1. 打開Fedora的“設置” (肯定知道設置在哪裏吧)

  2. 選擇“鍵盤”

  3. 選擇列表中的“自定義快捷方式”,然後點擊加號“+”,用於添加新的快捷方式

  4. 選擇快捷方式的按鍵,小編這裏選的是F2這個鍵,然後填寫命令,就是“emacs”,再填寫快捷方式的名稱,這個隨便填,我填的是“Emacs”,確定



  5. 按F2鍵試試,是不是就啓動Emacs啦?這酸爽不言而喻!


3. Mac OS下安裝Emacs


Mac下安裝Emacs,網上有不少文章,有用Git弄下來Emacs的源碼然後編譯安裝的; 也有用一些包管理軟件來安裝的,但是小編推薦一個更方便的方式,和Mac下安裝QQ,迅雷那樣方便:


http://emacsformacosx.com/


上這個網,然後下載那個dmg包,Mac用戶肯定懂的,就是Mac下安裝軟件的最常用方式。然後就沒有然後了... 如果這樣你都不會裝Emacs,那真心沒必要用Emacs了...



自動補全插件


安裝完Emacs之後,還需要安裝一個自動補全(可以自動補全關鍵字,文本等)的擴展,非常強大,名叫company-mode,官網:


http://company-mode.github.io/


幸好,這個擴展並不需要我們按照傳統的方式從官網下載、安裝到Emacs裏面,因爲Emacs裏有個安裝擴展的列表,有點類似 Debian系列的 apt-get 和 Redhat系列的yum 這樣的包管理工具,所以我們只需要按步驟安裝:


  1. 按下 M-x 來調出命令輸入

  2. 輸入 list-packages,回車



  3. 在出現的列表裏,點擊 company

  4. 在右邊出現的新緩衝區裏點擊 Install(英文: 安裝)



  5. 點擊 Yes



  6. 開始感受自動補全的樂趣吧


用此方法(list-packages命令)也可以安裝很多其他的Emacs的插件(擴展),大家也看到列表裏有很多插件了吧,所以說Emacs都有點像一個小型的操作系統。



小編的Emacs配置文件


請點擊“閱讀原文”來下載小編打包好的壓縮文件(.rar格式),內含小編的 Emacs配置文件.emacs (前面有一個點的,不要忘啦)和三個有用的模塊,供 .emacs 文件調用。


當然大家可以從網上下載一些大牛的Emacs配置文件,看一下他們的Emacs快捷鍵(除了基本的一些通用快捷鍵以外,用戶可以自定義很多快捷鍵,可以定義在 .emacs 文件中)。


如果你“不幸”選擇使用小編的Emacs配置文件,那麼承蒙看得起:


  1. 請用小編的 .emacs 文件替換你的家目錄的.emacs文件 (安裝完Emacs,你的家目錄,也就是 ~ 下就會有一個 .emacs 文件)。

  2. 把壓縮文件裏的其他三個模塊文件放置到 .emacs.d 這個文件夾下的modules文件夾 (.emacs.d 文件夾是安裝完Emacs就會有的,也在家目錄裏,不過modules文件夾需要你自己創建):

    cd ~/.emacs.d/

    mkdir modules

    cp php-mode.el psvn.el saved-places modules/ (或者手動直接把三個模塊文件複製到modules文件夾裏)




常用快捷方式


Emacs的快捷鍵都是綁定於Ctrl和Alt(或稱Meta, 在Mac下就是Cmd鍵)上的,例如C-x就是Ctrl+x,M-x就是Alt+x (在Mac下就是Cmd鍵)。當然所有的按鍵都可以自定義。


所以下面我在講述快捷鍵的組合表示方式時:


  1. C 代表Ctrl鍵

  2. M 代表Alt鍵或者在蘋果的Mac系統下是Cmd鍵

  3. C-x C-c 代表着,先按C-x,再按C-c

  4. C-x k 代表着,先按C-x,鬆開手,再按k


小編平時最常用的是這些快捷鍵組合


  1. M-s : 新建一個buffer(緩衝區)

  2. C-x O : 注意是大寫的O,不是零,所以需要按住shift鍵再按o鍵。用於在緩衝區之間切換

  3. C-g : 取消當前操作

  4. C-x u : 回到上一步,相當於Undo

  5. C-x C-3 : 把緩衝區(buffer)分爲左右兩個,新的一個緩衝區是複製當前的緩衝區 (可以執行多次,來分割出很多小窗口)

  6. C-x C-2 : 把緩衝區(buffer)分爲上下兩個,新的一個緩衝區是複製當前的緩衝區 (可以執行多次,來分割出很多小窗口)

  7. M-w : 選中文字的情況是複製文字,而如果沒有選中文字則是複製當前的一行

  8. C-w : 選中文字的情況是剪切文字,而如果沒有選中文字則是剪切當前的一行

  9. M-x : 調出命令輸入,可以在後面接命令,比如man,svn-status,等

  10. C-y : 黏貼

  11. C-x C-s : 保存文本

  12. C-x C-f : 打開文件,如果文件不存在,則新建文件

  13. C-x C-v : 打開一個文件,取代當前緩衝區

  14. C-x k : 關閉當前緩衝區(buffer)

  15. C-s : 向前搜索

  16. C-r : 向後搜索

  17. C-x h : 全選

  18. C-v : 向下翻頁

  19. M-v : 向上翻頁

  20. C-f : 前進一個字符

  21. C-b : 後退一個字符

  22. M-f : 前進一個單詞

  23. M-b : 後退一個單詞

  24. C-@ : 標記開始區域

  25. C-a : 移到行首

  26. C-e : 移到行尾

  27. M-a : 移到句首

  28. M-e : 移到句尾

  29. M-< : 緩衝區頭部

  30. M-> : 緩衝區尾部

  31. M-g M-g,再輸入數字 : 跳轉到文本的第幾行

  32. C-x 0 : 關閉當前緩衝區

  33. C-x C-c : 退出Emacs

  34. 暫時只能記起來這麼多啦,還有很多快捷鍵就要你自己去發掘啦!小編平時也不會所有的快捷鍵都用上,上述的快捷鍵組合是最常用的。


注意: 千萬不要死記這些快捷鍵組合,隨着你使用Emacs,很快就能記住的,相信我!


Emacs還有一個很大的好處就是幾乎所有的快捷鍵按鍵都在鍵盤的左下角,用左手就能單獨完成大部分操作,而右手則可以玩遊戲(哦,不對,是操作鼠標),提高效率。或者說,你用好了Emacs的快捷鍵組合,編輯代碼時甚至不需要鼠標啦,兩個手在鍵盤上就夠了!



還有一個平時常用的功能就是查詢函數,可以方便查詢已定義的函數:


  1. 按下 M-x 來調出命令輸入

  2. 輸入 man ,也就是Linux或Unix系統的man命令,是manuall的縮寫,也就是"手冊"的意思

  3. 然後輸入你要查詢的函數名,回車

  4. 就出來啦,比如小編查詢fprintf函數,就會彈出下圖右邊的緩衝區:





給出小編的 .emacs 配置文件的內容吧,免得萬一下載鏈接失效了(至於那三個模塊,可以在網上找到下載的: 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 "//")
'(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 )配合使用,超級方便,比如你修改了幾個文件,那麼在包含 .svn 這個文件的那個文件夾裏按下: M-x,然後輸入: svn-status,回車,確認,就會顯示一個列表啦,就是SVN的svn status命令所顯示的狀態列表。




然後,選中你要提交的文件,按 m 鍵,你可以一次選中好幾個,取消選中按 u 鍵。

c 鍵開始編輯提交註釋(Comment),如下圖(綠色的是已經選中(按 m 鍵)要提交的文件):




我這裏輸入了“修改了幫助文檔”這一句註釋,完成之後,按兩次 “C-c”,就提交(commit)好了,非常快捷。


不知道SVN是什麼的讀者,可以百度一下,SVN是一個常用的版本控制軟件。其他的更先進的版本控制系統有Git, Mercurial等。目前所在公司不大,所以用SVN(集中式版本控制系統)也方便,之前在其他公司用過Git和Mercurial(這兩個是分佈式版本控 制系統)。



嘗試一下Emacs吧,真的是“神器”!

誰用誰知道,用過都說好~



程序員聯盟社區

目前有一個微信羣和一個QQ羣(微信羣130人以上,QQ羣460人以上),凡是對編程感興趣的朋友都可以加,大家可以交流,學習,互動,討論編寫的程序的源代碼,編程問答等。


微信羣(程序員聯盟),加羣請私信我(微信羣人數超過100之後,不能通過掃描二維碼加入了,只能私信我,謝謝)


QQ羣(程序員聯盟),羣號是 413981577


百度貼吧 【程序員聯盟】 歡迎您加入,交流編程,討論代碼,共享資源,已經有很多話題。吧主就是小編。

http://tieba.baidu.com/f?kw=%E7%A8%8B%E5%BA%8F%E5%91%98%E8%81%94%E7%9B%9F&ie=utf-8

點擊左下角【閱讀原文】即可進入 【程序員聯盟】 百度貼吧


手機微信裏的二維碼圖片如何“掃描”呢?
小竅門:
在微信里長按圖片,選擇“識別圖中二維碼”,就可以了。


QQ羣文件裏有很多編程書籍PDF和其他資料。掃描下面二維碼加QQ羣:




我們還建立了一個公共的百度雲盤,2TB容量,已有很多優秀編程資源,大家也可以上傳。鏈接加羣之後會發送。


《程序員聯盟》的微社區,方便大家提問和互動。可以關注一下。

微社區地址和二維碼如下:

http://m.wsq.qq.com/264152148


謝謝!




程序員聯盟 微信公衆號 *您若覺得本文不錯,點擊畫面右上角《···》按鈕“分享到朋友圈或“發送給朋友

*新朋友請關注「程序員聯盟」微信搜公衆號 ProgrammerLeague

小編微信號frogoscar

小編QQ號: 379641629

小編郵箱[email protected]

程序員聯盟QQ羣:413981577

程序員聯盟微信羣:先加我微信


有朋友反映看手機端的文章太累,其實是可以用瀏覽器網頁來看的:

方法1. 點擊畫面右上角的《···》按鈕,然後選擇“複製鏈接”,再把鏈接黏貼到你的瀏覽器裏面或用郵件發送給自己,就可以在電腦的瀏覽器裏打開了



方法2. 頭條網www.toutiao.com,搜索我的自媒體“程序員聯盟”,內有所有文章,也可以直接進這個鏈接:http://www.toutiao.com/m3750422747/


方法3. 我的51CTO博客,CSDN博客和博客園鏈接(所有文章都在上面)
http://4526621.blog.51cto.com

http://blog.csdn.net/frogoscar

www.cnblogs.com/frogoscar


如何查看所有文章

點擊“查看公衆號”,再點擊“查看歷史消息





點擊下方 閱讀原文 查看 Emacs配置文件和三個模塊的壓縮文件 (小編的百度雲盤下載)
↓↓↓

本文分享自微信公衆號 - 程序員聯盟(coderhub)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章