版權: 本文采用如下協議進行受權,自由轉載 - 非商用 - 非衍生 - 保持署名 | Creative Commons BY-NC-ND 3.0,轉載請註明做者及出處.javascript
成爲高手很容易.當初我在Vi陣營,偶爾用Emacs還忘記"退出"的快捷鍵,一年後我跨入高手行列.html
不少文章強調Emacs有多牛,但關於"如何作"則語焉不詳.即便涉及到"如何作",談細節多而方法論少,因此本文就 側重方法論.前端
全文結構以下:java
簡單談談,因重點是"怎麼作",不是"爲何".node
一旦嘗過最好的,你天然瞭解好的編輯器應該有哪些功能.python
好比一個內嵌的插件管理器是最基本的.git
以下載了第三方插件,若是發覺其有問題,能夠在不碰該插件原始代碼的狀況下修復.程序員
插件服務器關閉了,應能夠在自帶的U盤上快速創建鏡像.github
目前流行的編輯器如Sublime Text還作不到以上幾點.web
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, 我最反對沒有短時間回報的懸樑刺股.
我利用一年中通勤時間就取得了很大進步,自信到能夠寫下本文.
何爲軟件自由沒有比自由軟件基金會更權威了.我建議把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",而後回車建議,
這一步的目的是知道Emacs如何和其餘軟件交互,是必需的.
例如用Emacs開發C++最簡單成熟的方案是使用GNU Global.配置Global必須要知道設置環境變量 GTAGSLIBPATH
.若是你連環境變量是什麼都不知道,那麼用Emacs開發C++也無從談起.
儘量多的掌握其餘Linux知識是頗有用的,即便你只在Windows下使用Emacs.
按如下步驟閱讀教程:
emacs -nw -Q
僅需半小時.關於Emacs多難學的謬論能夠休矣.半小時的代價微不足道.想一想你去練了多少個半小時吧.
即便你不打算使用Emacs默認的快捷鍵,這步也是必須的,不要跳過!
最起碼要知道如下命令,
M-x describe-variable
, 快捷鍵 C-h v
, 查看變量的文檔M-x describe-function
, 快捷鍵 C-h f
, 查看命令的文檔M-x describe-key
, 快捷鍵 C-h k
, 查看快捷鍵的文檔關鍵在於理性地考慮你最迫切須要解決的一個問題.
以這個問題做爲出發點,除此以外均可以妥協.
雖然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.
那種"如何入門"的問題,人人都能插上一腳.即便有高水平的回答,也淹沒在衆多平庸回答中.
若是你的問題就是比較泛泛而談的,從一個能測量水準的具體問題入手找到高手,而後看高手是如何回答那些比較泛的問題的.
twitter人多,更新結果快.
之因此加上":en"是由於要排除日文內容,因我不懂日文.
若是你懂日文,則應充份利用日文資源,其質量至關高.
google "emacs-related-keywords site:stackoverflow.com"
我會按期搜索,同一帖子反覆精讀.由於討論質量很高.
http://emacs.stackexchange.com 是Stackverflow旗下專門的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年開始維護!其聲譽和質量不用我多費口舌.
知識積累的越多,這些知識之間的聯繫就會越多.聯繫增加的速度是以指數的方式增加的.如從頭來過,意味着積累的知識的書面記錄丟失了.損失是很大的.基數已歸零,增加的量又能有多少.
因此決不要重置配置!
這也是後文談到爲何要用工具保存配置和知識的緣由.
個人配置見 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) | 沒有 |
牛人其餘方面也很牛.觸類旁通你收穫會不少.
Sacha Chua 就是這樣一個有牛人氣質的女孩,這是她的 Youtube 錄像. 她學習的方式是 讓 Emacs 自動將手冊語音合成,這樣她在房間裏走來走去的時候也能夠聽文檔了.
我如今有意識地整理高手名單,觀察他們 除了Emacs外 用什麼工具.
例如, js2-mode 的維護者Masafumi Oyamada(網名mooz)也開發了keysnail和percol. 特別是percol,使我命令行效率提升了10倍.
這個階段可稱之爲 心中有劍,手中無劍.
是否用Emacs不重要了,重要的是爲所欲爲.例如,不少人爭論哪一個編輯器自帶的文件管理較好.我從mooz那學到大招後,就跳出五行外,不在三界中了.
如何行動因人而異.
關鍵是真正理解本文要點.
例如,你是否意識到以前的章節意味着如下行動:
Evil是EvilVim模擬器.
若是你不熟悉Vim,在命令行裏運行 vimtutor
或者安裝Emacs插件evil-tutor學習Vim基本命令.
該教程大概須要半小時.關於Vim的基本操做的討論就到此爲止了.網上關於Vim教程汗牛充棟,你能夠自行閱讀.
本文的重點是探討如何結合Emacs和Vim得到完美文本編輯器,達到*神用編輯器之神*的境界.
瞭解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來講就是不可能完成的任務了.
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鍵等等.
若是你真正理解了我前面的章節,這就根本不是問題.
以前我提到了要保持頭腦開放,要儘量抄高手的代碼,積極的報bug等觀點.如今讓我演示一下如何應用.
我知道有不少人宣稱,Evil和Emacs的許多插件有快捷鍵衝突,從新配置很麻煩.
一開始我也相信了這些一派胡言,因此每裝一個新的插件,都要辛辛苦苦再設置evil的快捷鍵.
有一天我問本身,Lisp那麼強大,Evil那麼優秀,也許有更方便的簡潔方案?許多人說不行不必定是真理,只有實際調查過的人才有發言權.
我也沒有本身鑽研Evil的代碼,取而代之的是給Evil的開發者Frank Fischer報了個bug,他給我了一個完美的方案,根本不須要重設快捷鍵.
這是這個方案在git-timemachine中的完美應用.
我就選擇MELPA上最流行的5個插件簡單介紹一下,相似的優秀插件還有不少.
要點不在於你裝了多少插件,而在於理解因爲Lisp的強大和Emacs的自由,這些插件比Vim對應的插件功能更多,更容易拓展.
對應vim-surround.
我一般用expand-region選中一段文本,而後按 S
或者 M-x evil-surround-region
,再按任意字符(好比雙引號)就能夠在文本首尾兩端附加該字符.
固然它也支持修改刪除操做.
以前提到的text object也完美支持.
懂Lisp的話能夠修改 evil-surround-operator-alist
本身定製操做.
對應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中基本不可能實現.
對應vim-matchit.又是我寫的.天然功能更強大.
本質就是你當前焦點在文件的某個位置A,你按 %
或者 M-x evilmi-jump-items
,焦點移到位置B,你再按一樣的鍵,又回到了位置A.
好比在一個HTML文件中,你就能夠在 <body>
和 </body>
間跳來跳去.其餘各類編程語言都支持.
Vim對應的代碼我讀過,限制比較多,好比你必定要先定義一對正則表達式來匹配A和B的位置.這種限制在某些語言如Python中就會比較麻煩.
Emacs的實現就徹底體現了Emacs的自由精神,我創建了一個動態查詢的矩陣,矩陣的元素就是函數對象而已.用戶能夠在運行時替換這些函數對象,因此怎麼跳轉,跳到哪都是徹底自由的.
因此python的支持就毫無問題.想支持更多的語言或者對個人實現不滿意,在 .emacs
中寫幾行Lisp代碼就能夠了.
按自定義快捷鍵退出當前的各類狀態,至關於Vim中的 ESC
或者Emacs中的 C-g
.
我定義自定義快捷鍵爲 kj
.若是你效率高的話,取消的默認快捷鍵就太慢了.
讓我給你舉個例子說明什麼叫效率高.我移動手指去按ESC鍵須要0.5秒.
Sublime Text默認的文本搜索要比個人Emacs設置慢40倍.若是Sublime Text搜索須要我等待40秒,那麼節省按取消鍵的0.5秒就毫無心義.
我只須要1秒完成搜索,因此把取消操操做從0.5秒減小到0.1秒的感受就徹底不同.
選擇一段文本,按 #
或者 *
搜索.
能夠 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快捷鍵.我從不切換,由於我對這種雜交的快捷鍵很是滿意.
對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的任何知識.
除了 README 外沒有,我主要是經過看 EmacsWiki 和源代碼來了解.竅門是源代碼文件的頭部有使用指南和做者的聯繫方式.
高手的配置都是輕量級的,由於他們知道如何優化.
好比有種叫Autoload的技術. 只有用到模塊的某一功能時那個模塊纔會被載入內存. 我推薦的高手都知道這類技巧.
可用 個人配置:
注意,Purcell做爲頂尖Web開發者,會試用最新的Web技術,而個人配置Web類插件更新會滯後一段時間.另外個人工具鏈和Purcell不徹底一致.你本身權衡了.
目前穩定版是Emacs 24.3 或 24.4,建議不要用高於此版本的Emacs.
一般不用擔憂版本問題.主流的Linux發行版會處理.
嘿嘿,我也是Vi精通後轉到Emacs的.就是由於Emacs的強大(例如和 gdb 的完美結合)以及其腳本語言是Lisp.
固然Vi的多模式編輯和快捷鍵比Emacs要高效得多,因此最佳方案是Vi+Emacs.
目前我用Evil, 在Emacs下模擬Vim,結合二者優勢.
如今我是 神用編輯器之神!
警告,我默認啓用了Vim的快捷鍵,不習慣可打開~/.emacs.d/init.el,將其中一行代碼註釋掉,細節參考README.
不必記,我也只記經常使用的十幾個快捷鍵.順其天然,多用記住,不用就忘,很正常.
目前不少高手在用 Smex,可飛快輸入命令,快捷鍵實際上不須要了.
不要改! 參考上文站在巨人的肩膀上一章,你以爲奇怪是由於缺少經驗,把某些特性誤認爲是bug.請堅持至少一年.
例如,有人反映右邊第80列處總有一豎線,但願能去掉.
實際上這是一特性,提醒用戶一行寬度不要超過第80列. 這是 每行不要超過 80 列的緣由.
我建議第一年應 儘可能理解而不妄加判斷.
刪除HOME目錄下的".emacs", "~/.emacs.d/init.el"就是取代原來的".emacs".
例如,問:在 .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容易多了,一旦你適應其語法,就會發覺它其實蠻友好的,至少少打不少字.
不必,Lisp足夠了.
可是鍵盤宏生成的Lisp代碼有時候比較有趣,建議你精通Lisp後再來玩玩鍵盤宏.
關鍵是你打算用這把瑞士軍刀作什麼.
前文已強調過以興趣和解決實際問題做爲切入點.
舉一些我本身的例子說明:
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 本質上是一個社區和平臺,不斷有新的有趣的人和技術出現.我會按期更新本文.
若是你拷貝粘帖全文,會使本身和他人錯過更新.
我建議分享本文的連接,