作者 謝恩銘,公眾號「程序員聯(lián)盟」(微信號:coderhub)训枢。
轉(zhuǎn)載請注明出處托修。
原文:http://www.reibang.com/p/732157b02ecc
Emacs,最強編輯器恒界,沒有之一
小編知道睦刃,此標題一出,肯定會遭受廣大群眾“詬病”仗处,說不好還會被其他編輯器的粉絲暗地里“干掉”眯勾。
比如,Vim婆誓,Sublime吃环,Nano編輯器的粉絲可能就會來“踢館”,VS或Eclipse的粉絲也興許會“群起而攻”洋幻,但是小編只是表達一下自己的感受郁轻,為了效果也只能夸大一下了。
所以請拍磚的時候輕一點文留,雞蛋少扔幾個好唯。如果扔的雞蛋多也請多扔幾個番茄過來,再來幾根蔥燥翅,這樣我可以做番茄炒蛋骑篙,謝謝。
有種張無忌在光明頂被6大門派“圍剿”的架勢...
對于很多人來說森书,使用Vim和Emacs靶端,不僅是提升“逼格”的方式谎势,更是上升到“信仰”的層面,夸張吧杨名。當然這和宗教信仰不一樣脏榆,只是一種可愛的“偏執(zhí)”而已。
請參看我的 Linux探索之旅 | 第五部分第一課:Vim豈是池中物台谍,寶劍鋒從磨礪出须喂。
不過,Emacs實在能做很多事趁蕊,不要認為它只是一個文本編輯器坞生,它可以說是一個整合環(huán)境,或可稱它為“集成開發(fā)環(huán)境”介衔,它還可以做以下事情:
- 上網(wǎng)恨胚,瀏覽網(wǎng)頁
- 看視頻
- 收發(fā)郵件
- 調(diào)試程序,結合GDB炎咖,EDebug等赃泡。支持C/C++,Perl乘盼,Python升熊,Lisp等等
- 玩游戲
- 計算器
- 記日記
- 管理日程,Task绸栅,ToDo级野,約會等
- 個人信息管理
- 目錄管理
- 文件比較
- 閱讀info和man文檔
- 等等
當然了,這里主要將Emacs作為文本編輯器來介紹粹胯。
如果你要做特定開發(fā)蓖柔,那還是用業(yè)界知名的IDE(集成開發(fā)環(huán)境)更加有效率。
例如開發(fā)Android應用风纠,那必須得上Android Studio(你不要跟我說你還在用Google已經(jīng)不發(fā)布支持更新的Eclipse)况鸣;開發(fā)iOS應用,必須得上Xcode竹观。
如果你用Emacs來開發(fā)這些應用镐捧,那效率太低了。
小編以前在Linux下編寫代碼是使用Vim編輯器的臭增,也極為強大懂酱。但是自從2014年接觸到Emacs之后,就愛上了Emacs(fall in love with Emacs)誊抛,Vim雖然有時還會用到(目前的公司的開發(fā)組大家基本都是用Vim列牺,我也沒辦法只好用Vim,以方便和大家交流拗窃、演示)瞎领,但其實我還是比較喜歡Emacs蔓榄。
一開始我不知道為什么Emacs如此優(yōu)美又強大,直到后來閱讀了《黑客與畫家》這部經(jīng)典著作(硅谷創(chuàng)業(yè)教父 Paul Graham 保羅?格雷厄姆所寫默刚,其實也就是他的一些日志匯編而成),里面講述了Lisp語言的強大和優(yōu)美逃魄,而Emacs就是用Lisp語言編寫的荤西,怪不得。
閑扯一下為什么Lisp語言如此強大伍俘,雖然這門語言很老了(1958年被發(fā)明)邪锌,在2015年6月的TIOBE編程語言排行榜也只有第31位,但是:
摘錄自 阮一峰 翻譯的《黑客與畫家》一書癌瘾,推薦大家一讀:
如果我們把流行的編程語言觅丰,以這樣的順序排列:Java、Perl妨退、Python妇萄、Ruby。你會發(fā)現(xiàn)咬荷,排在越后面的語言冠句,越像Lisp。
Python模仿Lisp拍棕,甚至把許多Lisp黑客認為屬于設計錯誤的功能薛闪,也一起模仿了懈息。至于Ruby,如果回到1975年聚唐,你聲稱它是一種Lisp方言,沒有人會反對腔召。
編程語言現(xiàn)在的發(fā)展杆查,不過剛剛趕上1958年Lisp語言的水平。
1958年宴咧,John McCarthy設計了Lisp語言根灯。我認為,當前最新潮的編程語言掺栅,只是實現(xiàn)了他在1958年的設想而已烙肺。
這怎么可能呢?計算機技術的發(fā)展氧卧,不是日新月異嗎桃笙?
1958年的技術,怎么可能超過今天的水平呢沙绝? 讓我告訴你原因搏明。 這是因為John McCarthy本來沒打算把Lisp設計成編程語言鼠锈,至少不是我們現(xiàn)在意義上的編程語言。他的原意只是想做一種理論演算星著,用更簡潔的方式定義圖靈機购笆。
所以,為什么上個世紀50年代的編程語言虚循,到現(xiàn)在還沒有過時同欠?簡單說,因為這種語言本質(zhì)上不是一種技術横缔,而是數(shù)學铺遂。數(shù)學是不會過時的。
你不應該把Lisp語言與50年代的硬件聯(lián)系在一起茎刚,而是應該把它與快速排序(Quicksort)算法進行類比襟锐。這種算法是1960年提出的,至今仍然是最快的通用排序方法膛锭。
直到今天粮坞,最高級的主流語言,也只是剛剛接近Lisp的水平泉沾。雖然已經(jīng)很接近了捞蚂,但還是沒有Lisp那樣強大。
Lisp語言誕生的時候跷究,就包含了9種新思想姓迅。其中一些我們今天已經(jīng)習以為常,另一些則剛剛在其他高級語言中出現(xiàn)俊马,至今還有2種是Lisp獨有的丁存。
按照被大眾接受的程度,這9種思想依次是:
條件結構(即"if-then-else"結構)〔裎遥現(xiàn)在大家都覺得這是理所當然的解寝,但是Fortran I就沒有這個結構,它只有基于底層機器指令的goto結構艘儒。
函數(shù)也是一種數(shù)據(jù)類型聋伦。在Lisp語言中,函數(shù)與整數(shù)或字符串一樣界睁,也屬于數(shù)據(jù)類型的一種觉增。它有自己的字面表示形式(literal representation),能夠儲存在變量中翻斟,也能當作參數(shù)傳遞逾礁。一種數(shù)據(jù)類型應該有的功能,它都有访惜。
遞歸嘹履。Lisp是第一種支持遞歸函數(shù)的高級語言腻扇。
變量的動態(tài)類型。在Lisp語言中砾嫉,所有變量實際上都是指針幼苛,所指向的值有類型之分,而變量本身沒有焕刮。復制變量就相當于復制指針蚓峦,而不是復制它們指向的數(shù)據(jù)。
垃圾回收機制济锄。
程序由表達式(expression)組成。Lisp程序是一些表達式區(qū)塊的集合霍转,每個表達式都返回一個值荐绝。這與Fortran和大多數(shù)后來的語言都截然不同,它們的程序由表達式和語句(statement)組成避消。
符號(symbol)類型低滩。符號實際上是一種指針,指向儲存在哈希表中的字符串岩喷。所以恕沫,比較兩個符號是否相等,只要看它們的指針是否一樣就行了纱意,不用逐個字符地比較婶溯。
代碼使用符號和常量組成的樹形表示法(notation)。
無論什么時候偷霉,整個語言都是可用的迄委。Lisp并不真正區(qū)分讀取期、編譯期和運行期类少。你可以在讀取期編譯或運行代碼叙身;也可以在編譯期讀取或運行代碼;還可以在運行期讀取或者編譯代碼硫狞。
怎么樣信轿,是不是很有興趣了解一下如此強大的Lisp語言開發(fā)出來的Emacs是如何優(yōu)美呢?
當然此文不可能帶大家領略所有Emacs的優(yōu)美之處残吩。說實話财忽,Emacs肯定存在不足之處: 小編還是很“識相”的,不敢“冒天下之大不韙”世剖。
更多Emacs的好處只有大家使用了才能慢慢領略定罢。
Emacs簡介
Emacs是一種強大的文本編輯器,在程序員和其他以技術工作為主的計算機用戶中廣受歡迎旁瘫。
EMACS祖凫,即Editor MACroS(編輯器宏)的縮寫琼蚯,最初由Richard Stallman(理查德·斯托曼)于1975年在MIT(麻省理工學院)協(xié)同Guy Steele共同完成。
Richard Stallman可是開源運動之父啊惠况,我的Linux探索之旅 | 開宗明義+第一部分第一課:什么是Linux遭庶?這一課專門介紹過他。
這位可愛的長胡子大叔抵制Apple稠屠,抵制Facebook峦睡,抵制Amazon,抵制不少公司和機構权埠。他也是自由軟件基金會(Free Software Foundation榨了,簡稱FSF)的主席,而自由軟件基金會主導了包括GNU在內(nèi)的很多開源工程攘蔽。
GNU工程使得世界各地的程序員可以為Linux操作系統(tǒng)開發(fā)周邊軟件等龙屉,才有了Linux的今天。不然Linus Tovarlds(Linux之父)基本上光是寫了一個Linux內(nèi)核满俗,哪夠啊转捕。所以今天的Linux最正確的稱謂應該是GNU/Linux 。
自誕生以來唆垃,Emacs演化出了眾多分支五芝,其中使用最廣泛的兩種分別是:1984年由Richard Stallman發(fā)起并由他維護至今的GNU Emacs,以及1991年發(fā)起的XEmacs辕万。XEmacs是GNU Emacs的分支枢步,至今仍保持著相當?shù)募嫒菪浴K鼈兌际褂昧薊macs Lisp這種有著極強擴展性的編程語言渐尿,從而實現(xiàn)了包括編程价捧、編譯乃至網(wǎng)絡瀏覽等等功能的擴展。
你可以使用Lisp語言改寫Emacs的功能組件涡戳,而且可以更改配置结蟋,完全自定義Emacs,所以Emacs是充滿無限可能的編輯器渔彰。
國際化
Emacs支持對多種文字的文本編輯嵌屎,包括UTF-8在內(nèi)的諸多編碼系統(tǒng),加上對多種字符集恍涂、文稿宝惰、書寫系統(tǒng),以及不同文化的書寫習慣都提供了支持再沧,使得世界上大多數(shù)語言的使用者都能通過Emacs進行文本處理尼夺。
Emacs還能通過調(diào)用諸如ispell這樣的外部程序,實現(xiàn)多種語言的拼寫檢查。
跨平臺性
Emacs是目前世界上最具可移植性的重要軟件之一淤堵,能夠在當前大多數(shù)操作系統(tǒng)上運行寝衫,包括類Unix系統(tǒng)(GNU/Linux、各種BSD拐邪、Solaris慰毅、AIX、IRIX扎阶、Mac OS X等等)汹胃、MS-DOS、Microsoft Windows以及OpenVMS等东臀,還有移動Android平臺以及iOS着饥。
緩沖區(qū)的概念
初學Emacs需要理解什么是 緩沖區(qū):
Emacs里的一切操作都發(fā)生在編輯緩沖區(qū)(buffer)里,它通常是某個文件的工作副本惰赋。如果你正在編輯的編輯緩沖區(qū)里包含著某個文件的一個副本贱勃,那么當你保存自己所做的改動時,Emacs把編輯緩沖區(qū)的內(nèi)容復制到文件中谤逼。
除了工作在文件副本上的緩沖區(qū)外,還有一些做臨時工作的緩沖區(qū)仇穗,它就像一張草稿紙流部,當然也可以隨時使用write-file命令("C-x C-w")或save-buffer命令(“C-x C-s”)保存這類臨時工作緩沖區(qū)的內(nèi)容。
小編一開始也是對緩沖區(qū)的概念一知半解纹坐,不要怕枝冀,用著用著馬上就理解了。
可以參考一些高手的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)和Wiki
http://www.gnu.org/software/emacs/
目前最新版是Emacs 25.1
Emacs的中文WiKi:
http://www.emacswiki.org/emacs?interface=zh-cn
輕松一下耘子,關于Emacs的一則玩笑
《Emacs 的日子是這個樣子的》:
- 聽說有 Emacs 這個東西果漾。試了一下,感覺就像記事本一樣谷誓。沒什么學習曲線绒障。就是……咋也找不到退出的辦法……
- 開始會一些 Emacs 了,開始學習各種 mode捍歪,按鍵綁定户辱,配置方法,開始熟悉 Emacs……
- 比較熟悉 Emacs了糙臼,基本使用 Emacs干活庐镐,每天“活在” Emacs 里面……
- 非常熟悉自己“常用”的 Emacs,可以教別人 Emacs变逃,大量泡 Emacs社區(qū)必逆,大量下載、使用和跟蹤別人的擴展,已經(jīng)離不了 Emacs……
- 漸漸不滿 Emacs名眉,漸漸熟悉 Lisp 語言粟矿,開始改寫“自己”的Emacs,在這期間璧针,又開始四處碰壁嚷炉,工作效率總是被一個失敗的修改所影響……
- 經(jīng)常修改 Emacs,自己手中的 Emacs基本上每周都和上一周有那么一點不太一樣…… 就是探橱,改的太多了申屹,經(jīng)常在某天整理代碼的時候突然發(fā)現(xiàn)……原來還有這么個易用的功能…… 忘記好久了……
- …… ……
Emacs三個平臺的安裝與配置
1. Windows下安裝Emacs
請到以下鏈接下載Windows版的Emacs:
https://ftp.gnu.org/gnu/emacs/windows/
請大家下載列表中最新版本的zip文件,比如目前最新版的是2016年9月18日發(fā)布的25.1版:
emacs-25.1-x86_64-w64-mingw32.zip
下載后隧膏,用Winrar或7-zip等解壓哗讥,會出來一個文件夾 emacs-25.1-x86_64-w64-mingw32
內(nèi)含四個子文件夾:
- 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的代碼來編譯安裝(“逼格”最高的方式):
- 首先去
ftp://ftp.gnu.org/pub/gnu/emacs
上面有Emacs的幾乎所有版本的源代碼包派桩,下載最新版的(用老版的也可以)构诚,如: emacs-25.1.tar.gz
解壓 emacs-25.1.tar.gz 并編譯,安裝铆惑,在終端(Terminal)中依次運行以下命令(如果是其他版本范嘱,則將如下命令中的25.1替換為相應版本即可):
tar -zxvf emacs-25.1.tar.gz #(解壓文件)
cd emacs-25.1 #(進入目錄)
./configure #(配置)
make #(編譯)
sudo make install #(安裝,會提示輸入你的用戶密碼)
- 安裝完之后要啟動Emacs很簡單员魏,開一個終端(Terminal)丑蛤,輸入emacs,回車撕阎,就可以了受裹。
不過小編嫌這樣太麻煩,可以用更簡單的方式來打開Emacs虏束,我這里用一個鍵就可以了(演示環(huán)境是Fedora名斟,不過其他系統(tǒng)如Ubuntu類似):
打開Fedora的“設置” (肯定知道設置在哪里吧)
選擇“鍵盤”
選擇列表中的“自定義快捷方式”,然后點擊加號“+”魄眉,用于添加新的快捷方式
選擇快捷方式的按鍵砰盐,小編這里選的是F2這個鍵,然后填寫命令坑律,就是“emacs”岩梳,再填寫快捷方式的名稱囊骤,這個隨便填,我填的是“Emacs”冀值,確定也物。
按F2鍵試試,是不是就啟動Emacs啦列疗?這酸爽滑蚯,不言而喻!
3. Mac OS下安裝Emacs
Mac下安裝Emacs抵栈,網(wǎng)上有不少文章告材,有用Git克隆下來Emacs的源碼然后編譯安裝的; 也有用一些包管理軟件來安裝的古劲,但是小編推薦一個更方便的方式斥赋,和Mac下安裝QQ,迅雷那樣方便:
上這個網(wǎng)产艾,然后下載那個dmg包疤剑,Mac用戶肯定懂的,就是Mac下安裝軟件的最常用方式闷堡。然后就沒有然后了... 如果這樣你都不會裝Emacs隘膘,那真心沒必要用Emacs了。
自動補全插件
安裝完Emacs之后杠览,還需要安裝一個自動補全(可以自動補全關鍵字弯菊,文本等)的擴展,非常強大倦零,名叫company-mode,官網(wǎng):
http://company-mode.github.io/
幸好吨悍,這個擴展并不需要我們按照傳統(tǒng)的方式從官網(wǎng)下載扫茅、安裝到Emacs里面,因為Emacs里有個安裝擴展的列表育瓜,有點類似 Debian系列的 apt-get 和 Redhat系列的yum 這樣的包管理工具葫隙,所以我們只需要按步驟安裝:
按下 M-x 來調(diào)出命令輸入 (在Windows下就是Alt + x 鍵)
輸入 list-packages,回車
在出現(xiàn)的列表里躏仇,點擊 company
在右邊出現(xiàn)的新緩沖區(qū)里點擊 Install(英語“安裝”的意思)
- 點擊 Yes/是
開始感受自動補全的樂趣吧恋脚!
用此方法(list-packages命令)也可以安裝很多其他的Emacs的插件(擴展),大家也看到列表里有很多插件了吧焰手,所以說Emacs都有點像一個小型的操作系統(tǒng)糟描。
小編的Emacs配置文件
大家可以從網(wǎng)上下載一些大牛的Emacs配置文件,看一下他們的Emacs快捷鍵(除了基本的一些通用快捷鍵以外书妻,用戶可以自定義很多快捷鍵船响,可以定義在 .emacs 文件中)。
如果你“不幸”選擇使用小編的Emacs配置文件,那么承蒙看得起(當然见间,你可以把我的配置文件作為參考聊闯,取其精華,去其糟粕(不過估計精華有點少米诉,糟粕比較多...)菱蔬,“調(diào)配”出屬于你自己的Emacs配置):
下面講的是在Linux或Mac OS下的配置操作:
請用小編的 .emacs 文件替換你的家目錄的.emacs文件 (安裝完Emacs,你的家目錄史侣,也就是 ~ 下就會有一個 .emacs 文件(默認是隱藏文件))拴泌。
把壓縮文件里的其他三個模塊文件放置到 .emacs.d 這個文件夾下的modules文件夾 (.emacs.d 文件夾是安裝完Emacs就會有的,也在家目錄里抵窒,不過modules文件夾需要你自己創(chuàng)建):
cd ~/.emacs.d/
mkdir modules
cp php-mode.el psvn.el saved-places modules/ #(或者手動直接把三個模塊文件復制到modules文件夾里)
我的Emacs配置和說明在Github上
https://github.com/frogoscar/emacs
其中配置文件的內(nèi)容是:
https://github.com/frogoscar/emacs/blob/master/.emacs
三個模塊:
https://github.com/frogoscar/emacs/tree/master/modules
常用快捷方式
Emacs的快捷鍵都是綁定于Ctrl和Alt(或稱Meta弛针, 在Mac下就是Cmd鍵)上的,例如C-x就是Ctrl+x李皇,M-x就是Alt+x (在Mac下就是Cmd鍵)削茁。當然所有的按鍵都可以自定義。
所以下面我在講述快捷鍵的組合表示方式時:
C 代表Ctrl鍵
M 代表Alt鍵(在蘋果的Mac OS系統(tǒng)下是Cmd鍵)
C-x C-c 代表著“先按C-x掉房,再按C-c”
C-x k 代表著“先按C-x茧跋,松開手,再按k”
小編平時最常用的是這些快捷鍵組合
M-s : 新建一個buffer(緩沖區(qū))
C-x O : 注意是大寫的O卓囚,不是零瘾杭,所以需要按住shift鍵再按o鍵。用于在緩沖區(qū)之間切換
C-g : 取消當前操作
C-x u : 回到上一步哪亿,相當于Undo
C-x 3 : 把緩沖區(qū)(buffer)分為左右兩個粥烁,新的一個緩沖區(qū)是復制當前的緩沖區(qū) (可以執(zhí)行多次,來分割出很多小窗口)
C-x 2 : 把緩沖區(qū)(buffer)分為上下兩個蝇棉,新的一個緩沖區(qū)是復制當前的緩沖區(qū) (可以執(zhí)行多次讨阻,來分割出很多小窗口)
M-w : 選中文字的情況是復制文字,而如果沒有選中文字則是復制當前的一行
C-w : 選中文字的情況是剪切文字篡殷,而如果沒有選中文字則是剪切當前的一行
M-x : 調(diào)出命令輸入钝吮,可以在后面接命令,比如man板辽,svn-status奇瘦,等
C-y : 黏貼
C-x C-s : 保存文本
C-x C-f : 打開文件,如果文件不存在劲弦,則新建文件
C-x C-v : 打開一個文件耳标,取代當前緩沖區(qū)
C-x k : 關閉當前緩沖區(qū)(buffer)
C-s : 向前搜索
C-r : 向后搜索
C-x h : 全選
C-v : 向下翻頁
M-v : 向上翻頁
C-f : 前進一個字符
C-b : 后退一個字符
M-f : 前進一個單詞
M-b : 后退一個單詞
C-@ : 標記開始區(qū)域
C-a : 移到行首
C-e : 移到行尾
M-a : 移到句首
M-e : 移到句尾
M-< : 緩沖區(qū)頭部
M-> : 緩沖區(qū)尾部
M-g M-g,再輸入數(shù)字 : 跳轉(zhuǎn)到文本的第幾行
C-x 0 : 關閉當前緩沖區(qū)
C-x C-c : 退出Emacs
暫時只能記起來這么多啦邑跪,還有很多快捷鍵就要你自己去發(fā)掘啦麻捻!小編平時也不會所有的快捷鍵都用上纲仍,上述的快捷鍵組合是最常用的。
注意: 千萬不要死記這些快捷鍵組合贸毕,隨著你使用Emacs郑叠,很快就能記住的,相信我明棍!
Emacs還有一個很大的好處就是幾乎所有的快捷鍵按鍵都在鍵盤的左下角乡革,用左手就能單獨完成大部分操作,而右手則可以玩游戲(哦摊腋,不對沸版,是操作鼠標),提高效率兴蒸。
或者說视粮,你用好了Emacs的快捷鍵組合,編輯代碼時甚至不需要鼠標橙凳,兩個手在鍵盤上就夠了蕾殴!
還有一個平時常用的功能就是查詢函數(shù),可以方便查詢已定義的函數(shù):
按下 M-x 來調(diào)出命令輸入
輸入 man 岛啸,也就是Linux或Unix系統(tǒng)的man命令钓觉,是manuall的縮寫,也就是"手冊"的意思
然后輸入你要查詢的函數(shù)名坚踩,回車
嘗試一下Emacs吧荡灾,真的是“神器”!
誰用誰知道瞬铸,用過都說好~
我是 謝恩銘批幌,公眾號「程序員聯(lián)盟」(微信號:coderhub)運營者,慕課網(wǎng)精英講師 Oscar 老師嗓节,終生學習者荧缘。
熱愛生活,喜歡游泳赦政,略懂烹飪胜宇。
人生格言:「向著標桿直跑」