一年成爲Emacs高手(像神同樣使用編輯器)

版權: 本文采用如下協議進行受權,自由轉載 - 非商用 - 非衍生 - 保持署名 | Creative Commons BY-NC-ND 3.0,轉載請註明做者及出處.javascript

簡介

成爲高手很容易.當初我在Vi陣營,偶爾用Emacs還忘記"退出"的快捷鍵,一年後我跨入高手行列.html

不少文章強調Emacs有多牛,但關於"如何作"則語焉不詳.即便涉及到"如何作",談細節多而方法論少,因此本文就 側重方法論.前端

全文結構以下:java

  • 爲何Emacs值得學習,如對開源文化熟悉可跳過這一章
  • 態度很重要
  • 本文最核心觀點,要充分利用高手成果,不要從新發明輪子
  • 儘快掌握Emacs的步驟
  • 進一步提升的提示(社區,閱讀,知識管理)
  • 跳出具體Emacs技巧,重要的是人
  • 答疑和小結

爲何用Emacs(可選)

簡單談談,因重點是"怎麼作",不是"爲何".node

真正精通後Emacs,其餘編輯器天然精通

一旦嘗過最好的,你天然瞭解好的編輯器應該有哪些功能.python

好比一個內嵌的插件管理器是最基本的.git

以下載了第三方插件,若是發覺其有問題,能夠在不碰該插件原始代碼的狀況下修復.程序員

插件服務器關閉了,應能夠在自帶的U盤上快速創建鏡像.github

目前流行的編輯器如Sublime Text還作不到以上幾點.web

Emacs 的特色決定了其社區水準不低

Emacs 用 Lisp 開發,Lisp 不一樣尋常的語法決定了其開發者都是資深開發者,掌握了多門語言.

Lisp 並不能給你帶來任何好處,因此其社區成員都是純粹的技術愛好者,投機取巧的功利主義者對其沒有興趣.

和IDE比較,Emacs 作的更多更快

IDE針對特定語言或框架優化,而Emacs完成通用任務更有效.

例如,我碰到難題,須要上IRC請教國外高手(工做流是,粘貼代碼到http://gist.github.com, 在irc提問,看網頁,將解決方案粘貼回來),Emacs 集成了IRC工具和瀏覽器 (例如),操做就很方便.

我使用 Visual Studio 多年,Firefox 也是高手.相信我,大多數狀況下 Emacs 更快.

口說無憑,請看高手操做的 youtube 視頻, Emacs Power: Can your editor do THIS!

順便說一下,不少初學者關心的代碼自動完成,主流語言支持都不錯(包括java).

Emacs會永存

我的開發者會喪失興趣,公司會倒閉.但自由軟件基金會將一直存在下去.

Emacs做爲其招牌軟件也會維護下去,個人投資永不會貶值.

能夠馬上開始工做.

軟件開源,配置是純文本,且資源消耗小,安裝包很小 (命令行版本 30M 左右),任何環境下均可用.

這在大項目中特別有益,例如,某項目需同時編輯 Perl, Java,C, Bash, SQL, 要編輯遠程服務器上的代碼,網速不快. Emacs的優點就體現出來了.

一年指的是一年中的空閒時間

我沒說一年內須什麼事都不幹專學Emacs, 我最反對沒有短時間回報的懸樑刺股.

我利用一年中通勤時間就取得了很大進步,自信到能夠寫下本文.

態度決定一切

 

理解軟件自由

何爲軟件自由沒有比自由軟件基金會更權威了.我建議把https://www.gnu.org/philosophy/free-sw.zh-cn.html反覆讀,理解何爲四大自由.

一旦真正理解了軟件自由,Emacs就變得很是簡單了.

例如,不少用戶習慣讓Emacs啓動時自動從其官方插件倉庫https://elpa.gnu.org下載安裝插件.當改網站偶爾下線或者公司的防火牆攔截了對外網站訪問時,Emacs就會啓動失敗.

這也就是一分鐘能夠解決的小事,若是你理解軟件自由, 有勇氣 到 ~/.emacs.d/elpa/ 目錄下看一看的話。

我不明白爲何年年會有那麼多人對此長篇大論的討論.

一個插件倉庫(repository)本質上就是一個文件夾,它有一個含有插件列表名爲 archive-contents 的文本文件,以及一系列插件包.你徹底能夠把這些文件下載下來,在本地硬盤裏創建ELPA的鏡像.

對我的來講,安裝我寫的插件elpa-mirror每一年備份一下全部插件就足夠了.

避免門戶之見

所謂門戶之見就是貼標籤."咱們的"對應"他們的"."熟悉的"對應"陌生的","正統的"對應"異端"的.

"咱們的","熟悉的","正統的",就是"好的";"他們的","陌生的","異端的"就是"壞的".

好比用了Emacs就排斥Vim的快捷鍵,或者反之.

避免門戶之見的關鍵就是意識到標籤只存在於你的主觀想像中.真實世界不會由於你的想像而扭曲.

以Emacs和Vim的快捷鍵爲例,兩種快捷鍵徹底能夠無縫接合.

固然思想的問題不是我空談能解決的,關鍵是要實幹.一個很好的治癒方法就是把http://planet.emacsen.org/上約4000篇文章通讀一遍.大約須要8個小時左右.泛讀就能夠了.目的就是了解世界有多大.

以科學理性作指導

以前有讀者反映個人方法相似於大學裏寫論文作研究,事實上這正是個人靈感來源.

Emacs只是一種特定領域得科學技術,其學習方法和其餘學科是通用得.

打好基礎,讓本身的知識面有 足夠的 廣度和 適當的 深度,對新手是最重要的.不然會在一些瑣碎問題上浪費時間.

好比新手的錯誤就是花大量的時間記快捷鍵,事實上網上教程列出的初學者"必知"快捷鍵都不是必需的.

具體步驟

開始前,解釋一下後文用到的命名慣例,

  • C 表示按下Ctrl鍵, M 表示按下Alt鍵
  • M-x my-command 表示同時按下Alt和X, 輸入"my-command",而後回車

無Linux/Unix經驗新手的快速指南(可選)

建議,

  • 安裝Emacs 24
  • 不安裝任何第三方插件
  • 掌握基本知識,什麼是環境變量(好比PATH, HOME之類的變量),什麼是stdin, stdout, pipe
  • 讀官方教程,學會基本的文本操做(大概十幾個快捷鍵)
  • 使用Emacs 24自帶的org-mode做我的管理
  • org-mode關鍵是用起來,只要記住按TAB鍵是展開內容就能夠了,其餘都不用學

這一步的目的是知道Emacs如何和其餘軟件交互,是必需的.

例如用Emacs開發C++最簡單成熟的方案是使用GNU Global.配置Global必須要知道設置環境變量 GTAGSLIBPATH .若是你連環境變量是什麼都不知道,那麼用Emacs開發C++也無從談起.

儘量多的掌握其餘Linux知識是頗有用的,即便你只在Windows下使用Emacs.

讀官方教程

按如下步驟閱讀教程:

  • 不安裝任何插件打開Emacs, 好比在Shell中運行命令 emacs -nw -Q
  • 同時按下 Alt 和 X 健,輸入 help-with-tutorial(相似快捷鍵後文簡寫爲`M-x help-with-tutorial` 代替),回車.

僅需半小時.關於Emacs多難學的謬論能夠休矣.半小時的代價微不足道.想一想你去練了多少個半小時吧.

即便你不打算使用Emacs默認的快捷鍵,這步也是必須的,不要跳過!

最起碼要知道如下命令,

  • M-x describe-variable, 快捷鍵 C-h v, 查看變量的文檔
  • M-x describe-function, 快捷鍵 C-h f, 查看命令的文檔
  • M-x describe-key, 快捷鍵 C-h k, 查看快捷鍵的文檔

以實際問題做爲切入點

微小的努力如能獲得巨大回報,你會越學越有樂趣,進入一個感情上的正反饋.

在任何領域要成爲高手,興趣是最重要的.

以我爲例,我急需 GTD 的工具,而 Emacs 的 Org-mode 是同類軟件中最好的(沒有之一). 用 Org-mode 大大節省了時間後,我對Emacs愛屋及烏,興趣高漲了100倍.

反面例子是不少人以啃Lisp教程開始他們的Emacs之旅,堅持下來的人寥寥無幾.

待解決的問題設定優先度

關鍵在於理性地考慮你最迫切須要解決的一個問題.

以這個問題做爲出發點,除此以外均可以妥協.

雖然Emacs無所不能,可是飯也要一口一口吃.有時候退一步進兩步.

例如,我一直覺得Emacs的中文顯示很完美,因此搞不懂爲何有人會在字體配置上花那麼多時間.在陸續接到反饋後,我才明白原來是由於我一直在終端下使用Emacs,終端軟件能夠完美顯示中文字體,因此就沒Emacs什麼事了.須要配置字體的人用的是圖形界面Emacs.

當初只在終端下使用Emacs是由於需鏈接到遠程服務器.我認爲這是重點.甚至爲此放棄了漂亮的配色主題(後來發覺此犧牲毫無必要).

因禍得福,由此也避免了圖形界面版本的全部問題.

站在巨人的肩膀上

這方面我是個負面榜樣.剛開始抱着玩的心態,處處找有趣的配置粘貼到個人配置中去.

這是浪費時間!

我應一開始就照抄世界級大師 Steve PurcellEmacs 配置.

警告,Purcell 總愛試用最新的 Web 開發的新技術,對他而言穩定性不是第一位的,若是你有熱情和能力,願意一塊兒折騰,那麼水平會提升很快.

這個若是是很重要的前提,當我上了Purcell的船時,我已有10年開發經驗,精通多種語言.

如你不肯折騰,那至少不要重複個人錯誤,不要質疑,不要創新,跟着高手作.直說了把,你是初學者,開始階段應以模仿爲主.這點怎麼強調也不過度!

爲了加深印象,讓我再舉一例.有人向我反映,Emacs 快捷鍵太多,背起來壓力很大.個人建議是,拿高手配置來用,而不是強加給本身背快捷鍵這樣無聊的任務.你會發覺高手已安裝了名爲smex 的插件,使直接輸入命令比快捷鍵還快.

若是你還未信服,請再考慮一下個人理由:

  • 文章標題是 一年成爲高手,不是一年入門.
  • 高手是世界級別的高手,不是關起門來一個小圈子內的高手
  • 我就是這麼作的,你能夠看看一年內我給他報了多少 bug
  • 說究竟是態度問題,若是你真下定決心,考慮到Purcell的天賦和勤奮,追趕他的最好辦法只有加入他
  • 要超越高手就必須瞭解其標杆在哪,你須要一年時間去模仿去學習
  • 基於Purcell的配置給他報bug(甚至是提交補丁),你就是考慮到了他未考慮到的問題,至少在這點就超過他了,日積月累就很可觀了.

好吧,你如今信服了.可是你是否 真正理解 了?

好比你是否立刻推論到:即便不用高手的配置,也可在github上訂閱(watch)高手配置,其更新通知等價於免費的維護服務.

報bug

像武俠小說那樣拜高手爲師是白日作夢.惟一能讓高手指點的辦法是先付出.最可靠的付出就是報bug.

我就是這樣學到一些高級Lisp技巧的.

不要有報bug低級的想法.不少高手都是樂於且善於報bug.卻是菜鳥喜歡從新發明輪子.

幫助高手,你的起點就高,還有獲得指點的好處.

持續改進

前提是起點高,要在高手已有工做上改善.即便是微小的改善,若是堅持一段時間,就是巨大的進步了,你就能夠在這一點上笑傲江湖.

再找出另外一高手須要改善的地方,使用一樣的方法.

例如,默認在Emacs中移動子窗口焦點不是很方便.需按"C-x O"屢次.我找到了emacs插件switch-window,只要按"C-x O"一次,會有提示子窗口編號,接下來只要輸入編號就能夠了.但還有改善空間,我又找到了window-number.el,只要按"M-NUM"就能夠了.

window-number.el已完美,但Alt鍵仍是有點慢,我結合evilevil-leader,能夠按逗號和數字飛速切換子窗口了.

加入社區更上一層樓

最重要的是專注.

例如,Quora.com上有不少有趣的話題.請剋制興趣,不去定閱和Emacs無關的話題.

Reddit

Reddit是最好的.優勢是一直能訪問.

Google Plus

Google Plus 貼子質量高.例如,我加入了 Linkedin和Facebook的Emacs論壇,目前都退出了.不是它們不專業,只是Google Plus討論技術層次較高.

目前人氣不如reddit,緣由在於Google.

GitHub 是 geek 雲集的地方

GitHub 的版本控制服務很好.如今它的社區化傾向愈來愈強了,我喜歡.

例如,能夠看一下 https://github.com/search?p=1&q=stars:>20+extension:el+language:elisp&ref=searchresults&type=Repositories 上最酷的 Emacs 插件.

Emacs牛人的博客

最好的是Planet Emacsen,多個Emacs博客的集合.

Quora.com

我偏心的是"列舉最有用的命令"之類的具體問題.不少回答大開眼界.即便我已精通Emacs.

那種"如何入門"的問題,人人都能插上一腳.即便有高水平的回答,也淹沒在衆多平庸回答中.

若是你的問題就是比較泛泛而談的,從一個能測量水準的具體問題入手找到高手,而後看高手是如何回答那些比較泛的問題的.

在 twitter 上以 "emacs :en" 按期搜索

twitter人多,更新結果快.

之因此加上":en"是由於要排除日文內容,因我不懂日文.

若是你懂日文,則應充份利用日文資源,其質量至關高.

在 stackoverflow 上搜索相關討論

google "emacs-related-keywords site:stackoverflow.com"

我會按期搜索,同一帖子反覆精讀.由於討論質量很高.

http://emacs.stackexchange.com 是Stackverflow旗下專門的Emacs問答社區.

到 Youtube 上看 emacs 相關的視頻

我就是看了 Google Tech Talks 上這個 Org-mode 做者的介紹 而愛上 org-mode.

不過Youtube搜索結果是最佳匹配的.因爲相關視頻並很少,如按照默認算法,每次老是那幾個.因此若是關注最新進展,搜索應以時間排序.

讀書最有效

 

EmacsWiki

EmacsWiki 是社區維護的文檔,是最酷插件和最佳實踐的集合點.

有人抱怨文檔太亂,質量良莠不齊.前者我有同感.後者不贊同.EmacsWiki文檔質量至關高,因其是 惟一的 半官方文檔.忍受其亂中有序的現狀吧.

最佳閱讀方法是,選定一特定主題,從頭讀到尾.這樣對最新進展都瞭解了.是否要採用其建議另當別論.

Emacs Lisp 書籍推薦(可選)

Bob Glickstein的Writing GNU Emacs Extensions是最好的.

生動,例子豐富.做者用心安排了書的結構.例如,很早就介紹了defadvice的用法.defadvice 是Emacs Lisp的精華.

Xah Lee 提供付費Lisp教程也至關不錯.

Steve Yegge的Emacs Lisp教程

他的Emergency Elisp很簡潔.我特別喜歡"Statements"一章.

知識管理

不要低估長期管理的累積效應.

正面例子參考Steve Purcell的配置. 2000年開始維護!其聲譽和質量不用我多費口舌.

知識積累的越多,這些知識之間的聯繫就會越多.聯繫增加的速度是以指數的方式增加的.如從頭來過,意味着積累的知識的書面記錄丟失了.損失是很大的.基數已歸零,增加的量又能有多少.

因此決不要重置配置!

這也是後文談到爲何要用工具保存配置和知識的緣由.

配置歸入 github 的版本控制

個人配置見 https://github.com/redguardtoo/emacs.d.

版本控制能夠認爲是一個集中式的知識管理,任什麼時候刻任何地點對配置的修改都要及時上傳合併 (merge).這是積累能力的關鍵.

共享實際也是一種利己行爲,有不少人使用個人配置,等於幫我測試.

將相關資料 (如電子圖書,博客文章) 備份

我將全部資訊都放在 dropbox 的服務器上,這樣資料就同步到個人智能手機和個人平板電腦上,我可利用空閒時間學習.

點擊這裏註冊 dropbox 賬號.注意,dropbox 客戶端徹底能夠在國內使用,雖然訪問其首頁可能有點問題.

我還寫了許多博客文章.這些文章都存在org格式的文件中.最後發佈的靜態博客也歸入版本控制,參見http://github.com/redguardtoo/redguardtoo.github.io.

第三方插件推薦

初學者的問題是裝了太多插件,管理成了問題.

我建議的原則是少而精,被少數最優秀的插件培養出品味後,可自由挑選適合的.

標準以下:

  • 高品質
  • 常更新
  • 很強大

全部插件均可經過包管理器下載.

如下是清單:

名稱 說明 同類插件
Evil 將 Emacs變爲Vim 沒有
Org org-mode,全能的筆記工具 沒有
company-mode 自動完成輸入,支持各類語言和後端 auto-complete
expand-region 快捷鍵選中文本,可將選擇區域伸縮 沒有
smex 讓輸入命令變得飛快 沒有
yasnippet 強大的文本模板輸入工具 沒有
flymake 對不一樣語言作語法檢查 flycheck
ivy or helm 自動完成,在其上有插件完成具體功能 ido
ido 和helm相似,helm和ido可同時用 helm
js2-mode javascript的主模式,自帶語法解釋器 js-mode
w3m 網絡瀏覽器(需安裝命令行工具w3m) Eww
simple-httpd Lisp 寫的 Web 服務器 elnode
window-numbering.el 跳轉到不一樣的子窗口 switch-window.el
web-mode 支持各類 HTML 文件 nxml-mode
magit 玩轉git 沒有
git-gutter.el 標記版本控制的diff(支持subversion) 沒有

Emacs是一種生活方式

牛人其餘方面也很牛.觸類旁通你收穫會不少.

Sacha Chua 就是這樣一個有牛人氣質的女孩,這是她的 Youtube 錄像. 她學習的方式是 讓 Emacs 自動將手冊語音合成,這樣她在房間裏走來走去的時候也能夠聽文檔了.

我如今有意識地整理高手名單,觀察他們 除了Emacs外 用什麼工具.

例如, js2-mode 的維護者Masafumi Oyamada(網名mooz)也開發了keysnailpercol. 特別是percol,使我命令行效率提升了10倍.

這個階段可稱之爲 心中有劍,手中無劍.

是否用Emacs不重要了,重要的是爲所欲爲.例如,不少人爭論哪一個編輯器自帶的文件管理較好.我從mooz那學到大招後,就跳出五行外,不在三界中了.

付之於行動

如何行動因人而異.

關鍵是真正理解本文要點.

例如,你是否意識到以前的章節意味着如下行動:

  • 找出全部插件的做者
  • 在Quora/Twitter/GitHub/Reddit/Google+上跟隨他們
  • 通讀他們已發表的貼子

使用Evil

Evil是EvilVim模擬器.

若是你不熟悉Vim,在命令行裏運行 vimtutor 或者安裝Emacs插件evil-tutor學習Vim基本命令.

該教程大概須要半小時.關於Vim的基本操做的討論就到此爲止了.網上關於Vim教程汗牛充棟,你能夠自行閱讀.

本文的重點是探討如何結合Emacs和Vim得到完美文本編輯器,達到*神用編輯器之神*的境界.

Text Object

瞭解Vim Text Object的概念.

Evil的強大之處就是你能夠用Emacs Lisp來自定義"Text Object".自由的Lisp使得你徹底不用理睬Vim中的"約定俗成".

好比在操做自定義的Text Object時,當前焦點徹底能夠在Text Object以外.這是Lisp寫的尋找附近的文件路徑或者URL. 用Vim Script寫個相似的腳本難不少.即便你用了vim-textobj-user之類的插件輔助開發也沒用的.

並且Lisp代碼徹底能夠調用*任何*的第三方插件或者Emacs的不可勝數的API.好比Evil中操做Text Object的過程當中我徹底能夠顯示對話框問用戶問題,訪問幾個網站等等.

這些額外功能對Vim來講就是不可能完成的任務了.

Leader鍵

Vim自帶Leader鍵的功能,你先按了Leader鍵(不少人定義爲空格鍵)後,再按其餘鍵(好比"kk")會觸發你自定義的命令.本質就是給你更多的快捷鍵.

在Emacs中咱們須要使用第三方插件如evil-leader來實現相似功能.

某些Vim用戶不能遷移到Evil的緣由就是自定義了太多使用Ctrl鍵的快捷鍵,和Emacs默認的快捷鍵有衝突.

這些用戶沒有意識到的是借鑑Emacs的思想,他們在Vim和Emacs的效率能夠有巨大的提高. 我只提三點供參考:

第一,典型Vim的用戶的問題是沒有充份利用Leader快捷鍵.我看過大多數Vim高手在GitHub上的設置,他們通常定義*10到20個左右*Leader相關的快捷鍵.

我定義了*300個*Leader相關的快捷鍵.

典型Evil用戶(如spacemacs用戶)大概有3000到10000個Leader相關快捷鍵可用.

第二,Vim用戶的另外一個問題是快捷鍵沒有優化.最經常使用的快捷鍵應該最容易按.何爲最經常使用快捷鍵必須來自*真實數據*.

這是我用Emacs的插件keyfreq測試六個月後獲得的部份數據 (個人Leader鍵定義爲逗號):

Times Percentage Command Key
4967 12.00% evilmi-jump-items %
2892 6.99% compile , o o
2178 5.26% find-file-in-project-by-selected , k k
1953 4.72% copy-to-x-clipboard , a a
1566 3.78% paste-from-x-clipboard , z z
1227 2.96% er/expand-region , x x
897 2.17% evil-repeat .
866 2.09% ido-find-file , x f, C-x C-f
819 1.98% toggle-full-window , f f
815 1.97% etags-select-find-tag-at-point C-], , h t
721 1.74% back-to-previous-buffer , b b
682 1.65% split-window-vertically , x 2
539 1.30% find-function , h f, C-h C-f
494 1.19% counsel-recentf-goto , r r
397 0.96% counsel-git-grep , g g
376 0.91% delete-other-windows , x 1, C-x 1
372 0.90% evilnc-comment-or-uncomment-lines , c i
351 0.85% eval-expression , e e, M-:
326 0.79% evilmi-select-items , s i
320 0.77% paredit-doublequote  
307 0.74% evil-filepath-outer-text-object  
300 0.72% steve-ido-choose-from-recentf  
295 0.71% split-window-horizontally , x 3
283 0.68% git-add-current-file , x v a
279 0.67% winner-undo , x u, , s u, C-x 4 u
278 0.67% describe-function , h d, C-h f
278 0.67% evil-goto-mark-line '
269 0.65% ido-kill-buffer , x k, C-x k
254 0.61% evil-goto-definition g d
253 0.61% pop-tag-mark M-*
251 0.61% git-messenger:popup-message , x v b, C-x v p
246 0.59% my-goto-next-hunk , n n
237 0.57% evilnc-comment-operator , ,
235 0.57% flyspell-goto-next-error , f e, C-,
214 0.52% evil-exit-emacs-state  
212 0.51% browse-kill-ring-forward  
210 0.51% flyspell-buffer , f b

第三, 因爲Lisp的強大Leader鍵的使用在Emacs中有無限可能若是你使用general.el代替evil-leader,你能夠以同時定義多個Leader鍵.能夠在切換文件的時候切換Leader鍵等等.

Evil和Emacs原生插件的兼容性

若是你真正理解了我前面的章節,這就根本不是問題.

以前我提到了要保持頭腦開放,要儘量抄高手的代碼,積極的報bug等觀點.如今讓我演示一下如何應用.

我知道有不少人宣稱,Evil和Emacs的許多插件有快捷鍵衝突,從新配置很麻煩.

一開始我也相信了這些一派胡言,因此每裝一個新的插件,都要辛辛苦苦再設置evil的快捷鍵.

有一天我問本身,Lisp那麼強大,Evil那麼優秀,也許有更方便的簡潔方案?許多人說不行不必定是真理,只有實際調查過的人才有發言權.

我也沒有本身鑽研Evil的代碼,取而代之的是給Evil的開發者Frank Fischer報了個bug,他給我了一個完美的方案,根本不須要重設快捷鍵.

這是這個方案在git-timemachine中完美應用.

Evil專用的插件介紹

我就選擇MELPA上最流行的5個插件簡單介紹一下,相似的優秀插件還有不少.

要點不在於你裝了多少插件,而在於理解因爲Lisp的強大和Emacs的自由,這些插件比Vim對應的插件功能更多,更容易拓展.

evil-surround

對應vim-surround.

我一般用expand-region選中一段文本,而後按 S 或者 M-x evil-surround-region ,再按任意字符(好比雙引號)就能夠在文本首尾兩端附加該字符.

固然它也支持修改刪除操做.

以前提到的text object也完美支持.

懂Lisp的話能夠修改 evil-surround-operator-alist 本身定製操做.

evil-nerd-commenter

對應vim-nerd-commenter,這是我寫的,功能更強大.

你能夠 M-x 5 evilnc-comment-or-uncomment-lines 快速註釋當前5行或者取消註釋當前5行.

你也能夠選中一個區域 M-x evilnc-comment-or-uncomment-lines

因爲Emacs的強大,默認就支持全部世界上已知的語言,而核心代碼也就是1行而已.Vim插件對應的功能代碼要有400行.

若是你在org-mode格式的單一文件中中混雜多種語言的話,它也能智能識別.這個功能在Vim中基本不可能實現.

evil-matchit

對應vim-matchit.又是我寫的.天然功能更強大.

本質就是你當前焦點在文件的某個位置A,你按 % 或者 M-x evilmi-jump-items,焦點移到位置B,你再按一樣的鍵,又回到了位置A.

好比在一個HTML文件中,你就能夠在 <body> 和 </body> 間跳來跳去.其餘各類編程語言都支持.

Vim對應的代碼我讀過,限制比較多,好比你必定要先定義一對正則表達式來匹配A和B的位置.這種限制在某些語言如Python中就會比較麻煩.

Emacs的實現就徹底體現了Emacs的自由精神,我創建了一個動態查詢的矩陣,矩陣的元素就是函數對象而已.用戶能夠在運行時替換這些函數對象,因此怎麼跳轉,跳到哪都是徹底自由的.

因此python的支持就毫無問題.想支持更多的語言或者對個人實現不滿意,在 .emacs 中寫幾行Lisp代碼就能夠了.

evil-escape

按自定義快捷鍵退出當前的各類狀態,至關於Vim中的 ESC 或者Emacs中的 C-g.

我定義自定義快捷鍵爲 kj.若是你效率高的話,取消的默認快捷鍵就太慢了.

讓我給你舉個例子說明什麼叫效率高.我移動手指去按ESC鍵須要0.5秒.

Sublime Text默認的文本搜索要比個人Emacs設置慢40倍.若是Sublime Text搜索須要我等待40秒,那麼節省按取消鍵的0.5秒就毫無心義.

我只須要1秒完成搜索,因此把取消操操做從0.5秒減小到0.1秒的感受就徹底不同.

evil-visualstar

對應vim-visual-star-search.

選擇一段文本,按 # 或者 * 搜索.

在Shell和Interactive Interpreter中使用Evil

能夠 M-x shell 或者 M-x term 進入Shell.

傳統上你們都在Shell中用Emacs的默認快捷鍵.

不過你仔細計算過的話,會發現Vim的快捷鍵更有效率.

Shell的做用無非就是運行命令或者腳本代碼,而後輸出結果.

當咱們在Emacs中運行Shell的時候,命令和代碼每每是從別的地方拷貝過來的.

粘貼命令和代碼到Shell中,分析/過濾/搜索輸出的結果,都是Vim的快捷鍵更方便.

我以前提到的全部關於Evil的技巧和插件都適用於此.

Interactive Interpreter和Shell沒有本質區別,無非就是解釋器支持的語言不同罷了.好比inf-ruby支持Ruby.

你能夠按 C-z 切換純Emacs快捷鍵.我從不切換,由於我對這種雜交的快捷鍵很是滿意.

Evil的小結

對Vim用戶來講,Evil不只提供了Vim的完美模擬,還開闢了用Lisp拓展Vim的新世界.

對Emacs用戶來講,Evil也不只僅是提供了新的快捷鍵,而是提供了更多的可編程的數據結構和範式(如text object).

關鍵是發揮你的創造力,自由地接合Emacs和Vim的長處,發明新技術和新技巧.這種機會目前是不少的,趕快行動起來吧.

答疑

 

菜鳥怎麼開始

https://github.com/redguardtoo/emacs.d 參考"Install stable version in easiest way"一節.

只要點擊下載兩個zip文件就能夠了,不需git的任何知識.

Steve Purcell 的配置是否有文檔能夠參考?

除了 README 外沒有,我主要是經過看 EmacsWiki 和源代碼來了解.竅門是源代碼文件的頭部有使用指南和做者的聯繫方式.

高手的配置是否過重量級?

高手的配置都是輕量級的,由於他們知道如何優化.

好比有種叫Autoload的技術. 只有用到模塊的某一功能時那個模塊纔會被載入內存. 我推薦的高手都知道這類技巧.

除了Purcell的配置,還有其餘高手的設置嗎?

搜了下github:

有沒有更簡單的配置?

可用 個人配置

  • 去掉了Git依賴.
  • 網絡不是必須的
  • 安裝了拼音輸入法
  • C++支持強大

注意,Purcell做爲頂尖Web開發者,會試用最新的Web技術,而個人配置Web類插件更新會滯後一段時間.另外個人工具鏈和Purcell不徹底一致.你本身權衡了.

該使用Emacs的哪一個版本

目前穩定版是Emacs 24.3 或 24.4,建議不要用高於此版本的Emacs.

一般不用擔憂版本問題.主流的Linux發行版會處理.

Vi高手要轉陣營嗎?

嘿嘿,我也是Vi精通後轉到Emacs的.就是由於Emacs的強大(例如和 gdb 的完美結合)以及其腳本語言是Lisp.

固然Vi的多模式編輯和快捷鍵比Emacs要高效得多,因此最佳方案是Vi+Emacs.

目前我用Evil, 在Emacs下模擬Vim,結合二者優勢.

如今我是 神用編輯器之神!

警告,我默認啓用了Vim的快捷鍵,不習慣可打開~/.emacs.d/init.el,將其中一行代碼註釋掉,細節參考README.

爲何不少Vim高手不能接受Evil?

由於他們對Vim快捷鍵作了深度配置.Emacs默認要常常按Ctrl鍵,如自定義的Vim快捷鍵也用Ctrl鍵,不免有衝突.

解決辦法是你們都使Leader(Vim直接支持,Emacs需第三方插件).

還有一個辦法是呆在Vim的溫馨區裏.如能忍受沒有org-mode和lisp的生活,那麼不會有問題.

如猶豫不決,請重讀"態度決定一切"一節.

我一旦認識到Evil和Evil-leader的潛力,馬上把我Vim的設置按Emacs的重設了一遍。

更光輝燦爛的例子就是spacemacs的做者了,無數的github星星表明瞭他的成功.

不習慣默認快捷鍵,怎麼辦?

!

默認快捷鍵通過幾十年考驗至關高效,未成爲高手前仍是要忍.

如必定要在用 Windows 快捷鍵的,可考慮 ergoemacs.

快捷鍵太多記不住怎麼辦?

不必記,我也只記經常使用的十幾個快捷鍵.順其天然,多用記住,不用就忘,很正常.

目前不少高手在用 Smex,可飛快輸入命令,快捷鍵實際上不須要了.

使用牛人配置後,界面有些奇怪的 bug,怎麼改?

不要改! 參考上文站在巨人的肩膀上一章,你以爲奇怪是由於缺少經驗,把某些特性誤認爲是bug.請堅持至少一年.

例如,有人反映右邊第80列處總有一豎線,但願能去掉.

實際上這是一特性,提醒用戶一行寬度不要超過第80列. 這是 每行不要超過 80 列的緣由.

我建議第一年應 儘可能理解而不妄加判斷.

已更新軟件包,可是沒有任何做用,也沒有任何錯誤信息

刪除HOME目錄下的".emacs", "~/.emacs.d/init.el"就是取代原來的".emacs".

若有任何關於如何配置的問題

  • 讀官方教程
  • 善用 google 和我提供的信息

例如,問:在 .emacs.d 中的 init.el 文件起什麼做用?答:google "emacswiki init.el".

使用牛人配置後啓動報錯,如何解決?

先確認已裝上了 你須要的 第三方命令行工具,這些工具是可選的,清單見個人README.

如排除了以上緣由,帶上"–debug-init"參數從新啓動,而後將錯誤信息及環境報告到對應的開發者.

報告時應給出細節.例如不少讀者給個人bug都是因爲第三方插件版本較新引發的,我拿到版本號後,才能下載特定版本已重現 bug.不然只能靠猜,來回郵件浪費不少時間.

牛人的配置太複雜,仍是從一簡單的配置改起好控制

那你就是走我後悔莫及的老路,一我的在黑暗中摸索.開頭興致很高,但現實是殘酷的,碰到複雜問題解決不了.只能逃避,藉口Emacs太複雜而放棄了.

我最終醒悟過來走上光明大道,不少走上岐路的人恐怕就沒這個覺悟和毅力了.

但願本身掌控坦率地說是一個非技術問題,由於沒有自信心,因此有補償心態. 但願經過一種錯誤的方式來證實本身.結局無非是惡性循環.

正確地方法是放下身段至少一年 (我已反覆強調這一點),打好基本功,讀書,虛心向高手學習.

爲何我用了牛人配置後本身額外添加的插件無效

Emacs 是個開放平臺,其衆多插件發佈前並不必定有嚴格的測試.因此插件之間可能有衝突.

這也是我爲何建議初學者直接使用牛人配置的緣由,由於牛人已經解決了衆多兼容性的問題,你只要直接享受他的服務就好了.

即便你發覺了牛人還沒有來得及處理的bug,最有效方法是提交報告給牛人,而不是本身去鑽研Lisp.

我想用 Windows 版本的 Emacs 而不是 Cygwin 版本,怎麼作?

需對命令行操做熟悉.關鍵知識點有兩個:

  1. 設置 HOME 環境變量,由於 .emacs.d 中的某些 elisp 腳本假定 .emacs.d 在 HOME 所指定的路徑中.
  2. Emacs 的某些功能須要使用第三方的命令行工具,這些工具的路徑應該添加至環境變量 PATH 中 (可選,緣由見後面).

如你不知道如何在 Windows 下添加修改環境變量,不知道如何安裝第三方工具,建議仍是先用Cygwin中的Emacs,因它已自帶工具,沒有的話安裝也方便.且在 Cygwin 下環境變量 HOME 默認已設.

第三方命令行工具清單請參考個人.emacs.d 中的 README.

Emacs 在代碼跳轉和自動完成上和商業IDE有差距,怎麼辦?

這個差距說究竟是後端語法解析引擎的問題.一般這個問題都是以微軟的Visual Studio和IBM的Eclipse做參照.

就C++來講目前有用蘋果公司的 clang 的方案,效果不錯.具體用什麼插件來調用這些引擎有不少選擇,不展開了.

實戰中,我一般就用ctags做爲後端引擎,因其通吃全部語言. 雖然解析效果差一點,可是恰當的命名規範(儘可能少重名)能夠彌補.

如ctags不滿意,可考慮用Gnu Global (gtags).

以上討論的都是後端引擎.

就前端界面來講,作的比較好的是company-mode,維護很活躍,你可就特定語言如何配置諮詢其開發者.

Java和C#語言的主力開發工具最好用IDE而不是Emacs.C#又比Java更難在Emacs中使用.緣由你懂的.

網頁瀏覽

強烈建議用Keysnail.

這是最佳的,我已試過 全部 可選項.

郵件

我用Gnus. 但有不少其餘方案.

如你必須訪問Microsoft Exchange Servers, 還要用Davmail.

用了Davmail後, 還能夠用Popfile 來分撿郵件. Davmail+Popfile讓我生活在天堂.

爲何 Emacs 啓動時從服務器 (elpa) 安裝第三方軟件包 (package) 會失敗?

請啓動 Emacs 後,運行 `M-x package-refresh-contents` 以從服務器更新軟件索引,而後重啓 Emacs 便可.

若是你沒有用Emacs24,沒有徹底拷貝高手的配置 (這是本文的中心思想),那麼你須要安裝package.el,細節參考這裏.

Emacs 下載軟件包 (package) 是經過 http 方式,因此若是網絡出問題的話你須要用 http 代理服務器,具體操做見後文.

有些網站 Emacs 訪問不了

在命令行中啓動 Emacs 時加上 "http_proxy=your-proxy-server-ip:port" 前綴.

例如,

http_proxy=http://127.0.0.1:8000 emacs -nw

有些軟件包下載不下來,也不會用代理

那麼就用個人Emacs配置.

和個人配置配套的是我創建的獨立的第三方包服務,請參考其主頁上的README.

早點學習 Emacs Lisp 是否有助於成爲 Emacs 高手?

否,只會起阻礙做用!

Lisp語法和一般的語言不一樣,除非有至關編程經驗(至少10年),通常人都會對其有一點負面情緒(固然是毫無道理的偏見!).學習任何新東西,長期來講興趣最重要.一開始應避免任何負面情緒.

Emacs Lisp又是隻用於Emacs的語言,有大量術語須要掌握.如"Buffer","Yank","Font face",只有資深用戶才能理解.

因此在軟件使用沒有至關基礎前學習其拓展語言是浪費時間.

參考前文關於找到切入點的一節,我推薦的順序是,先用優秀的配置享受到好處,有了興趣後學習Lisp就水到渠成了.

有世界級高手(名字不點了)對個人建議不覺得然,他說Lisp很強大頗有趣,應該先學.

可是他的盲點在於,忘記了本身轉向Emacs前在其餘編輯器上已一覽衆山小了.他用Python拓展Sublime已熟到厭煩,Lisp的奇特語法反而刺激了興趣.編輯器的經常使用術語也不在話下. 而本文針對的是大多數的凡人.

選擇適合本身的路,一年之後天才也好,凡人也好, 達到的高度都是同樣的.

掌握 Emacs Lisp 是不是成爲高手的必要條件?

否.但Lisp是很強大的語言,特色是一切皆可改.當我說"一切"的時候,我就是指字面意義上的"一切",不是修辭上的誇張.

我用過許多編輯器,除了Emacs沒有一個能作到"一切可改"這點 .vim也不行.

因此學點Lisp對提升Emacs水平沒壞處.另外Lisp語法不錯,值得程序員一學.

順便說一下,Lisp很簡單,比VB容易多了,一旦你適應其語法,就會發覺它其實蠻友好的,至少少打不少字.

有必要學習鍵盤宏(Keyboard Macros)嗎?

不必,Lisp足夠了.

可是鍵盤宏生成的Lisp代碼有時候比較有趣,建議你精通Lisp後再來玩玩鍵盤宏.

基本操做我會了,下一步學什麼迷茫中

關鍵是你打算用這把瑞士軍刀作什麼.

前文已強調過以興趣和解決實際問題做爲切入點.

舉一些我本身的例子說明:

  • 我有寫博客須要,懶得用Wordpress那個破界面,因此用org2blog
  • 開發Ruby on Rails程序須要IDE,裝了 rinari
  • 作跨平臺C++桌面開發,裝了cmake-mode
  • 需在多個子窗口間跳來跳去,因此裝了window-numbering.el
  • 大項目需同時調試多種語言,因此裝了evil-nerd-commenter,這樣不用記特定語言的語法就可註釋掉代碼.

如何學習org-mode?

Org-mode簡明手冊 是不錯的中文教程.

最好的英文教程是Carsten Dominik(Org-mode發明者)在google tech talks上的演講.其要點爲org-mode本質是一個文本文件,只要記住按TAB展開或者縮進條目就能夠了.其餘特性可慢慢學.

對於"一切都用Emacs來完成"的觀點你怎麼看?

不要走火入魔.Emacs本質是個平臺,提供了無限可能性.

從實用角度講,Emacs和其餘工具結合有時能更快完成工做(不過在沒有一年的修煉以前 千萬不要猜Emacs不能作什麼).

如下是Emacs不必定能吃獨食的地方:

  • 剪貼簿: 應結合命令行工具xsel(Linux)/pbpaste(OSX)/putclip(Cygwin)
  • Web瀏覽: 用Firefox結合插件如keysnail
  • 遠程登陸管理: 用screen/tmux
  • FTP: 用專門的FTP軟件
  • 文件管理: 用專用軟件
  • Lisp速度比較慢,若有大計算量的工做,交給第三方工具來做.

重點是頭腦靈活,既堅信Emacs無所不能,也適當變通.

聯繫我

這是個人 Twitter 和 Google Plus 以及 微博,也可經過我 email<chenbin DOT sh AT GMAIL DOT COM>聯繫我.我在新浪 weibo.com 上開通帳號 emacsguru.

主力博客爲 http://blog.binchen.org.

我不回答具體配置的問題.如你通讀本文,應知道哪裏找答案更好.

結語

再強調一下本文最重要的觀點:

  • 以 基於解決實際問題產生的興趣引導
  • 徹底照抄世界頂尖高手如Steve Purcell的配置,儘可能避免本身寫Lisp
  • 給高手報bug就是最好的學習,
  • 學習Emacs和 學任何專業技能(拉小提琴,解數學題)的方法論都是同樣的,請參考一萬小時天才理論.

關鍵是你以嚴肅的態度把其看成專業技能學習.

不少人之因此不贊同個人核心觀點,是由於心裏深處還有把Emacs當玩具來炫耀"我有多酷"的意識.

Emacs強大到能夠做爲另類娛樂來博眼球.但本質是專業人士使用的神器.

打個比方,職業殺手對於刀只關心兩件事:

  1. 高效地殺人
  2. 任何環境下均可靠

刀的裝飾是否漂亮或技巧是否本身原創對他並不重要.

Emacs就是那把刀.

如何報bug

本文官方網址爲 https://github.com/redguardtoo/mastering-emacs-in-one-year-guide.

有任何疑問,請在以上網址報bug.這比Email快.因GitHub會以郵件通知我,GitHub郵件永遠歸類至個人最優先文件夾下.

如給我發Email,會淹沒於垃圾郵件中.

不要複製粘帖本文

Emacs 本質上是一個社區和平臺,不斷有新的有趣的人和技術出現.我會按期更新本文.

若是你拷貝粘帖全文,會使本身和他人錯過更新.

我建議分享本文的連接,

相關文章
相關標籤/搜索