Vim

Vim 和 Emacs 的優缺點是什麼?

  • April 2, 2018

您如何比較這些編輯器?各自的優缺點是什麼?

[注意] 這不是那些“恨一個又愛另一個”或沒有同時使用的人來回答的。

我兩個都用,雖然如果我必須選擇一個,我知道我會選擇哪一個。儘管如此,我還是會嘗試在一些問題上進行客觀的比較。

  • **隨處可用?**如果您是使用 Unix 系統的專業系統管理員,或者是嵌入式設備(路由器、帶有 Busybox 的智能手機……)的高級使用者,您需要了解 vi(而不是 Vim),因為它適用於所有 Unix 系統和大多數類 Unix 系統,無論是桌面、伺服器還是嵌入式。對於普通使用者來說,這個論點是無關緊要的:Emacs 很容易用於每個桌面/伺服器作業系統,並且由於它支持遠端編輯,所以無論如何將它安裝在您的桌面機器上就足夠了。
  • **臃腫?**Emacs 曾經幽默地代表“八兆字節和不斷交換”。現在,在我的機器上,Google Chrome 每個選項卡需要的 RAM 與 Emacs 用於 100 個打開文件所需的 RAM 差不多,我什至不會提及 Firefox。在 21 世紀,Emacs 臃腫只是一個神話。

功能膨脹也不是問題。如果你不使用它,你不必知道它的存在。當您不使用 Emacs 功能時,它們不會妨礙它們,並且文件組織得非常好。

  • 啟動時間:Vi(m) 支持者抱怨 Emacs 的啟動時間。是的,Emacs 啟動很慢,但這沒什麼大不了的:每個會話啟動一次 Emacs,然後使用emacsclient. 所以 Emacs 的緩慢啟動多半是個神話。

有一個例外,即當您登錄到遠端電腦並想在那裡編輯文件時。啟動遠端 Emacs(通常)比啟動遠端 Vim 慢。在某些情況下,您可以讓 Emacs 在 Screen 內執行。您還可以在 Emacs 中編輯遠端文件,但如果您在終端中的 ssh 會話中,它確實會中斷流程。(從 XEmacs 21 或 GNU Emacs 23 開始,您可以從終端內正在執行的 X 實例打開 Emacs 視窗。)

反過來,我發現 Vim 的載入時間明顯比 Emacs 長(vim -u /dev/nullvs. emacs -q)。誠然,這是在一個奇怪的平台(Cygwin)上。

  • **初始學習曲線:**這因人而異。Michael Mrozek 的圖表讓我發笑。說真的,我同意 Vim 的學習曲線一開始很陡,比任何其他編輯器都要陡峭,儘管使用 gvim 可以減少這種情況。

既然我已經消除了幾個 Emacs 神話,讓我消除一個 vi 神話:模態編輯器使用起來並不難也不痛苦。這需要一點習慣,但一段時間後感覺很自然。如果我要重新設計 vi(m),我肯定會保留這些模式。

  • 漸進的學習曲線: Vim 和 Emacs 都有很多特性,而且你會在使用多年後不斷發現新的特性。
  • 生產力:這是一個非常困難的話題。vi(m) 的支持者認為,你幾乎可以在不離開本行的情況下做任何事情,這讓你在最需要的時候更有效率。Emacs 的支持者反駁說 Emacs 有很多不常用的命令,所以不保證鍵綁定,但是當你需要它們時非常方便(強制性 xkcd 參考)。

我個人的觀點是,除非你有打字障礙,否則 Emacs 最終會勝出(即使這樣,你也可以將 Emacs 配置為只需要鍵序列而不需要像Ctrl+letter 這樣的組合)。主行鍵很好,但它們通常不是那麼好,因為你必須切換模式。我不認為 Vim 可以做任何顯著的事情比 Emacs 更有效,反之亦然。

  • 可定制性:兩個編輯器都是可程式的,並且兩者都有大量可用的軟體包。然而,Vim 是一個帶有宏語言的編輯器;Emacs 是一個用 Lisp 編寫的編輯器,帶有一些特別的原語。當您嘗試做一些作者沒有想到的事情時,Emacs 會大獲全勝。這不會每天都發生,但它確實會隨著時間的推移而累積。
  • 不僅僅是一個編輯器:Vim 是一個編輯器。Emacs 不僅僅是一個編輯器:它還是一個 IDE、一個文件管理器、一個終端仿真器、一個 Web 瀏覽器、一個郵件客戶端、一個新聞客戶端……這是好事還是壞事還有待商榷。但是您可以將 Emacs 用作單純的編輯器(參見上面的“功能膨脹”)。
  • 作為 IDE:Vim 和 Emacs 都支持許多程式語言和其他文本格式。除了語法著色和自動縮進等基礎知識之外,兩者都具有高級 IDE 功能,例如程式碼和文件交叉引用查找、輔助插入和重構、集成版本控制以及啟動編譯和跳轉到第一個錯誤的能力。

Emacs 明顯優於 Vim 的一個領域是與非同步子程序的互動。那是當您開始長時間編譯並希望在編譯器攪動時在同一個編輯器實例中做其他事情的時候。或者當你想與Read-eval-print 循環互動時——Emacs 確實在這方面大放異彩,Vim 只能提供笨拙的技巧。儘管如此,一個新的 vim分支 Neovim已被證明已經解決了這個問題,並實現了其他各種未在現有 vim 中實現的錯誤修復。

引用自:https://unix.stackexchange.com/questions/986