真的會有人用 vim 開發大的項目嗎?
我有一個朋友。
他是巨硬的工程師,他們的一個項目的子項目,用 VS 或者任何 IDE 打開的話都卡的要死——這不是大型項目,這是超大型項目。
於是問題就來了,那用什麼開發呢?那就只能用文本編輯器了啊。為什麼要用文本編輯器呢?因為不用更新 project skeleton,不用 search for definition,不用 compile symbols。
於是他就用了 emacs。不好意思,沒用 vim。
所以 vim(或者 emacs)能不能用來開發大型項目呢?當然能,而且項目大的話更能。項目一大起來啊,IDE 都是扯淡。
不過那哥們兒後來換 sublime 了。謝邀請。
我也沒寫過大型項目,所以我個人肯定代替不了全部;即使見過那種幾十萬行代碼全用 Vim 壘起來也不敢說那就叫「大型」。況且 IDE 時代確實使得「編程」作為體力活的時候輕鬆了不少。
(也就是說,其實編程是有腦力活的 XD)
不過只針對這個問題,我的答案是有。——Unix 寫出來的時候沒有 IDE 吧,所以簡單推測下,用 Vim 碼出個幾百上千萬行代碼,應該也不是沒可能,畢竟 Vim 這麼好用,怎麼也得比粗糙的編輯器裡面碼彙編要舒服得多 XD還是有的,我就是其中一個一直用 Vim 做項目的程序員。可以參考我為了做各種項目而寫的 Vim 解決方案: exVim: Home
但是我覺得代碼愛用什麼寫用什麼寫,做大項目更重要的是其他的分析工具,Debugger, Profiler, 等等。跟你用什麼代碼編輯器關係不大。隨便接觸幾個大的開源項目就知道了
我倒是很想知道,難道你們都一直用ide開發大工程?幾百m到幾g代碼導入真不會出問題?我不知道你說的「大型項目」有多大型。你要不要試著把 Linux 源碼導入到你最喜歡的 IDE 里試試(請準備好重啟)。
自動生成腳本是什麼?如果你是指代碼片斷的話,已經有 snipMate、neosnippets 了,另外這也不應該是項目里的常態。如果是生成的代碼文件的話,那個和 Vim 沒什麼關係呀。
格式化代碼?Vim 也能做。不過它自己能做的很有限;它一般是去調用 indent、astyle、tidy、gofmt 之類的。
體現模塊間的依賴關係?Doxygen 那樣的圖示么?
錯誤提示?各種 lint 工具?Vim 都有支持的呀。而且我很討厭那些工具的說,因為在使用自己的主力語言時,我比那些工具更明白我自己在做什麼。
斷點?gdb、pudb?也許 gdb 的界面很醜很不易學習,但是有哪個 IDE 的調試功能能有直接調用它並且按自己的意願書寫各種調試命令更強大更舒適么?
另外,你似乎把 Vim 與 IDE 放到相同的地位了?Vim 可不僅僅用於開發的。各種文本處理它都很擅長。比如改配置文件。特別是你遠程連接到伺服器時,你還怎麼用 GUI 的工具呢?
Vim 僅僅是個文本編輯器而已。它不是 IDE(當然它的文本編輯功能遠超任何常見 IDE)。但它可以作為你的專屬 IDE 的一部分。其它部分可以包括 zsh、gdb、indent、make、cmake、ag、Python、doxygen 等等任何你所需要的工具。使用 Vim 的另一個好處是,如果你的硬體資源有限(跑 Java 寫的 IDE 很吃力),你可以以較少的功能(少裝插件)來換取處理速度的提升(可以少用些內存和 CPU 了)。排名第一的答案那麼多人支持只能說 troubleshooter 太少了,而 coder 太多了。。。
不過這也是應該有的比例。。。
vim 的優勢更多在運行環境而非開發過程。
所以 vim 和 GUI Debugger ,Code Analysis Tools ,Code Generation 甚至結對編程等等開發效率和品質控制的工具。。。一點都不矛盾。
一個 troubleshooter 手裡的利刃和一群 coder 批量製造和調試的工具完全是兩碼事。。。類似於運送大量乘客我們用波音 747 但是 Seals 則會玩高跳低開的降落傘。。。
ps很多框架和方法對 vim 的開發過程也有完整的支持。用 vim 搞定一切其實也真的沒什麼,這樣的開發者我也見過大把。。。最終 coder 也是看 commit 說話,誰管你代碼怎麼生產的。。。
對排名第一第二的答案無語了。知乎名人效應嚴重,很多人會被粉絲多的幾個人的幾句放屁的話給誤導了,真是悲哀。 真的有很大的項目是用vim開發的。 不知道這個項目 https://github.com/crosswalk-project/crosswalk 大不大。我當時實習的時候就是用的vim,而且那些正式員工也用的vim。 當然編譯調試等一堆東西是用自動化腳本來做的,vim就是一個編輯器而已。 vim怎麼就沒有提高生產力了?yyp做出來的事,你要用滑鼠選一下,ctrl c,然後用滑鼠點一下,ctrl v,差距有多大? 你可以說牛逼的程序員會討論寫了多少牛逼的代碼,傻逼的程序員才討論用了什麼牛逼的工具。但是,每個操作我都節省了1s的時間,剩下的時間用來思考,就算我傻逼,也比你牛逼。額 額 額 看了各位大蝦的各種說法
沒有我這種情況的嗎?:相對底層的嵌入式開發 很多都是SOC晶元 基本官方用什麼環境我們就跟著用什麼環境。沒工夫折騰一套自己喜好的編譯調試開發環境,貌似過了這個年齡 公司也不允許,不然後續出問題了麻煩得很。唯一慶幸的是 現在越來越多底層嵌入式的官方基本都支持Eclipse。用過的IDE 有keil ads Eclipse 等等一些亂七八糟的(媽蛋的 為什麼沒有哪個原廠給我配個VS環境啊)基本都是C 偶爾C++。
也稍微稍微的玩玩linux android之類。
總體感覺: 就尼瑪工具而已,糾結那麼多幹嘛? 比如android 既然大多數就參考google的官方環境來弄 就跟著來唄。 說得好像換個IDE就是大牛 或者不換就干不好活。
還有那個 @Twisted Python 在你們看來LOG 解決一切,但你知道編程世界還有很多 加log和不加log是完完全全兩套性能不一樣的程序嗎? 至少我常年生存在這個領域。話說為了看一些信息 添加一天的log代碼,結果IDE給你分分鐘搞定的事情真的不去用嗎?
簡單的說 工具而已 適合自己的應用場景用用就成。
我有一個特別簡單的認識: 比如做VS的程序員(注意是製作不是使用),這些個程序員一般比我厲害非常多,他們在VS上添加很多debug功能(一直維護更新),我覺得玩玩全全都是在某些場景易用性或者效率上不可替代的,所以當我寫程序的時候,用得著的地方 比LOG效率高的地方自然用IDE上的DEBUG了。
話說更簡單的認識: 如果一切都要自己折騰 向VIM那樣,我們去拋棄那麼多好用的商用的 IDE(這個 這個我還有用盜版 慚愧啊啊啊啊),為什麼要在彙編之後搞出那麼多種語言呢,一切不都是向效率 易用性看起嗎?
回到VIM 你們誰愛折騰誰折騰去,折騰好了最好能做個簡單教程 打包好 輸入一個./XXX我一切搞定,最好簡單到百度第一頁全是教程。反正我不喜歡。 不要拿強大說事, 話說最強大的語言是機械碼,自己0101敲去(真聽說過老師輩跟我們吹水說當年 機械碼破解別人的印表機 19XX年代)。有大型IDE我就用 咩的就將就著先用VIM這類。。。。
Google好多用vim和Emacs的。不知道Google算不算大項目。
以上是抖機靈的回答,嚴肅地說,基本上編輯器的選擇是個人喜好,用編輯器來判斷一個程序員的能力,就像是甜咸豆漿來判斷人的品位一樣不靠譜。。。
不過好吧,我喜歡sublime text,而且是甜豆漿黨。
肯定是有人用vim開發大項目。但是這不是你用vim開發大型項目的理由。其實現在挺流行用sublime text的,跨平台,易配置。一般公司肯定不會強迫你用vim/emacs寫代碼,但是不反對你這麼用。所以我從來不反對用vim/emacs,學精通了,肯定對生產力有提升,但是你如果精通vim/emacs,和一個精通eclipse/myeclipse/intellij + ultraedit/editplus的人比賽寫java的生產力(排除對語言的熟練程度和打字速度,僅看代碼編輯效率), 那你不見得贏。但是精通eclipse/myeclipse/intellij + ultraedit/editplus學習曲線和消費精力要小多了。vim/emacs/ultraedit/editplus/sublime text/notepad++ 這些工具,最終對於生產力的貢獻都是以對代碼編輯效率的提升。但是真正上升到「實時語法檢查」,以及其他對於項目功能的支持,肯定是沒有IDE好的。
總之一句話,vim/emacs/ultraedit/editplus/sublime text/ 這些工具對於生產力提升還是有限的,相比於IDE來說,提升很難超過15%(估算),比如剛才那個競賽,你兩個小時能出115行java代碼,那麼同樣水平的,熟悉eclipse的程序員,用eclipse/myeclipse/intellij也能出100行。我是反對新手在熟悉語言本身、api、sdk、框架以前,盲目投入vimemacs此類工具的學習的之中的,畢竟精力花在刀刃上。喜歡折騰是好的。如果折騰,請勿瞎折騰其實vim不vim根本無所謂。我跟你講吧,最近我也開始搞vim了,然後配置了老半天發現,其實花時間最多的是gdb。我再也不相信那些人說vim可以提高生產力了,他媽都不是瓶頸,寫代碼最多10%花在vim上面,90%還得在gdb上面。如果同樣是兩個可以優化的函數,一個跑10%的時間,一個跑90%的時間,你先優化誰?
還有,開發大型軟體跟小型軟體的調試方法是一樣的,不過大部分時間還是靠專業的test團隊來幫我們repro,給我們一個一定會成功引發bug的操作方法,然後我們來debug,已經省事好多了。專業的團隊都有專業的分工,這在一定程度上已經降低難度了。
然後那些什麼條件斷點這些功能,當然不在vim上面。Linux系就特別鼓勵你,一個軟體干一件事情,好吧。開發調試的時候要不斷的切換軟體——反正看起來他們很喜歡這樣。調試功能在gdb上,只要你肯好好去看那些屎一般的沒有格式化的gdb命令輸出的消息,也是可以調試的……
我一直用Vim寫c代碼,查看修改任何語言的代碼,腳本等,非常方便。問有沒有格式化,錯誤提示什麼的?不要太小看Vim得不!那不是按兩下鍵盤就搞定的?至於調試,如果你喜歡,是可以給Vim打補丁,再編譯,就可以在Vim裡面使用gdb調試,不過我覺得直接使用gdb更好。現在想想以前用VC和VS那種編碼方式,我覺得好蠢。。。貼幾個圖吧打開查看編譯信息窗口還可以調試,不過我不常在vim里調試。。。。。。 emacs粉現身回答,我是來拯救在vim/emacs編輯器中掙扎的初學者的。
-----------------------------------------------------------------首先說說vim.
vim是影響力非常大的東西,vim來自於vi,vi在1976年就發布了,所有的非windows系統都找得到它的影子,它的所有操作經過了這麼多年的進化之後已經極度符合編程的人體工程學,所有的操作都經過了這麼多年的時間考驗,對文本的操控能力之強悍已經沒有任何其他的編輯器能夠匹配了,所以vim真的是程序員必學的東西,只要你想長期寫代碼,不是專門搞演算法的偶爾寫寫代碼,不是項目經理,那麼vim就是必學的,《程序員的修鍊之道》中把用notepad式的普通編輯器和vim,emacs之類的高級編輯器比作是茶匙和鐵鍬,實際使用過程中絕對遠遠比這個誇張,所以學習一個高級編輯器是必須的,這個不容爭辯,幾乎所有的IDE裡面都能找到vi樣式的插件,對於大部分人來說用好這些就足夠使用了,現在的人最大的問題就是太貪心了,就想著能一口氣把所有的功能都用會,用順,現實中這是不可能的,vim/emacs的學習成本其實並沒有那麼高,都有自帶的入門教程,大概只要30分鐘就可以用起來了,對於這種軟體,用它,才是最好的學習方式。對於emacs.
我是用了兩年vim之後接觸emacs的,到現在也用了2,3年的emacs了,對我來說emacs是程序員最好的玩具,最好的學習平台,整個程序的功能都能及時的調整,所有的操作,按鍵響應,函數調用都能立馬找到對應的源碼,大部分功能都是elisp寫的,修改了可以立馬起作用,不需要重新編譯,小部分c源碼,在下載了對應的源碼或者自己編譯的emasc上,查詢函數的時候emacs可以直接轉到對應的源碼,沒有比這個更好的學習平台了,emacs就像一本emacs lisp的書中說的那樣更適合被稱為「可擴展的計算環境」,它本身就有很大的學習價值,ruby之父就是研究emacs之後學會了寫編譯器。[翻譯] Emacs改變了我的人生 (發生在Emacs和Ruby之間的故事)但是emacs對於初學者來說真的很反人類,C-n C-p上下行的方式遠沒有vim的j,k方便,我在很長很長以後才習慣,但是emacs的優點並不像vim一樣在於按鍵的精短,甚至一度被vim用戶嘲諷為在彈鋼琴,emacs厲害的是它的擴展性,和其智能程度,就cc-mode中的";"號自動換行和hungry delete,也就是自動刪除游標前多餘的空白符,我在其他的軟體里都沒遇到過,用了一次就深深的愛上。現在的人總是很痛苦,vim/emacs只是個編輯器,卻非要整上IDE的高級功能,好吧,我就是這樣的人,我在這條路上邊用vs邊糾結了好長的時間,之前的emacs上一直沒找到性能靠譜、基於語義的定義跳轉、查詢和自動補全,直到最近我終於找到解決的方案,在這裡貼上來,拯救拯救同樣在這條路上糾結的人。專門寫了一篇博客了說明自己的emacs的c/c++環境配置:Emacs configure for c++
我就問問你 Linus 剛開始寫 Linux 內核的時候有 IDE 嗎?
有。組內有同事在用vim做我們編譯器的項目,看見他自己配了一大堆。另外一個同事用Emacs,基本上就是傳說中的開了Emacs就泡在上面了,不需要開其它的了。我是凡人,在用netbeans,vim和emacs都被我用來做做文件的小改動,其實我最想要的是vs,可惜Linux下面沒有。
根據暑假在Google實習見到的情況,90%的攻城獅是用vim/emacs在寫代碼的。本人用vim,只能說vim比你想像的強大的多。
竟然沒有一個人提到source insight ,我一直以為大型C/C++項目的編輯器都是用source insight的,難道知乎裡面的程序員都只是為windows寫程序的么? 怎麼一提大項目都提到了VS
和其他人意見一致,關鍵要看項目多大吧,一般的單機開發的項目,的確vs絕對是最好的ide,可是你用ide去載入分析上g的代碼,各種依賴源碼加一起估計比你筆記本內存還大。。。或是編譯其中一個模塊,開30個線程編譯小一個小時,你可以用你的雙核或四核處理器試試要多久。。老實說用vim真不是裝逼,而是項目大到一定程度後,只能在專門的開發伺服器上開發了,而那是沒有圖形界面的!!另外,如果要同時寫c,python,shell。。。。等各種代碼的話,也只能老老實實的用vim.(emac黨勿噴)我也來回答一下吧.
我4, 5年前也在糾結到底用哪個編輯器, 都說Emacs是神的編輯器, Vim是編輯器的神. 當時也是以瞻仰的態度對待這兩個工具的. 剛開始Emacs直接用Steve Purcell的配置, 寫起來那叫一個卡! 我還自學了elisp專門 來優化他的爛配置, 然後發現插件disable一些就好了. 然後就全disable了和no addon的沒區別了哈哈哈. (所以說別怪IDE吃內存, 你的Emacs插件裝得多一點, 想達到一樣的功能, 內存佔用的不必IDE少)
我也是用Emacs/Vi寫過東西的人. 還是EE專業的時候因為Cadence這個軟體只有學校伺服器上有, 沒辦法只能用那上面的Emacs22, (現在都24了差了10年多). 然後上個學期做嵌入式, 在一塊FPGA板子上寫代碼, 除了Linux 3.8.1的內核啥也沒有, 連vim都沒有. 我只好現燒進去一個.
現在除了小於20行的代碼直接sublime了, (畢竟啟動速度比IDE快, 可能IntelliJ還沒開呢這邊都寫完了), 所有project都是在IDE上完成的. 不是說不能用vim, 當然可以. 但是, 你覺得這樣真的舒服嗎? 套用王垠的話, "很多人對 IDE 有偏見,因為他們認為這些工具讓編程變得「傻瓜化」了,他們覺得寫程序就是應該「困難」,所以他們眼看著免費的 IDE 也不試一下".
你寫Java的時候想connect一個database, 好, 你要import javax.sql吧. 然後你要用Connection class吧. 你頭腦里有個差不多的印象, 敲個"Conn"下面全給你補好了, library都給你import好了, 多省事啊, 你還能去一個個的查文檔不成? 代碼寫好, save一下, 右邊直接給你標好各種紅條條黃條條, 哪兒拼寫錯了哪兒brace沒對好, Vim能做到? 好像只能一行一行的跳吧. Emacs呢? ctag總有不準的時候. 尤其是做嵌入式的時候真TMD被害慘了.
現在都21世紀了, Vim和Emacs都是上世紀70年代80年代的產物了. 我們已經有了更多更好用的工具, 尤其是JetBrains系列的產品和Visual Studio, 而且拓展性甚至比Emacs還要強的多. (別和我說Emacs的拓展性, 你還能真的去學寫elisp不成, 寫過你就知道有多噁心了). 不用說別的, IntelliJ IDEA對scala 的支持不要太好. 工具只是工具而已, 和一個人的代碼能力關係不大, 但是更好的工具肯定能帶來更高的效率. 不是說在那裡不斷的Meta-x 或者Esc鍵盤啪啪啪的響效率就一定高的.
上一代人用Vim可能還是因為習慣, 這一代人還在用, 那就只能是裝B了.
阿里雲的整個飛天(類hadoop)系統都是在vim下一行一行敲出來的。
推薦閱讀:
※如何選購 Vim 腳踏板?
※vim如何有效處理制式內容?
※如何自己開發/集成一個IDE?
※你最喜歡的命令是什麼?
TAG:Vim |