Vim 是否能提高編碼效率?

據說 Vim 是「編輯器之神」,但是 Vim 的模式切換是否會更浪費時間,是否有必要?

例如在 Java 開發中,很多人推薦在 IDE 裡面裝 Vim,但是 VIM 和 IDE 裡面的快捷鍵(就夠讓人離開滑鼠,效率也可以)有什麼區別?


vim的價值在於不需要按組合鍵,終端友好。

不需要按ctrl alt其實感覺很舒服。其他的編輯器無論如何配置都不可能配置到完全脫離ctrl alt的地步。

這只是一種習慣。它也確實帶來了好處。

至今為止,vim對於一個遠程shell仍然是最友好的編輯器。alt鍵一般是難以通過遠程登陸傳播的,而ctrl鍵部分組合會被終端吃掉。只有vim這種為終端shell設計的編輯器,他的快捷鍵設計使得自己能夠正常的在shell中執行自己的絕大部分操作而不出故障。

至於為什麼vim需要為各種移動方式設定快捷鍵,因為如果終端速度較慢,那麼每按一個鍵就看屏幕反饋有時並不現實。各種移動方式的快捷鍵讓你連續的輸入大量命令然後等待命令傳送到伺服器端然後看到反饋,這在網速較慢時就很重要。而通常只有vim支持這種編輯場景。

所以如果你需要登陸到終端上進行編輯。想要找到超過vim的編輯器幾乎不可能。是的,在終端上,vim一定能提高你的編輯效率。就算是你掌握了emacs這樣公認更強大的編輯器。當你需要到終端上編輯一些日誌或者配置文件的時候,vim也仍然可能是更優的選擇。

但如果並不是在終端上,那麼vim就不一定能提高你的工作效率了。


Vim的強項不是提高打字速度,而是修改代碼。

多說無益,隨手錄個簡單的視頻吧,用的是Intellij和Vim,Intellij裝了Vim插件。

任務是,我要把一個Hibernate的實體類移植到另一個使用myBatis的項目。包括了創建一個實體POJO,創建一個欄位表字元串常量(用來拼SQL),創建欄位到實體屬性的映射表。視頻中完成以上的關鍵部分用時不到5分鐘。具體拼SQL和創建訪問介面的代碼不包括在視頻里,這部分的效率瓶頸在於思考而不是操作。

當然一般情況下可以裝插件直接從資料庫生成代碼。但欄位名和類中的屬性名並不一一對應,我一個個改可能更費時。而且自動生成的代碼與我們已有的代碼風格可能不一致,我還得慢慢調。還有一個問題是,我當時在火車上,本機上沒有裝資料庫。而且,在這個過程中所用到的技巧,都可以單獨用在其他一些場景中。

個人覺得在處理大段代碼的層面上,Vim有一些特性是Intellij沒有或者薄弱的,而確實可以大大提高工作效率。比起用一些代碼生成插件,有個很大的好處是每一步都可以自己控制,根據需要調整到我想要的樣子,而不是反過來被工具牽著鼻子走。

我個人的觀點是既然有IDE可用,Vim就不用去裝太多界面類的插件(我一個界面類插件都沒裝),而應該重點加強全局文字處理方面的能力。平時寫代碼時就在IDE里做,涉及大段代碼的整體調整而又沒有合適的重構功能時就切換到Vim上做。

我對Vim的掌握只是使用層面,不會寫插件,不會用太高級的特性,一些操作也只求順手不費腦力,未必是最優方案,高手輕噴。

視頻在此: vim配合intellij編輯代碼示例


編輯器就是編輯器,IDE就是IDE,拿編輯器當IDE或者拿編輯器跟IDE比較,不是不能比,是沒必要比,因為各自專註的領域不同。

有一家叫 Jetbrains 的公司,它們家開發的 IDE 真是強大得不要不要的,好用的不要不要的。

記得剛接觸VIM是在網上看視頻教程時看到別人用的,當時的感覺就是 窩趣,太牛B了,這個簡直就是程序員的裝B神器啊,我也要學,我也要用(它去裝逼)!

於是開始了漫長的VIM折騰之旅:

記快捷鍵、練習、記快捷鍵、練習、記快捷鍵、練習,半個月過去了

找資料、改配置文件、找資料、改配置文件、找資料、改配置文件、終於差不多配置成自己心目中的裝逼神器了,一個月過去了

找插件、安裝、配置、學習如何使用這個插件、找插件、安裝、配置、學習如何使用這個插件、找插件、安裝、配置、學習如何使用這個插件終於差不多配置成自己心目中的I(編)D(輯)E(器)了,大半年過去了

終於可以出去裝B了!!

結果就是然並卵,別人一個開箱即用的PhpStorm比我這個折騰了大半年的半桶水IDE強大了不知多少倍,我配置好的功能都只是它的標配而已,各種高配功能簡直甩我幾十條街直接吊打至七孔流血身亡。你要的它都有,你可能要的它也有,你不需要的它還是有,說不定某天你就用上了。

當然,也有不足之處,IDE佔用內存較多也是經常被人吐槽的,當相對於現在的電腦配置來說還是可以接受的。

還有人說它打開很慢,反正我是一天只打開一次,開了就不關了的,那十來秒時間,去洗個杯子倒杯熱水不是挺好的么~

最後,我並不反對學習VIM,花點時間學一下還是很有必要的,伺服器上面基本就得靠它了,但我是強烈反對在伺服器上調試代碼的。

折騰VIM配置和插件的時間和心思,如果我用來學習其他東西,從入門到熟練應該不是問題了。

生命誠可貴,殺雞焉用牛刀?殺牛焉用雞刀?


因為你的esc沒在正確的位置


針對題主的回答:

你一個java程序員,湊什麼熱鬧用vim……

特別是重量級開發,請選擇eclipse或者idea。

vim做java開發也不是不可以,有eclim,不過配置起來比較麻煩,不方便。

vim的模式和快捷鍵:

vim的模式(normal/visual/insert以及其它)是早期圖形界面和滑鼠不那麼普及的年代的產物,所以對於新手來說不是太友好。

不過也正是有了模式的概念,使得vim的快捷鍵可以短小精悍(可以對照同量級的emacs)。

而且vim的快捷鍵設置的還算是比較科學,效率不錯,功能也很強大。否則其它編輯器和ide(我了解的emacs,eclipse和idea都有vim的插件)也不會特別準備了對應的插件了。

vim的定位:

vim從最開始設計時就是一個編輯器,也就是它不僅可以用來寫代碼,也可以用來寫其他東西。

所以你覺得某些IDE的表現比vim好,那TM是應該的啊!因為IDE本來就是用來寫代碼的!(不過一般IDE也是僅支持某幾種語言,對於其它語言的支持就不一定好了,或者通過各種插件擴展)

vim的價值:

vim可以在unix/linux環境下編輯任何文件,而且比IDE更輕量級,以及對工作環境有更好的適應性(term/圖形界面、windows/linux都有可用的版本)而在裝了bundle這個可以方便的管理各類插件的神器之後,vim在很多語言的編輯體驗上是不輸IDE的。

簡單講:選擇適合自己的開發工具。

PS:哪些說用vim秀優越感的,如果vim是一堆屎,你見過誰拿吃屎秀優越感的?!

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

補充:

再簡單說說選擇vim的好處:

1. 移動命令可以與編輯功能鍵組合使用。

這種功能正交的設計不僅僅使得vim的編輯能力非常強大,而且有效的減輕了程序員的記憶負擔

雖然vim對於很常用的操作也會提供一個單獨的快捷鍵,但是你完全不需要把這個命令背下來。

比如,在vim里,複製一行的快捷鍵是Y,但是你完全可以用y(複製)+ $(從當前位置移動到行尾)來實現相同的功能。

2. learn once, vim anywhere

除了在各個平台(unix/linux/windows)上有vim可用,或者很多ide本身也支持vim快捷鍵,

在bash下可以直接通過設置shell為vi模式來使用vi的快捷鍵編輯命令行(set -o vi)。


神的意思就是不接地氣


要是這東西能直接拿來就提高編碼效率,人類這幾十年在IDE上的進步都白搞了。


長期使用大型IDE之後,你會回來瘋了一樣愛上Vim的(Java除外)

因為Vim在處理幾乎任何操作的時候都夠快,比IDE快。尤其是啟動速度,簡直比PHPStorm快了一個世紀。而且顏值也很高。

當然,缺點就是配置複雜了些, 我斷斷續續折騰了兩年才差不多弄出比較合適自己的配置。

下面是laracasts的Vim教程,是我見過最好的教程了,希望對題主有所幫助。

Vim Mastery


拿win下面的vs默認配置舉例:

在不選中文本的情況下,ctrl x是剪切整行,ctrl c是複製整行,ctrl v是粘貼整行,ctrl 左右是前後跳單詞。

如果你知道這些小技巧並且覺得他們對你的編碼效率有提高,那麼vim可以讓你再提高至少10倍。

如果你不知道這些小技巧並且從來沒有萌生過諸如「有沒有啥剪切/複製/粘貼整行的快捷鍵呢?」這種問題,那麼vim可以讓你再慢10倍。


更新正文回復有關idea blahblah的:

熟悉了idea就不需要其他ide了,寫啥裝啥插件

--和vim寫啥裝啥插件有啥區別。。。咱倆天下烏鴉一般黑。。。有關idea和vim插件誰全誰強不屬於本題範疇,不予討論。

idea的快捷鍵我用的多熟多熟,我也不需要滑鼠啊

--嗯,挺好啊。第一刀算你躲過去了,下面還好幾刀呢。

一看你就idea不熟啊

--對,不熟。我玩vim的,熟了就見鬼了。

========

咖啡廳/車上/火車上/地鐵上,沒滑鼠,只有觸摸板你給我玩玩ide試試。。。

觸摸板選代碼,ctrl+c,觸摸板點一下,ctrl+v,畫面太美不敢看

不照樣一個個都得裝vim-mode....

刪除下兩行,刪除下一個單詞

用ide的我已經看到你們按住退格鍵/delete好幾秒不動了

但是vim不用

把代碼的連續n行注釋了

用ide的各位說這好辦,用pycharm的按了批量注釋快捷鍵,加了一串#;寫matlab的用啥啥啥批量注釋快捷鍵,加了一串%;寫java/c-family的按了啥啥啥批量注釋快捷鍵,加了一串//

請問我現在上面這堆都要寫,我要裝幾種ide?我要背幾種快捷鍵?

但是用了vim就不用,ctrl+V, I就解決了。行數再多直接替換行首

哪有那麼多時間和空間裝ide玩。。裝個runtime就硬碟就夠滿了。。

所有的數字後面加上單位cm

我已經看到用ide的各位罵了句艹,這不是寫代碼啊,然後關了ide打開記事本對第一個數字後面加了cm,然後複製這個cm, 然後滑鼠點第二個,粘貼,點第三個,粘貼。。。

但是vim不用,正則匹配替換解決

下面這堆用ide的還撐得住嗎?

只刪除奇數行/偶數行

每行開頭添加行號

刪除所有帶數字的行

多剪貼板

命令宏

vim強不在寫特定的一種東西上,

而是無論寫什麼(python/c/matlab/純文本),

在哪寫(工位上/車上/地鐵上),

用什麼寫(配過環境的機器,沒配環境的機器;有滑鼠的機器,沒滑鼠的機器;有圖形界面的機器,沒圖形界面的機器)

都快

折騰vim,使其具有了某些ide的功能,比如YCM的補全/語義補全。

不是為了幹掉IDE,而是節省適應新ide的時間。

說的好像ide全套那麼多功能你都用得上試的。。。

其實你就是想要個語義補全和語義檢查

你說斷點?你本地能運行嗎你就加斷點。。

我要load 400G數據到內存,你本地跑一個試試....//實驗室伺服器2T內存

我要寫cuda-dnn,本機就沒有GPU/GPU跟不上啊,怎麼辦?立刻買4個泰坦回來?再說了我用的surface pro,裝毛GPU..

伺服器就沒圖形界面,ide都開不了,加斷點也和你ide沒啥鳥關係

那些硬要把代碼拖下來寫再回傳伺服器的,

請問你本地跑不了的時候,ide和vim+語義補全有什麼區別。。。

既然沒區別我為什麼不遠程裝一個從此省去了來回傳的時間+省去了本地配一套環境的時間?

另外本地省下來的空間裝幾張無損CD不好嗎?

說白了老說ide好的其實就是

語言太少/工程太小/數據太少/沒伺服器/硬體簡單/不想幫助可憐的烏干達兒童/給自己車上不幹活找理由


要你ssh上伺服器去寫代碼,能用啥?


用vim的哪來那麼多優越感,我來用Visual Studio教你們一些人生的道理。所有vim能做的事情,至少是你們舉的例子,Visual Studio全都能輕鬆做到,甚至費時都不會增加很多:

刪除下兩行

Shift+下箭頭,Del,比2dd慢很多?(經評論指正按兩下Ctrl+X就好)

刪除下一個單詞

Shift+Ctrl+右箭頭,Del。比dw慢很多?(經評論指正按Ctrl+Del就好。抱歉平時用vim,vs不太熟。)

用ide的我已經看到你們按住退格鍵/delete好幾秒不動了 但是vim不用

那是你不會用IDE

把代碼的連續n行注釋了

用ide的各位說這好辦,用pycharm的按了批量注釋快捷鍵,加了一串#;寫matlab的用啥啥啥批量注釋快捷鍵,加了一串%;寫java/c-family的按了啥啥啥批量注釋快捷鍵,加了一串//

請問我現在上面這堆都要寫,我要裝幾種ide?我要背幾種快捷鍵?

但是用了vim就不用,ctrl+V, I就解決了。行數再多直接替換行首

哪有那麼多時間和空間裝ide玩。。裝個runtime就硬碟就夠滿了。。

VS所有語言(比如C++, C#, Python, Nodejs)只需要一個快捷鍵,Ctrl+K/C。比Ctrl+V/I慢很多?

所有的數字後面加上單位cm

我已經看到用ide的各位罵了句艹,這不是寫代碼啊,然後關了ide打開記事本對第一個數字後面加了cm,然後複製這個cm, 然後滑鼠點第二個,粘貼,點第三個,粘貼。。。

但是vim不用,正則匹配替換解決

VS也有正則匹配

下面這堆用ide的還撐得住嗎?

只刪除奇數行/偶數行

每行開頭添加行號

刪除所有帶數字的行

多剪貼板

命令宏

撐得住,VS有宏有正則匹配。

總之,覺得vim比VS之類IDE好的,不是說你vim用得好,而只是你不會用IDE而已。不過是把Shift/Ctrl和方向鍵換成了hjkl,正則表達式和宏之類也完全沒變,哪來那麼多優越感。還有說答主不會vim的夠了,我的vimrc在github上有幾十個star,也是蛋疼配過自動補全的苦逼。苦逼何苦為難苦逼。


vim跟鋼琴一樣,只要你經過刻苦的訓練,還是可以有很高的打字速度的。所以要不要用vim,這主要看你的編程水平,是不是打字變成了一個門檻。


問這個問題一定不運營伺服器,給你數十台伺服器,編輯上面的參數和配置。

vim這個領域優勢最明顯。

編輯器之身,又不是開發工具之神。


Vim能夠手只要平時打字那樣放好,就可以想你思考的速度一樣寫代碼啊!!

Vim之所以高效編輯,就是因為手指不用離開鍵盤編輯區!

像最高票匿名用戶那Visual Studio做移動方面的對比實在不能認同,左手死死按著兩個鍵(左手手指離開編輯區),右手大老遠跑去按上下鍵?(右手完全離開編輯區),然後再回來雙手粘帖複製?難道從來沒有想過這樣很不合理嗎,做完這些動作手指再跑回來各就各位?我思考的進度已經被阻塞了,阻塞IO?

下面反駁匿名作者的用visual studio比較vim的最基本的幾點:

刪除下兩行

Shift+下箭頭,Del,比2dd慢很多?(經評論指正按兩下Ctrl+X就好)

我告訴你正確的刪除方式,一般我都不會去計算要刪多少行,如果處於編輯模式直接按alt+j(移動鍵任意一個,不用去按esc鍵的少年),然後shift+v,選中你想要的行,d刪除。整個過程手指都放在字母鍵上,手沒有移動,全程一氣合成,做完繼續跟著你的思路往下嘩啦嘩啦的寫。什麼手要跑到鍵盤上下鍵移動?再跳到delete鍵?手再跑回來放好繼續?

刪除下一個單詞

Shift+Ctrl+右箭頭,Del。比dw慢很多?(經評論指正按Ctrl+Del就好。抱歉平時用vim,vs不太熟。)

我不知道你哪裡覺得不慢,左手兩個手指跑偏去按shift+ctrl不放(天不能動),左手離開編輯位。這右手啊,慘不忍睹啊,又要跑去按上下方向鍵。。。再去跳去按delete。 vim這個操作只需左手無名指和中指順手按下即可完成!手都不用移動,完成後手指可以繼續嘩啦嘩啦的跟著思路往下寫,忽然又寫錯了左手無名指和中指再順手按下,或者直接u回退。

而且寫代碼經常需要左右上下移動、刪除、複製、黏貼操作的,而這些操作vim都能在你手指沒有離開編輯區的情況的快速完成!編輯效率就是這樣出來的,這種頻繁的操作別每次都要我手指離開編輯區按shift鍵、Ctrl鍵甚至方向移動鍵,甚至還要按著不放。這種頻繁的操作做服務端的第一感覺都是要做優化的啊。

我用Vim寫代碼有3年了,這麼多回答的人中真有幾個完全用vim寫代碼一年(入門vim)的嗎?實在很難跟你們形容使用vim寫代碼的快感,那種手指跟著思路不停的跑,突然停頓了,上來有是嘩啦嘩啦的清爽的編輯快感(什麼?要跑去按方向鍵?shit)。

後端的代碼都是在伺服器端編輯、編譯、運行的,試問有哪個ide能很好的做到?

什麼,有?編輯完了再切回到shell make?

附兩張我在gnome-terminal上用vim看代碼的圖片,在公司也是這樣連伺服器寫代碼的:

右側文件樹和左側函數列表都是可以快捷關閉的,不阻礙看代碼視野,只在需要的時候打開


本來自行車就是給你短距離代步用的,你非得裝上電機發動機,改避震,裝後視鏡,加車門頂棚,出去了說,我這個開起來和汽車一樣爽。可惜你這些都只是奧拓的標配。

該幹啥就幹啥,非要強整vim,你以為ide為什麼是ide?Linux下找東西方便,找到以後我不想打開圖形界面編輯,我可以直接vim編輯。vim主要是這樣用的,不是去和ide血拚的。

當然,發燒友請自動忽略,每一種愛好都值得尊敬。


一般是背了那麼多快捷鍵的人不好意思說沒幫助。


可以,apm超過職業選手so easy


作為一個vimer,我客觀的說,不能提高多少效率。編程的效率由許多因素決定,編輯器更多的是一種習慣。

Vim的優點是用一種簡單而特別的方式實現了一種通用編輯器,可以方便的做編輯的動作,而且很高效。比如大段的縮進,列模式,宏支持等等。

而且關鍵的是,Vim幾乎到處都是,特別在只有命令行的Linux伺服器上。會Vim,能夠讓你的編輯暢通無阻,而不必在不同的環境下去記憶不同的快捷鍵。而且主流的IDE們都有Vim的模擬器,而且都實現的不錯。

以上,技不壓身,多會點技術沒有什麼壞處。


把 VIM 當 IDE 使的都是異端,在 IDE 里啟用 VIM 模式的編輯器倒是不錯。

命令模式初學是略麻煩,不過等用到過 d%、10dd、y%%jp 就會覺得爽了。要是正則表達式、寄存器、緩衝區熟練,就能體會到真正的妙處,比如:bufdo %s/foo(.*)bar/bar1foo/ge|update。


推薦閱讀:

TAG:文本編輯器 | Vim | IntelliJIDEA |