為什麼一些文本編輯器(Sublime Text2、EditPlus、VIM)可以取代eclipse、myeclipse 等 IDE?當開發一個大項目時,IDE 可以自動生成項目結構和一些複雜的配置文件,如何用文本編輯器組織一個大項目呢?
特別是一些項目有許多難記的xml配置文件,難道這些都需要用文本編輯器一個個的寫?
那些配置文件,生成過就只需要小的修改了,就算你每天都做一個大項目,一天也只做一次而已。何況一年究竟能做幾個大項目?
可以考慮用創建項目的時候用 IDE 生成一次,或者使用工具生成,例如 android 項目就有不少 xml 文件,但那些文件在 android sdk 中都提供了命令行工具用於生成相關內容。
另外,文本編輯器可以提供插件,或者擴展之類的功能,來完成 IDE 能做到的幾乎所有事情。請參考一下 exVim 這個項目: exVim: Home
題主的問題應該分成兩個部分:
1. 如何在不藉助IDE的情況下,去構建一個項目。
2. 文本編輯器通過什麼樣的方式可以完成 IDE 的諸多功能。關於第一個問題的回答:
這和你的項目有關係,拿我做的項目為經驗,我只做過 c + lua, c++, Unity3D+C#, html + css + javascript 的項目,每種項目都有不同的項目構建方法。
C+Lua 的項目:
- 我習慣於使用 Premake 來構建 C 的項目。 Premake 是載入 lua 語言編寫的腳本自動生成 Visual Studio Solution, XCode 工程 以及 Makefile 的工具。我利用他進行 Makefile 或者工程文件的製作
- Debug 方面我習慣用生成後的 XCode 工程
- 編程方面我會採用 exVim
C++ 的項目:
由於我接觸的C++項目多半都是在 Visual Studio 里構建的,所以我一般都是在這基礎上構建項目,編程的時候採用 exVim.
Unity3D + C# 項目:
- 構建工程在 Unity3D 中
- 編碼在 exVim
- Debug 基本靠 XCode 和 打Log
Web 項目
- 構建工程通過 Grunt
- 編碼在 exVim
- Debug 通過 Chrome, Firebug 等工具
關於第二個問題的回答:
我是一個 Vim 愛好者,在處理大項目的時候也經常被 IDE 的能力所折服。所以為了能夠讓 Vim 也做這些所謂的「自動化」操作,特別開發了 exVim 這樣一個項目。
我們想想 IDE 究竟為你做了什麼?tags 生成,全局文件查找索引,動態語言解析,項目工程目錄和文件過濾,Debug,...
Vim 下面是否有相應的方式來做呢?答案是有!但是必須你手動配置。在介紹exVim 之前,我們先來看看如何通過如何在 Vim 中手動配置這些工具來做一些 IDE 的事情.
1. 定義,聲明的跳轉
在編程中,最常使用的是定義跳轉 ( define, declaration jumping ),這方面需要你藉助一個Vim中常用的外部工具叫做 cTags 來實現。很少有人會告訴你 cTags 怎麼使用。但是當你開啟一個項目後,一般你會通過:~/foo/bar/foobar/: ctags -R .
let tags+=./tags
即可將上面的文件加入到 vim中。這個時候,如果你可以試著將游標挪動到某個定義單詞下,按下 ctrl+] 就會跳轉到這個單詞的定義中。你也可以通過 :ts &
2. 文件瀏覽
相信喜歡 Vim 的朋友都有自己的文件瀏覽插件。最常被大家使用的是 NERDTree:scrooloose/nerdtree 路 GitHub 。這個插件可以幫助你列出你當前項目下的文件。並且他提供了 file filter pattern。這樣你可以通過設置 g:NERDTreeIgnore 這個變數來忽略那些你不想要的文件。
但是,我個人喜歡使用的是我自己開發的一個插件叫做 ex-project: exvim/ex-project · GitHub 。這個插件和NERDTree 的功能類似,不過他是專門為單獨 Project 設計的,有更好的 folder, file filter 選項。同時他也是 exVim 插件體系的一部分。
如果說 Vim 的文件瀏覽有什麼比 IDE 有優勢的地方,莫過於因為Vim是一個靜態文本編輯器,所以他的所有東西皆文本,所以你可以用任何文本操作的方式來遊走於文件瀏覽插件中,比如 search /,比如單詞跳轉等等。對了,你還可以用 regular expression。是不是很cool呢。
3. 全局搜索
我相信不少人為此困擾過。Vim 社區里確實太缺少這個東西了。你說 grep? NO,NO,NO!對於大型項目,grep 的recursively搜索即使配合file filter pattern也是慢如狗。為此我個人特地開發了一個專門為 global search 做優化的插件 ex-gsearch: exvim/ex-gsearch 路 GitHub 。同樣的,ex-gsearch 也是 exVim 插件體系的一部分。
ex-gsearch 實際上是一個引用外部搜索引擎的搜索結構到 Vim 插件窗口中的插件。他能夠很好的引用 grep, id-utils 的搜索結構。而我這裡要重點介紹的就是除了 grep 外更適合作為項目內全局搜索的工具 id-utils。和 ctags 一樣,id-utils 也是一個預先幫助你解析項目文件,然後生成索引列表文件提供給Vim使用的外部工具。他的使用方法:~/foo/bar/foobar:mkid
~/foo/bar/foobar:lid --result=grep -f"ID" your_search_word
即可全局搜索你想要的文字。因為 mkid 是預先將項目文件索引起來,所以搜索非常的快。並且他有各種指令可以幫助你 filter 你不想要搜索的 folders, files。這些通過 -p 和 id-lang-map 設置即可。
4. 文件快速跳轉
相信不少朋友都被 sublime text 的 ctrl+p 文件快速搜索功能給深深地吸引。其實 Vim 中也有一個類似的插件做相同的事情,他就是 ctrlp: kien/ctrlp.vim 路 GitHub。這裡我就不多說了。同類的Vim插件還有 lookupfile, unite 等等。他們做的同樣出色。
5. 代碼補齊
這類型的 Vim插件也是非常的多的,我按照我目前喜歡的按排名列舉:
- vim-autocomplpop
- neocomplcache
- neocomplete
- YouCompleteMe
- supertab
我喜歡 autocomplpop 是因為他純 Vim 腳本編寫,速度上是測試的幾個純 Vim 編寫的插件中最快的。如果你不拘泥於純粹Vim腳本這件事情, neocomplete, YouCompleteMe 會是更好的選擇。
=======================
以上幾點已經可以將Vim打造成不錯的IDE了。那麼 IDE 究竟做了什麼?他按照你定義的過濾方式,過濾出你工程目錄中的文件,並且自動地在你每次編輯文件的時候,幫你在後台運行 tags 分析,全局搜索索引,lint 工具,幫助你生成一份不錯的 makefile,以及幫你整合了 text editor 和 debugger 在同一操作窗口中。
耐心看到這裡的朋友應該發現了,Vim 裏手動配置這些和IDE幫我們打包做確實效率上差太多了,這些外部工具在Vim的項目里運行,需要一些精心的調配,比如 file filter, folder filter。不同的插件語法不同,總不能我每次開個項目,都要設置這些東西吧,很煩。
所以,這是我開發 exVim 這個項目的初衷。exVim 將項目中用到的 file filter, folder filter, 插件配置,外部工具等等東西都通過 .exvim 這個文件進行統一配置,當你開始一個項目的時候,你只需要在項目工程下創建 foobar.exvim 這個文件,並且用 Vim 編輯他,他就會自動的將配置信息轉化到 Vim 中,並且幫你啟動你需要的插件和腳本。就如同 IDE 中的 .xcode, .sln 文件。也就是說,他做了上面的我說的那些操作,讓你不用去二次學習那些外部工具的命令語法和其他一些選配功能。於此同時,你通過 exVim 的 :Update 命令,就可以幫助你調用這些外部工具的更新命令,更新你項目的變動所需要的文件。
即便如此,我還需要說明,exVim 或者 Vim 只是文本編輯器,它能夠幫助你完成 IDE 中文本編輯的部分,但是那些例如 Debugger,Makefile 則需要你在外部去實現。
至於 Makefile。我相信現在很少有人還會從 XCode, Visual Studio 里去建立工程了。高大上的程序員們應該是用的是 Premake, CMake 一類的工具。而如果你是 Web開發者,那麼通過 grunt 配置 Gruntfile 也是常見的選擇。而這個時候你會發現用 Vim 或者其他的文本編輯器編寫他們才是真正的歸宿,
即使我已經是 everything exVim的瘋狂狀態, 在 Debug 時,我也少不了會使用 IDE。我覺得 XCode, Visual Studio 的 Debugger 做的非常的不錯。這是目前我感覺 IDE 的唯一用途。如果你是Web開發者,那你有什麼理由去使用 IDE 呀, Chrome 或者 Firebug 就是個天然的 Debugger,而編寫代碼自然還是交給高大上的 Sublime, Vim, Emacs 更加輕便有效率.用文本編輯器而不是 IDE 開發的語言一般都沒有好的 IDE。
Java 和 C# 不用 IDE 的鳳毛麟角。
C/C++ 中用 IDE 的比例也很高。這樣解釋吧
IDE在自動化方面非常優秀,可以省下許多的事。VIM在字元操作方面,優秀得不可比擬,讓我們處理起由字元拼湊出的代碼來得心應手。之所以說VIM可以代替IDE,是因為在平時開發中,自動化的使用機率比字元操作要低得多得多,尤其是在熟悉使用VIM來操作字元後,再使用對字元幾乎是記事本式的操作的IDE就會產生各種無語。想念大家都有那種小心翼翼的用滑鼠選取代碼,生怕小手一抖就多選一個字元甚至一行,然後再去複製粘貼的驚心動魄的經歷吧。這在VIM中幾乎是不存在的,vim已經把對字元的編寫變成了一種快樂。
我不否認IDE的優秀,但我會權衡後使用。比如我現在寫Android程序時,使用Eclipse並安裝VIM插件;在寫js和php代碼時,使用Sublime Text2並開啟VIM模式;在公司連接開發伺服器時使用純正的VIM。
自這看來,開發所使用的工具應該因環境而定。沒有100%通用的解決方案,看你自己的習慣因為編輯器,
會逼著我們去了解各種為什麼,會逼著我們在輕提示下養成良好的編碼習慣,
還會逼著我們學會折騰,搗鼓些輕巧的插件。當會的東西足夠多,
編輯器能足以解決問題,幹嘛要用 IDE。當然,大團隊工作還是用 IDE 吧,一個人看不過來那麼多代碼的。一群無聊又愛裝的程序員,自以為非常高端。他們以為文本編輯器加上自動補全和代碼高亮就是IDE了。
但是如果你跟他們說,IDE可不是那麼簡單,可以自動幫你組織編譯代碼,他們會告訴你,我們自己寫makefile;如果你跟他們說,IDE可不是那麼簡單,有各種方便好用的調試器,他們會告訴你,我們只用gdb;如果你跟他們說,IDE可不是那麼簡單,集成了版本控制和協作工具,他們會告訴你,我們在命令行裡面用git;如果你跟他們說,IDE可不是那麼簡單,可以方便的生成各種代碼的流程圖和報表,他們會告訴你,我們會用doxygen來生成,或者說流程圖就在他們的心中。
反正,把那些工具集成在一起就是不好,只有用最原始的工具的才是牛逼。
我反正沒有見過誰在Vim裡面裝了什麼插件,可以運行Android或者其他什麼模擬器的;我反正沒有見過誰在Vim裡面裝了什麼插件,可以連接虛擬機調試內核的;我反正沒有見過誰在Vim裡面裝了什麼插件,可以在運行的時候,動態修改代碼然後接著運行的。文本編輯器就是文本編輯器,賦予那麼多意義幹什麼。借用某位高人的例子,你家用茶杯洗衣服么?我用 Python 寫了些不入流的代碼,平時常用的編輯器是 Sublime Text。也曾嘗試過號稱是神器的 Django IDE PyCharm,但並沒有發現有哪些功能是必不可少的。常用的配置文件正如@pansz所說,只要設定一次就好了;項目結構?小項目的結構本身就很簡單,大項目的結構往往經過數次重構後會變得更合理。IDE 幫你做的事情更多一些,但我不覺得是必不可少的。
單單文本編輯器是組織不了一個大項目的。文本編輯器只負責讀、寫文件。
在開發一個項目的時候,還要用到makefile來build整個項目,要用到ctags、cscope等等很多插件來提高開發效率。當然,上面這些東西也是文本編輯器寫出來的。也許給題主這種錯覺的原因是程序員們對文本編輯器的推崇以及對IDE的貶低。
很多程序員們平常除了公司的項目之外,還會自己寫些東西來幫助自己的生活。通常這些東西只是比較小的項目,甚至只是一個腳本文件。這種時候用IDE太笨重了,文本編輯器+編譯器/解釋器更方便一些。在公司里開發項目的時候,很多也是用IDE的吧。不能說文本編輯器取代了IDE。那麼看來,IDE不應該具備文本編輯的功能,文本編輯的部分還是留給文本編輯器來干吧。正如你做網頁的時候,處理圖片還是用PS。那麼IDE負責管理整個項目,具體的代碼編寫讓文本編輯器去實現更合理。最好搞一個標準,讓IDE與文本編輯器無縫整合。
editplus和sublime,vim等不在一個量級上,並不能代替IDE
對於vim等擴展性極強的editor,就是重新用插件造了一個IDE的輪子推薦閱讀:
※Mac 上最好的 Markdown 文本編輯器是什麼?
※大量寫Lua用什麼編輯器最好?
※除了excel還有什麼編輯器能快速輸入等差數列?
※vim/gvim 有哪些實用技巧?
※visual studio code 如何安裝插件?
TAG:文本編輯器 |