Vim 比起 IDE 的優勢是什麼?

受同學的影響最近開始試著使用vim,之前我用的一般都是象eclipse等IDE。

目前覺得vim不太上手,一直很懷念eclipse中的方法名自動補完功能,快捷改錯等功能。

所以請教使用vim的親們覺得vim的優勢在哪裡?


這個問題是一年前的回答了,現在一年過去了,重新整理一下自己的想法,以免誤導了大家。

vim有相對於其他編輯器的優勢,同樣,有很多缺點。我覺得說vim要比ide好,這是不對的,vim好用,其他編輯器同樣好用,甚至更好用。

我感覺,vim適合開發前端,但肯定不一定適合其他語言,比如java。

下面說說對於這個問題的感受:

第一,vim對硬體沒有要求

最初使用vim,只是因為我的第一台個人電腦(一個10寸的上網本),能夠跑起來的編輯器只有vim,沒有辦法,只能硬著頭皮作下去。然後就這樣,4年過去了,現在用的mac air,同樣是最低配的,chrome + eclipse基本上就很卡很卡了,vim還是完全沒有問題。也許對於很多人而言,硬體不是問題,但是vim讓你對硬體沒有要求,這點很重要,有時候對硬體的需求像是永遠填補不滿的慾望。

俗話說,窮人家的孩子早當家。能夠適應惡劣的硬體環境,從長遠反正來看,是一種修行的必須經歷的過程。

第二,vimscript

用得越多,我越覺得vimscript是vim最好的地方。

如果說到語言的比較,大多數程序員會擼起衣袖,相互拉扯,磨刀霍霍的氣勢。每個人覺得自己用的語言是最完美的,但是如果說vimscript是垃圾語言,沒有人會反對。

確實,從語言角度來看,vimscript太弱了。但是,在jQuery出現之前,在javasciprt the good parts出現之前,大家同樣覺得javascript是垃圾語言。vimscript作為編輯器內置的語言,是很好用的。用一句話來說,就是vim is vimscript。

我覺得一門語言是否好,要看它是否好用,是否適合它所運行的環境。vim里的所有操作,都是vimscript。這一點很重要,很多人覺得要記住那麼多的快捷鍵,非常麻煩,實際上,你可以把操作vim看做是編程過程。因為,操作vim,就是寫vimscript的過程,作為程序員,學習一門語言應該不是難事。

把操作vim當初編程,我們首先得學習這門語言的基礎只是,在vim就是vim配置文件,還有基本的操作,模式等。學會這些基本沒什麼問題,有vimtutor。後面真正用上vim來寫代碼,你會有一種感覺,關於如何使用vim的知識,是永遠學不完的。

最近,經常有人拿vim和sublime比較,sublime學到了vim的輕巧,同樣有IDE的簡單。相比而言,vim似乎要繁瑣,無聊得多。實際上,這就是vim的風格,你需要花很多經歷去學習,去折騰,受到挫折。其他編輯器強調的是一體化,功能定製好,sublime上手只需要一天,你不需要去折騰什麼,一切都很好了,IDE也同樣如此。

兩者的主要區別的,vim你需要會寫程序,而後者,只需要學會配置文件就行了,甚至配置都是可視化的。有人說,sublime之類的,我們關注的是寫代碼本身,而不需要關注編輯器,用vim,你得同時操作一門語言,一些繁瑣毫無意義得快捷鍵。

從我的角度而言,操作vim的過程和寫代碼本身是一種事情,作為程序員,有一種程序可以用來操作正在寫的代碼,這不是很有趣的事情吧。在程序員的世界了,程序擁有最高的自由,在vim里,寫程序的過程是自由的。那些其他人看起來無意義的快捷鍵,對於我而言是有意義的。就像代碼對於非程序員而言就像天書一樣,但程序員會覺得很美。

總結一下:

現代的編輯器,都非常優秀,有時候在折騰了一整天的vim插件後,我非常沮喪,覺得vim沒救了。後來我慢慢的明白了,試圖讓vim做所有事情,是不現實的。慢慢的,我也不再推薦其人用vim了,這種折騰過程,有時候還是挺痛苦的,自由的代價,可能不是所有人都喜歡這樣。如果有足夠的時間,比如是大學生,還是很值得體驗一下vim的。

一旦能夠享受vim給的自由,你會愛不釋手的。其他編輯器雖然很好,很舒服,但那都是別人的編輯器,你永遠馴服不了。這是我對這個問題對回答,vim的優勢所在。

最後推薦兩個資料

1. vimscript教程,Learn Vimscript the Hard Way。非常優秀的教程,打算深入學習vim的可以看看,vim文檔雖然很詳細,但是太零散了,這本書系統的講解vimscript。另外,非常喜歡這個書名,Learn Vimscript the hard way,the hard way對於vim來說,太適合了。

2. http://vimcasts.org,一個關於vim的播客,分享一些很多很玄很酷的技巧,推薦被vim折騰過的人看看,可以大大增加你繼續學習下去的信心。

最後,下面是一年前的答案,當時可能更想說明vim有多好,現在我釋然了。下面是答案原文:

------------------------------------------

vim和IDE最大區別在於,vim是有模式的,vim是unix一部分,秉承這unix哲學——管道,一切都是文本,vim中的命令是原子性的,可以隨意組合。

下面一一解釋,vim的優勢非常多,不過也有一些是IDE所擅長的,比如自動提醒之類的,IDE可以內置一個語言引擎,這樣提示確實要強大的多。

  1. vim的模式,是的vim可以有多種編輯狀態,普通狀態下,所有鍵盤的按鍵都是你可以使用的快捷鍵,這時候,你在用的似乎不是一個編輯器了,更確切的說是,處理文本,鍵盤不再是輸入字元,而是vim的各種命令。這樣,使得vim非常快速。寫代碼過程中,其實我們花更多的時間在調試,修改代碼,而不是輸入代碼,寫代碼。所以,我們需要vim的正常模式。
  2. 一切都是文本,這樣其實意味著,在vim裡面高度的編碼一致性體驗。一致性體驗,這個只有在vim和emac裡面可以做到的。這意味著,在vim中,你的所有操作,都是vim風格的,處理正常的文本處理,我們有時候需要調用終端,或者文件操作,文件查找等等。在vim裡面操作一個文件也是一個文本,這樣,修改文件夾和修改文件名一樣了。IDE裡面總是有著各種窗口,這些窗口彼此是獨立的。vim只有一個窗口,在這個窗口裡面所有操作都是一致的。
  3. vim命令是原子性的,這意味著,vim的快捷鍵是命令組合,其實,所有命令都是調用一個函數。比如,daw,在vim裡面表示delete a word,d a w是三個彼此獨立的命令,aw(a word),ap(a paragraph)等等可以隨意組合,這是其他任何IDE所做不到的,IDE裡面的快捷鍵就是快捷鍵,快捷鍵是不能拆分成單獨命令。命令可以拆分,你可以在各種模式下使用這些最小命令單位。在vim裡面,選擇一部分文件修改,和修改整個文件是沒有任何區別的。舉個例子,vim插件surround,操作文本:"hello", ds" =&> hello,cs"" =&> "hello"。這裡使用兩個命令ds"和cs"",乍一看似乎很詭異的語法,其實了解了vim的命令原子特徵,就可以很輕鬆拆理解這兩個命令了,ds"表示delete surround ",雙引號在vim表示雙引號圍起來的區塊,d是vim中刪除的基本命令,dw刪除一個單詞,dap刪除一個段落。cs""這個命令表示,change surround " ",c是change的基本命令,這個命令也就很好理解了吧。在IDE裡面,相同的操作大概是一個快捷鍵,記住那麼一個快捷鍵,你能刪除一個",可能你還得記住另外一個快捷鍵刪除一對(,一對{,一對各種其他符號,這些在vim裡面,不用看文檔都知道怎麼做了吧(ds( ds{ ...)。更重要的是,這些原子命令,在任何地方都是有效的。每個vim命令都是一個小功能,組成一個強大的文本編輯器,就像unix由各種小部件構成一樣,這是任何IDE所無法做到的。

剛剛寫了一篇文章,vim如何成為神器。


快!慘絕人寰的快!

這裡的快不僅包括操作,還包括在任何情況下都能用上自己的編輯器,而不用因為IDE版本或者種類的問題頭疼。


作為程序員,編輯是一項最頻繁使用的技能。編輯也不僅僅是寫程序時才會用到。會議紀要,學習筆記,blog等等,都會用到編輯,這時候不可能調一個ide出來吧。還有很多場景下並不適合用ide,比如通過ssh登陸到遠程機器時。對最常使用的技能進行學習投資,並讓此技能在任何場所都能用得上,雖然前期可能投入大一點,但絕對是會很快收回成本的。

vim或emac就是這樣一個值得進行的投資。有了這個萬能的編輯器,將一些最常用的操作爛熟於心,變成下意識的行為,你會發現編輯效率會得到非常大的提升,而且適用於任何場合。vim/emacs有大量的插件,智能補全等功能通過插件也能實現(雖然沒emacs的基於語義那麼智能)。


1. 任務自動化/腳本化;

2. 遠程調試修改代碼;

3. 快速支持新型語言;

4. 快速採納新的開發模式;


vim 連一個包含 css js es6 的 html 文件都沒法好好格式化我會亂說?

利益相關:我天天用 vim


1.繼承了 Unix 哲學, 一切都是文本.

2.高度靈活, 制定性, 完全可以打造成一個屬於自己的編輯器

3.對硬體沒有要求.低配電腦跑起來也很流暢 ( 別亂裝插件 )

4.攜帶型攜帶, 有個小U盤就可以帶著到處跑.(或者存網盤)

5.越玩越過癮

6.別用滑鼠

7.去除對GUI的依賴. 理解Unix哲學中的文件系統. 消息機制.簡單,直觀,快速

8.看上去像是在沒有什麼代碼智能提示的惡劣環境下寫代碼, 但無形之中Vim幫你堅固了最基礎最基礎的知識,編程就是只有你基礎夠紮實, 你以後才能走的更遠, 寫的更加快.

9. 和 什麼XXXX天精通XXXX編程 相比, Vim更加實際一點, 你以後就知道 什麼 什麼XXXX天精通XXXX編程, 那都是放屁..

10. 更加低調. 更加沉穩. 更加聰明


常見的IDE,大多數只支持一種語言,

少數支持個兩三種,五六種,

有些奇葩的IDE能支持十種語言已經是頂大天了。

但是不管是vim還是emacs,

基本上支持個幾十種語言不成問題。

我的結論是,

如果你這輩子只打算一門語言用到老,那建議你用IDE。

如果你打算學10種以上語言,那建議你用vim/emacs。


一個字:快!


高定製性,高效率,功能齊全全在你調教


編輯器之於IDE只對那種用很多種語言的程序員才有較大優勢


不用滑鼠


vim 的優勢是它是一個真正編輯器,並且是一個可擴展可定製的編輯器。vim 不是萬能的,IDE 有些功能是一個編輯器沒法做或者做不好的,或者是還沒有做出來的。


原諒我將要有些說的不清楚吧,畢竟我IDE用的少,主要有emacs和vim經驗。並且我emacs有兩年沒用了....也就是可以認為我只有vim經驗

1. vim的優勢之處

vim的優勢,無論相對於emacs還是IDE,是vim預先的抽象出一套編輯方式,而這套編輯方式是高效的。

在這裡,我說的高效不僅僅是寫程序的高效:準確的說,在剛開始新寫一個程序的時候,我並沒有覺得vim有多高效

vim的高效率常常體現在查看文件的時候,體現在編輯文件的時候。因為vim的優點在於其良好的抽象:游標的快速定位,方便的選擇文本(這裡不專指visual-mode下的東西,這裡其實想要的是),然後就是正則,多文件操作,調用shell,多窗口之類必不可少的東西

2. 必不可少的反直覺

不得不承認vim的操作方式是反人類的,或者至少是反直覺的。雖然大多數設計理論摒棄反直覺的設計,但是,有時候為了高效,反直覺的設計是必不可少的。比如紅黑樹是反直覺的,比如快排(至少是STL中的排序還是快排)是反直覺的,比如PS/AI什麼的我到現在都不會用

3. 我並不向推薦讀者用vim。這裡只是想說,如果你用vim,你應該怎麼用

我並不想要利用這個回答來推薦vim,因為推銷一個反直覺的東西是很難的。並且這樣的一個推薦:「這貨能夠提升你的效率,讓你了解一些&根本沒必要了解的&東西,只是要用一些不正常的方式編輯,比如你看,我這裡用gcil就可以注釋這些東西.....」看上去很難有什麼吸引力...就像我以前推薦:「emacs是一個不錯的很好配置的編輯器,只要學一下lisp就行了,雖然elisp沒scheme那麼好用」

並且另外一個原因是vim常用快捷鍵,vim鍵盤圖,vim入門什麼的實在太多了,我沒有必要寫一篇類似的。所以在下面我將要進行的是:「我假定你已經在用vim了,我猜測你很可能會有一些低效的編輯方式,比如hjkl;我也猜測其實你對不少vim中的東西不太了解,比如text-object;還有一些很有趣的東西我猜測你沒有訂閱或者看過,比如vimcasts和Practical Vim」

像是Bundle之類大家都知道的內容我就不描述了

在開始之前,進行咆哮儀式:『知乎你什麼時候支持markdown呀,這樣我就可以在vim中寫然後"*yae即可』

3.1. hjkl是低效的操作

參考鏈接:Habit breaking, habit making

當我們移動游標的時候,除非你正在無聊發獃中移動,大多數情況下你肯定有一個明確的位置,剩下的少數的大多數你需要的只是翻半屏或者一屏。這些時候hjkl不放並沒有比上下左右好多少,因為他們是一個字元一個字元的移動。

可以粗略的將游標的移動分成行內移動和非行內移動。行內移動你應該做得是wWbBfFtT%以及e和ge也許我漏了幾個。而你在用fFtT的時候,這兩個按鍵「 ;和,」可以重複你的搜尋。

非行內搜尋展開好麻煩還是去看參考鏈接或者Practical Vim吧

3.2.text-object以及其他你應該知道的vim基本知識

參考鏈接: Vim London January in review

看鏈接吧,反正我不可能說得更簡單了

另外你最好看一下omap 可以使用 :h omap-info或者上網查看

3.3. 也許你應該去看Pratical Vim 和 vimcasts

上面的內容基本來自於Practical Vim 和 vimcasts

3.4 其實我不知道寫什麼了反正我自己也沒有看完Pratical Vim

其實還有很多東西可寫,比如利用ack或者ag而不是用vimgrep去查找函數或者查找想要的東西,比如多窗口,比如利用args操作多個文件,比如vim的目錄模式....

但是我暫時沒有看到什麼我能夠講清楚的內容所以就&無視了&悍然去說:「看vimcasts和Pratical Vim以及reddit的vim子版吧」


近乎覆蓋*nix所有平台,啟動佔用內存少。

使用越久,越能體會上述兩點優勢。


簡明、一致


自動補完: ctrl+n

快捷改錯: 什麼?為什麼出錯?還需要快捷的改錯?


我經歷過的開發都是無論mac linux win,都是win下面開發,再做跨平台編譯放到其它平台。

看了好多國外大牛們的開發模式,還有很多的國外教育視頻,一個樣。不過他們先入為主的是VIM,而不是IDE。

我的理解如下:

1,使用VIM可以在使用過程中獲得學習或者工作內容更深更多的知識(配置啊,一些原理之類的,在工作初期或者學習過程中其實建議還是用VIM的)

2,使用VIM進行文本編輯增刪改查還是挺方便的

3,神化VIM無異於裝B

4,最重要的問題是:

程序員的工作效率瓶頸並不在寫代碼上有多快,可能你一天正真寫代碼的時候就那麼一小時,其它時間都是處理優化或者被打斷,或者處理其它非編寫代碼的時間。

如果你一天從早上用VIM敲到晚上,那你就可能是真正的碼農吧。。。。

5,誰敢於我VS相匹敵!我在vs里寫的肯定比你快哈哈。3000個文件分布到差不多100個嵌套文件夾的工程,你tm用VIM給我試試。可能連文件名字可能都找不著,更別說要改一個牽連n個文件的介面函數的參數了。

所以

VIM還適合個人對此項目的工程非常了解的情況

VIM適合於新的學習開始或者新的工作環境開始時的情況

除此之外,大於1000個文件的工程(非嵌入式底層開發這種),你說你vim比我強我會罵你裝b的。

說vim有些功能ide做不到的,列舉出來,我拿我VS對磕真不行我拿我notepad和你磕。

曾經我也幻想著字元啪啪啪的落下,如同黑夜燎原的火光,我沉在那快感之中無法自拔,忽然有人拍我的肩膀,是呀,又走神了。我打開我的vs,啪啪啪的敲起來,感覺如同白天的太陽,不那麼火光,不那麼耀眼,卻又感覺如此的溫暖。


在電腦發展初期,還沒有圖形界面的時候,一提到黑客、程序員,我們都會自行腦補他們面對著黑壓壓的屏幕,敲著各種字元。vim 和 emacs
純文本的工作環境也讓他們沉浸在寫代碼的快感中,久而久之 vim 就代表著老練,以至於後來有些程序員崇尚 vim ,以為用 vim
就代表技術能力強。使用通用編輯器並不是問題,但熟練編輯器的使用和技術能力強是兩碼事, 當你所常用項目中有某個 IDE
擁有十分吸引你的特色功能時,嘗試使用它。何苦逼著自己很吃力的用 vim ,跟自個過不去。


我代碼基本用vi寫, 原因如下:

1. 在linux上, 沒有更好的選擇

2.不太需要點滑鼠, 這一點挺好, 時不時把右手從鍵盤抬起來去移動滑鼠這個動作, 很讓人惱火的

不過vim的各種快捷鍵實在太雜亂, 學習成本超高, 所以我只會用常用的幾個命令, 或者從同事那裡偷幾招, 不會很用心的去學習


Vim 相比一般的 IDE 的主要優勢在於可以通過支持的腳本來實現自己需要的功能,並且去除了冗餘組件,啟動非常快。

SpaceVim目前實現的功能有:

1. 快捷鍵導航,當自定義快捷鍵日益增多將很難記憶。SpaceVim通過快捷鍵導航系統,讓用戶更加容易找到自己需要的快捷鍵,即便第一次使用SpaceVim也不需要去記憶。 如圖:

當按下前綴鍵 空格 時,你將看到這樣的提示窗口,告訴你下面每一個按鍵的功能。

2. 模塊化的狀態欄,有心人一定注意到上一張圖片中的狀態欄有點像airline, 但這不是,是我們自己製作的一款狀態欄,各個區域自成模塊,分別展示不同的信息。

3. 文檔書寫模塊,默認我們支持markdown. 包括功能,章節導航,實時預覽,自動生成和更新章節列表。

更多功能,請關注我們的官網:

https://github.com/SpaceVim/SpaceVim

此外,如果有興趣,可以閱讀下我翻譯的一篇Vim教程:

https://github.com/wsdjeg/vim-galore-zh_cn


推薦閱讀:

用 Vim 的人如何解釋現在大多數公司都要求用 IDE 這個局面?
哪些是 Emacs 可以做而 Vim 做不到的?
如何使用Vim為每一行自動編號?
如何使用 Vim 做前端開發?

TAG:Vim | 集成開發環境 |