做者: 陳斌(redguardtoo)javascript
版本號: 20160125html
更新時間: 前端
原創時間: java
版權: 本文采用如下協議進行受權,自由轉載 - 非商用 - 非衍生 - 保持署名 | Creative Commons BY-NC-ND 3.0,轉載請註明做者及出處.node
成爲高手很容易.當初我在Vi陣營,偶爾用Emacs還忘記"退出"的快捷鍵,一年後我跨入高手行列.git
不少文章強調Emacs有多牛,但關於"如何作"則語焉不詳.即便涉及到"如何作",談細節多而方法論少,因此本文就 側重方法論.程序員
全文結構以下:github
簡單談談,因重點是"怎麼作",不是"爲何".web
一旦嘗過最好的,你天然瞭解好的編輯器應該有哪些功能.算法
好比一個內嵌的插件管理器是最基本的.
以下載了第三方插件,若是發覺其有問題,能夠在不碰該插件原始代碼的狀況下修復.
插件服務器關閉了,應能夠在自帶的U盤上快速創建鏡像.
目前流行的編輯器如Sublime Text還作不到以上幾點.
Emacs 用 Lisp 開發,Lisp 不一樣尋常的語法決定了其開發者都是資深開發者,掌握了多門語言.
Lisp 並不能給你帶來任何好處,因此其社區成員都是純粹的技術愛好者,投機取巧的功利主義者對其沒有興趣.
IDE針對特定語言或框架優化,而Emacs完成通用任務更有效.
例如,我碰到難題,須要上IRC請教國外高手(工做流是,粘貼代碼到http://gist.github.com, 在irc提問,看網頁,將解決方案粘貼回來),Emacs 集成了IRC工具和瀏覽器 (例如),操做就很方便.
我使用 Visual Studio 多年,Firefox 也是高手,相信我,大多數狀況下 Emacs 更快.
口說無憑,請看高手操做的 youtube 視頻, Emacs Power: Can your editor do THIS!
順便說一下,不少初學者關心的代碼自動完成,幾門主流語言支持都不錯(包括Java).
我的開發者會喪失興趣,公司會倒閉.但自由軟件基金會將一直存在下去.
Emacs做爲其招牌軟件也會維護下去,個人投資永不會貶值.
軟件開源,配置是純文本,且資源消耗小,安裝包很小 (命令行版本 30M 左右),任何環境下均可用.
這在大項目中特別有益,例如,某項目需同時編輯 Perl, Java,C, Bash, SQL, 要編輯遠程服務器上的代碼,網速不快. Emacs的優點就體現出來了.
重要的是頭腦開放,不先入爲主.
新手的問題是,根據以前習慣 盲目 設定了入門必知.有些必知還很費時間.
以我爲例,
也要避免門戶之見,好比用了Emacs就排斥Vim的快捷鍵.好比必定要Helm和Ido中二選一(我是同時用的).治療就是重讀武俠小說"笑傲江湖".
開始前,解釋一下後文用到的命名慣例,
建議,
這步的目的是:
按如下步驟閱讀教程:
僅需半小時.關於Emacs多難學的謬論能夠休矣.半小時的代價微不足道.想一想你去練了多少個半小時吧.
即便你不打算使用Emacs默認的快捷鍵,這步也是必須的,不要跳過!
最起碼要知道如下命令,
關鍵在於理性地考慮你最迫切須要解決的一個問題.
以這個問題做爲出發點,除此以外均可以妥協.
雖然Emacs無所不能,可是飯也要一口一口吃.有時候退一步進兩步.
例如,我一直覺得Emacs的中文顯示很完美,因此搞不懂爲何有人會在字體配置上花那麼多時間.在陸續接到反饋後,我才明白原來是由於我一直在終端下使用Emacs,終端軟件能夠完美顯示中文字體,因此就沒Emacs什麼事了.須要配置字體的人用的是圖形界面Emacs.
當初只在終端下使用Emacs是由於需鏈接到遠程服務器.我認爲這是重點.甚至爲此放棄了漂亮的配色主題(後來發覺此犧牲毫無必要).
因禍得福,由此也避免了圖形界面版本的全部問題.
這方面我是個負面榜樣.剛開始抱着玩的心態,處處找有趣的配置粘貼到個人配置中去.
這是浪費時間!
我應一開始就照抄世界級大師 Steve Purcell的Emacs 配置.
警告,Purcell 總愛試用最新的 Web 開發的新技術,對他而言穩定性不是第一位的,若是你有熱情和能力,願意一塊兒折騰,那麼水平會提升很快.
這個若是是很重要的前提,當我上了Purcell的船時,我已有10年開發經驗,精通多種語言.
如你不肯折騰,那至少不要重複個人錯誤,不要質疑,不要創新,跟着高手作.直說了把,你是初學者,開始階段應以模仿爲主.這點怎麼強調也不過度!
爲了加深印象,讓我再舉一例.有人向我反映,Emacs 快捷鍵太多,背起來壓力很大.個人建議是,拿高手配置來用,而不是強加給本身背快捷鍵這樣無聊的任務.你會發覺高手已安裝了名爲smex 的插件,使直接輸入命令比快捷鍵還快.
若是你還未信服,請再考慮一下個人理由:
好吧,你如今信服了.可是你是否 真正理解 了?
好比你是否立刻推論到:即便不用高手的配置,也可在github上訂閱(watch)高手配置,其更新通知等價於免費的維護服務.
像武俠小說那樣拜高手爲師是白日作夢.惟一能讓高手指點的辦法是先付出.最可靠的付出就是報bug.
我就是這樣學到一些高級Lisp技巧的.
不要有報bug低級的想法.不少高手都是樂於且善於報bug.卻是菜鳥喜歡從新發明輪子.
幫助高手,你的起點就高,還有獲得指點的好處.
前提是起點高,要在高手已有工做上改善.即便是微小的改善,若是堅持一段時間,就是巨大的進步了,你就能夠在這一點上笑傲江湖.
再找出另外一高手須要改善的地方,使用一樣的方法.
例如,默認在Emacs中移動子窗口焦點不是很方便.需按"C-x O"屢次.我找到了emacs插件switch-window,只要按"C-x O"一次,會有提示子窗口編號,接下來只要輸入編號就能夠了.但還有改善空間,我又找到了window-number.el,只要按"M-NUM"就能夠了.
window-number.el已完美,但Alt鍵仍是有點慢,我結合evil和evil-leader,能夠按逗號和數字飛速切換子窗口了.
最重要的是專注.
例如,Quora.com上有不少有趣的話題.請剋制興趣,不去定閱和Emacs無關的話題.
Reddit是最好的.優勢是一直能訪問.
Google Plus 貼子質量高.例如,我加入了 Linkedin和Facebook的Emacs論壇,目前都退出了.不是它們不專業,只是Google Plus討論技術層次較高.
目前人氣不如reddit,緣由在於Google.
GitHub 的版本控制服務很好.如今它的社區化傾向愈來愈強了,我喜歡.
例如,能夠看一下 https://github.com/search?p=1&q=stars:>20+extension:el+language:elisp&ref=searchresults&type=Repositories 上最酷的 Emacs 插件.
最好的是Planet Emacsen,多個Emacs博客的集合.
我偏心的是"列舉最有用的命令"之類的具體問題.不少回答大開眼界.即便我已精通Emacs.
那種"如何入門"的問題,人人都能插上一腳.即便有高水平的回答,也淹沒在衆多平庸回答中.
若是你的問題就是比較泛泛而談的,從一個能測量水準的具體問題入手找到高手,而後看高手是如何回答那些比較泛的問題的.
google "emacs-related-keywords site:stackoverflow.com"
我會按期搜索,同一帖子反覆精讀.由於討論質量很高.
http://emacs.stackexchange.com 是Emacs專門的問答子社區.
例如,我就是看了 Google Tech Talks 上這個 Org-mode 做者的介紹 而愛上 org-mode.
不過Youtube搜索結果是最佳匹配的.因爲相關視頻並很少,如按照默認算法,每次老是那幾個.因此若是關注最新進展,搜索應以時間排序.
EmacsWiki 是社區維護的文檔,是最酷插件和最佳實踐的集合點.
有人抱怨文檔太亂,質量良莠不齊.前者我有同感.後者不贊同.EmacsWiki文檔質量至關高,因其是 惟一的 半官方文檔.忍受其亂中有序的現狀吧.
最佳閱讀方法是,選定一特定主題,從頭讀到尾.這樣對最新進展都瞭解了.是否要採用其建議另當別論.
Bob Glickstein的Writing GNU Emacs Extensions是最好的.
生動,例子豐富.做者用心安排了書的結構.例如,很早就介紹了defadvice的用法.defadvice 是Emacs Lisp的精華.
Xah Lee 提供付費Lisp教程也至關不錯.
他的Emergency Elisp很簡潔.我特別喜歡"Statements"一章.
不要低估長期管理的累積效應.
正面例子參考Steve Purcell的配置. 2000年開始14年的維護! 8年github記錄! 1000多顆星的配置決非浪得虛名.
知識積累的越多,這些知識之間的聯繫就會越多.聯繫增加的速度是以指數的方式增加的.如從頭來過,意味着積累的知識的書面記錄丟失了.損失是很大的.基數已歸零,增加的量又能有多少.
因此決不要重置配置!
這也是後文談到爲何要用工具保存配置和知識的緣由.
個人配置見 https://github.com/redguardtoo/emacs.d.
版本控制能夠認爲是一個集中式的知識管理,任什麼時候刻任何地點對配置的修改都要及時上傳合併 (merge).這是積累能力的關鍵.
共享實際也是一種利己行爲,有不少人使用個人配置,等於幫我測試.
我將全部資訊都放在 dropbox 的服務器上,這樣資料就同步到個人智能手機和個人平板電腦上,我可利用空閒時間學習.
請點擊這裏註冊 dropbox 賬號.注意,dropbox 客戶端徹底能夠在國內使用,雖然訪問其首頁可能有點問題.
我還寫了許多博客文章.這些文章都存在org格式的文件中.最後發佈的靜態博客也歸入版本控制,參見http://github.com/redguardtoo/blog.binchen.org.
初學者的問題是裝了太多插件,管理成了問題.
我建議的原則是少而精,被少數最優秀的插件培養出品味後,可自由挑選適合的.
標準以下:
全部插件均可經過包管理器下載.
如下是清單:
名稱 | 說明 | 同類插件 |
---|---|---|
Evil | 將 Emacs變爲Vim | 沒有 |
Org | org-mode,全能的筆記工具 | 沒有 |
company-mode | 自動完成輸入,支持各類語言和後端 | auto-complete |
expand-region | 快捷鍵選中文本,可將選擇區域伸縮 | 沒有 |
smex | 讓輸入命令變得飛快 | 沒有 |
yasnippet | 強大的文本模板輸入工具 | 沒有 |
flymake | 對不一樣語言作語法檢查 | flycheck |
helm | 自動完成,在其上有插件完成具體功能 | ido |
ido | 和helm相似,helm和ido可同時用 | helm |
js2-mode | javascript的主模式,自帶語法解釋器 | js-mode |
w3m | 網絡瀏覽器(需安裝命令行工具w3m) | Eww |
simple-httpd | Lisp 寫的 Web 服務器 | elnode |
smartparens | 自動輸入須要成對輸入的字符如括號 | autopair |
window-numbering.el | 跳轉到不一樣的子窗口 | switch-window.el |
web-mode | 支持各類 HTML 文件 | nxml-mode |
magit | 玩轉git | 沒有 |
git-gutter.el | 標記版本控制的diff(支持subversion) | 沒有 |
牛人其餘方面也很牛.觸類旁通你收穫會不少.
Sacha Chua 就是這樣一個有牛人氣質的女孩,這是她的 Youtube 錄像. 她學習的方式是 讓 Emacs 自動將手冊語音合成,這樣她在房間裏走來走去的時候也能夠聽文檔了.
我如今有意識地整理高手名單,觀察他們 除了Emacs外 用什麼工具.
例如, js2-mode 的維護者Masafumi Oyamada(網名mooz)也開發了keysnail和percol. 特別是percol,使我命令行效率提升了10倍.
這個階段可稱之爲 心中有劍,手中無劍.
是否用Emacs不重要了,重要的是爲所欲爲.例如,不少人爭論哪一個編輯器自帶的文件管理較好.我從mooz那學到大招後,就跳出五行外,不在三界中了.
如何行動因人而異.
關鍵是真正理解本文要點.
例如,你是否意識到以前的章節意味着如下行動:
到https://github.com/redguardtoo/emacs.d 參考"Install stable version in easiest way"一節.
只要點擊下載兩個zip文件就能夠了,不需Git的任何知識.
高手的配置都是輕量級的,由於他們知道如何優化.
好比有種叫Autoload的技術. 只有用到模塊的某一功能時那個模塊纔會被載入內存. 我推薦的高手都知道這類技巧.
可用 個人配置:
注意,Purcell做爲頂尖Web開發者,會試用最新的Web技術,而個人配置Web類插件更新會滯後一段時間.另外個人工具鏈和Purcell不徹底一致.你本身權衡了.
嘿嘿,我也是Vi精通後轉到Emacs的.就是由於Emacs的強大(例如和 gdb 的完美結合)以及其腳本語言是Lisp.
固然Vi的多模式編輯和快捷鍵比Emacs要高效得多,因此最佳方案是Vi+Emacs.
目前我用Evil, 在Emacs下模擬Vim,結合二者優勢.
如今我是 神用編輯器之神!
警告,我默認啓用了Vim的快捷鍵,不習慣可打開~/.emacs.d/init.el,將其中一行代碼註釋掉,細節參考README.
不必記,我也只記經常使用的十幾個快捷鍵.順其天然,多用記住,不用就忘,很正常.
目前不少高手在用 Smex,可飛快輸入命令,快捷鍵實際上不須要了.
不要改! 參考上文站在巨人的肩膀上一章,你以爲奇怪是由於缺少經驗,把某些特性誤認爲是bug.請堅持至少一年.
例如,有人反映右邊第80列處總有一豎線,但願能去掉.
實際上這是一特性,提醒用戶一行寬度不要超過第80列. 這是 每行不要超過 80 列的緣由.
我建議第一年應 儘可能理解而不妄加判斷.
例如,問:在 .emacs.d 中的 init.el 文件起什麼做用?答:google "emacswiki init.el".
先確認已裝上了 你須要的 第三方命令行工具,這些工具是可選的,清單見個人README.
如排除了以上緣由,帶上"–debug-init"參數從新啓動,而後將錯誤信息及環境報告到對應的開發者.
報告時應給出細節.例如不少讀者給個人bug都是因爲第三方插件版本較新引發的,我拿到版本號後,才能下載特定版本已重現 bug.不然只能靠猜,來回郵件浪費不少時間.
那你就是走我後悔莫及的老路,一我的在黑暗中摸索.開頭興致很高,但現實是殘酷的,碰到複雜問題解決不了.只能逃避,藉口Emacs太複雜而放棄了.
我最終醒悟過來走上光明大道,不少走上岐路的人恐怕就沒這個覺悟和毅力了.
但願本身掌控坦率地說是一個非技術問題,由於沒有自信心,因此有補償心態. 但願經過一種錯誤的方式來證實本身.結局無非是惡性循環.
正確地方法是放下身段至少一年 (我已反覆強調這一點),打好基本功,讀書,虛心向高手學習.
Emacs 是個開放平臺,其衆多插件發佈前並不必定有嚴格的測試.因此插件之間可能有衝突.
這也是我爲何建議初學者直接使用牛人配置的緣由,由於牛人已經解決了衆多兼容性的問題,你只要直接享受他的服務就好了.
即便你發覺了牛人還沒有來得及處理的bug,最有效方法是提交報告給牛人,而不是本身去鑽研Lisp.
需對命令行操做熟悉.關鍵知識點有兩個:
如你不知道如何在 Windows 下添加修改環境變量,不知道如何安裝第三方工具,建議仍是先用Cygwin中的Emacs,因它已自帶工具,沒有的話安裝也方便.且在 Cygwin 下環境變量 HOME 默認已設.
第三方命令行工具清單請參考個人.emacs.d 中的 README.
這個差距說究竟是後端語法解析引擎的問題.一般這個問題都是以微軟的Visual Studio和IBM的Eclipse做參照.
就C++來講目前有用蘋果公司的 clang 的方案,效果不錯.具體用什麼插件來調用這些引擎有不少選擇,不展開了.
實戰中,我一般就用ctags做爲後端引擎,因其通吃全部語言. 雖然解析效果差一點,可是恰當的命名規範(儘可能少重名)能夠彌補.
如ctags不滿意,可考慮用Gnu Global (gtags).
以上討論的都是後端引擎.
就前端界面來講,作的比較好的是company-mode,維護很活躍,你可就特定語言如何配置諮詢其開發者.
Java和C#語言的主力開發工具最好用IDE而不是Emacs.C#又比Java更難在Emacs中使用.緣由你懂的.
強烈建議用Keysnail.
這是最佳的,我已試過 全部 可選項.
請啓動 Emacs 後,運行 `M-x package-refresh-contents` 以從服務器更新軟件索引,而後重啓 Emacs 便可.
若是你沒有用Emacs24,沒有徹底拷貝高手的配置 (這是本文的中心思想),那麼你須要安裝package.el,細節參考這裏.
Emacs 下載軟件包 (package) 是經過 http 方式,因此若是網絡出問題的話你須要用 http 代理服務器,具體操做見後文.
在命令行中啓動 Emacs 時加上 "http_proxy=your-proxy-server-ip:port" 前綴.
例如,
http_proxy=http://127.0.0.1:8000 emacs -nw
那麼就用個人Emacs配置.
和個人配置配套的是我創建的獨立的第三方包服務,請參考其主頁上的README.
否,只會起阻礙做用!
Lisp語法和一般的語言不一樣,除非有至關編程經驗(至少10年),通常人都會對其有一點負面情緒(固然是毫無道理的偏見!).學習任何新東西,長期來講興趣最重要.一開始應避免任何負面情緒.
Emacs Lisp又是隻用於Emacs的語言,有大量術語須要掌握.如"Buffer","Yank","Font face",只有資深用戶才能理解.
因此在軟件使用沒有至關基礎前學習其拓展語言是浪費時間.
參考前文關於找到切入點的一節,我推薦的順序是,先用優秀的配置享受到好處,有了興趣後學習Lisp就水到渠成了.
有世界級高手(名字不點了)對個人建議不覺得然,他說Lisp很強大頗有趣,應該先學.
可是他的盲點在於,忘記了本身轉向Emacs前在其餘編輯器上已一覽衆山小了.他用Python拓展Sublime已熟到厭煩,Lisp的奇特語法反而刺激了興趣.編輯器的經常使用術語也不在話下. 而本文針對的是大多數的凡人.
選擇適合本身的路,一年之後天才也好,凡人也好, 達到的高度都是同樣的.
否.但Lisp是很強大的語言,特色是一切皆可改.當我說"一切"的時候,我就是指字面意義上的"一切",不是修辭上的誇張.
我用過許多編輯器,除了Emacs沒有一個能作到"一切可改"這點 .vim也不行.
因此學點Lisp對提升Emacs水平沒壞處.另外Lisp語法不錯,值得程序員一學.
順便說一下,Lisp很簡單,比VB容易多了,一旦你適應其語法,就會發覺它其實蠻友好的,至少少打不少字.
關鍵是你打算用這把瑞士軍刀作什麼.
前文已強調過以興趣和解決實際問題做爲切入點.
舉一些我本身的例子說明:
Org-mode簡明手冊 是不錯的中文教程.
最好的英文教程是Carsten Dominik(Org-mode發明者)在google tech talks上的演講.其要點爲org-mode本質是一個文本文件,只要記住按TAB展開或者縮進條目就能夠了.其餘特性可慢慢學.
不要走火入魔.Emacs本質是個平臺,提供了無限可能性.
從實用角度講,Emacs和其餘工具結合有時能更快完成工做(不過在沒有一年的修煉以前 千萬不要猜Emacs不能作什麼).
如下是Emacs不必定能吃獨食的地方:
重點是頭腦靈活,既堅信Emacs無所不能,也適當變通.
這是個人 Twitter 和 Google Plus 以及 微博,也可經過我 email<chenbin DOT sh AT GMAIL DOT COM>聯繫我.我在新浪 weibo.com 上開通帳號 emacsguru.
主力博客爲 http://blog.binchen.org.
我不回答具體配置的問題.如你通讀本文,應知道哪裏找答案更好.
再強調一下本文最重要的觀點:
關鍵是你以嚴肅的態度把其看成專業技能學習.
不少人之因此不贊同個人核心觀點,是由於心裏深處還有把Emacs當玩具來炫耀"我有多酷"的意識.
Emacs強大到能夠做爲另類娛樂來博眼球.但本質是專業人士使用的神器.
打個比方,職業殺手對於刀只關心兩件事:
刀的裝飾是否漂亮或技巧是否本身原創對他並不重要.
Emacs就是那把刀.
本文官方網址爲 https://github.com/redguardtoo/mastering-emacs-in-one-year-guide.
有任何疑問,請在以上網址報bug.這比Email快.因GitHub會以郵件通知我,GitHub郵件永遠歸類至個人最優先文件夾下.
如給我發Email,會淹沒於垃圾郵件中.
Emacs 本質上是一個社區和平臺,不斷有新的有趣的人和技術出現.我會按期更新本文.
若是你拷貝粘帖全文,會使本身和他人錯過更新.
我建議分享本文的連接,
from: http://blog.csdn.net/redguardtoo/article/details/7222501/