Emacs作為程式設計環境的不足

2022-03-21 14:12:35 字數 1585 閱讀 4232

寫了一段時間的程式,感受過各種程式設計環境,也數次學習emacs(或者vi)並期望這兩者能搞定大部分事情。不過,最後還是發現術業有專攻,作為程式設計環境的時候,某些情景這哥倆還真的不怎麼適合,姑且稱為不足吧,記錄在這裡。

這裡馬上想說的是,我不是emacs和vi的粉絲,但是很喜歡兩者的某些設計和功能。努力學習過他們,在生產環境中也經常用到,但並不精通。如果有我不知道或者說錯的地方,敬請批評指正。另外,這貼無意於討論ide還是notepad寫程式誰更高明的問題。

1、專案的組織方式

emacs首先是作為編輯器而存在而出名(我想vi也一樣),在不用外掛程式時,它面向的是單個檔案,若考慮split和tab方式,則是面向多個單獨的檔案。當使用了某些外掛程式以後,它可以「看到」並「管理」目錄樹,部分變成了面向目錄的管理方式。無論是面向檔案的還是面向目錄樹的,emacs都首先致力於對於單個檔案內部編輯功能的強大。專案所用到檔案之間的關聯,在編譯之前關聯是鬆散的——emacs把它們當做單獨的乙個乙個檔案,至多是以檔案系統的目錄樹結構組織。這有的時候很好,確實符合kiss和工具高內聚低耦合的思路:通過檔案系統組織專案,通過shell直接實現檔案的操作以實現專案的管理。而現代的ide基本都是面對「專案」這個概念。emacs這種面向檔案的方式,相對就有些不足::

想象乙個極端場景吧,乙個專案擁有100個檔案,其中80個**檔案,放在乙個目錄中(敘述簡單起見)。由於重構的需要,我們需要調整目錄結構,根據命名空間將他們分門別類放進相應的目錄,這些檔案有若干個類,有幾個類方法很多,引數複雜,類繼承系統也超過3層。這種場景現代ide相對能較快速的解決問題,這個時候emacs搞不好還在來回翻查目錄移動源**或者是同步build指令碼。

尤其是現在大家都在寫著「膠水」**,更注重「結構」而不會在乙個檔案中死磕很久(我相信做演算法的牛人或許不是這樣),emacs的優勢在弱化,而對於專案管理的劣勢就更明顯。前兩天還看了篇文章說程式設計師真正在「寫」程式的時間不會超過50%呢。

2、缺失的功能和黑客的外掛程式

emacs和vi本身在文書處理方面的功能非常強大(低耦合高內聚嘛),由於某些非文字編輯功能的缺失而且系統又比較開放,各種外掛程式層出不窮。可以說,沒這些外掛程式真就沒有emacs作作為程式設計環境的今天(其實裸奔emacs對程式設計支援得還算友好啦,vi裸奔基本什麼都沒有麼),什麼colortheme,numberline,etags,cedet,cscope等等等等的外掛程式大大增強了emacs在程式開發方面的能力(甚至有部分彌補了上面第一部分我說的不足)。相應的,vi也有許許多多各種各樣的外掛程式(比如上推特啦,收郵件啦,聊gtalk啦-_-)。但是,但是!這些外掛程式有著相當濃厚的黑客味道:

當然,隨著外掛程式的完善,emacs和vim還是有更完美的希望的。也許什麼時候netbeans eclipse這些都被幹翻了,ibm和oracle回到emacs或者vi懷抱,又或者google被弄得沒ide用了,這時候emacs和vim外掛程式就有希望了。也就是說,emacs作為開發環境缺乏大廠的支援,這是它的乙個硬傷。

3、高階特性

下面這些高階特性上,emacs和vim的差距也比較大:

洋洋灑灑寫了這麼多,其實我還是挺喜歡emacs也挺喜歡vi的,他倆最吸引我的其實還是全鍵盤的操作方式——相當的裝b啊,給別人演示的時候倍兒有面子——還有就是奇快的速度,拿來做一些小專案速度很快也很順手。但是挨踢界確實也是一日千里,emacs和vi能迎頭趕上就好。

使用Emacs作為Windows的控制台

emacs是乙個跨平台編輯器,由大名鼎鼎的開源大牛richard stallman開發 他也是gnu的核心人物 這裡不準備討論emacs的強大的編輯功能,也不討論emacs的宗教信仰 這裡說個關於emacs在windows下的偏門用法 作為console window。在windows下工作的童鞋們...

windows環境下emacs各種外掛程式的安裝和使用

這裡的外掛程式主要是cedet,ecb,cscope,mew這幾種,網上還有很多其它外掛程式,大多是單個的el檔案,把它放到site lisp目錄下再在.emacs中載入就可以了,剛才所說的幾種,是檔案很多,看起來比較複雜的。不過在linux下安裝是非常容易的,都是.configure,make,m...

emacs呼叫外部命令的環境設定

無論我們在windows下或者在linux下使用emacs,毫無疑問,我們都需要借助很多外部命令來完成相應的任務。那麼,在emacs中,是通過什麼方式找到外部命令的呢?我們都知道,無論在什麼系統下,將某個可執行檔案的目錄加入path環境變數,就可以在命令列下使用這個命令,無論這個命令放在 所以,em...