每個開發者都有著自己情有獨鍾的文字編輯器,我 windows 系統下用的是 notepad++,在 linux 系統下搭建、部署伺服器的時候習慣使用 vi 或 vim 編輯器。最近在瀏覽耗子哥的部落格的時候,發現他對 vim 的喜愛遠超其他文字編輯器,並且包括 facebook 在內的一些大型**,當按下 j 鍵時,會向下滾動,而當按下 k 鍵時,會向上滾動-----這意味著 vim 通過數字文化傳播達到了難以想象的高水準。
然而,vim 像是謎一樣的存在,vim 沒有明顯的發起人。儘管 vim 很常見也很重要,但是似乎沒有任何委員會或組織為 vim 做出決策。github 上 vim 也只有兩個開發者,而且pull requests 也很少。
這更加激起了我對 vim 的興趣,於是查詢了一些相關資料。
簡單來說,vim 於 1991 年由 bram 發布,最初 vim 模仿了 vi 編輯器的特性,後面加以擴充套件,逐步新增了很多新功能。今年距離 vim 首次發布已經快要 30 年了,vim 這個強大的編輯器仍然存在並且被許多人所使用和討論,這也從側面說明了 vim 的魅力。剛開始,vim 完全由 bram 乙個人開發維護,後面有開發者不斷加入 vim 的開發,並把 vim 移植到了不同的系統平台上。有一段時間,bram 甚至辭去了工作,全力投入到 vim 的開發中,靠著網友的捐助維持基本生活。2006 年 bram 加入了 google 位於蘇黎世的分部,google 出於對 bram 的尊重以及對開源文化的認同,同意 bram 每週可以花 20% 的工作時間用於和 vim 相關的工作,谷歌真是一家開明的公司,我本有心向谷歌,奈何配不上啊。
具體來說,得從 1966 年開始講起。
1966 年,貝爾實驗室聘用了 ken thompson 。thompson 剛剛在加州大學伯克利分校完成了電氣工程和電腦科學的碩士學位。在伯克利他使用乙個名為 qed 的文字編輯器,該編輯器在 1965 到 1966 年間被開發用於伯克利分時系統。
thompson 在進入實驗室後,thompson 和貝爾實驗室資深研究員 dennis ritchie(c 語言之父,unix 之父),開始懷念分時系統所提供的「互動式計算的感覺」,並著手建立他們自己的版本,該版本最終發展成為 unix。
1969 年 8 月,thompson 「給作業系統、shell、編輯器和匯程式設計序分別分配了乙個星期」,將新系統的基本元件組合在一起。(這樣我想起了開發 linux 核心和 git 的 linus techtips,都是大神)
這個編輯器被稱為 ed 。它是基於 qed 的,但並不完全是 qed 的復現。
對 thompson 和 ritchie 來說, ed 已經足夠好了。但是其他人則認為它很難用,而且它作為乙個淋漓盡致地表現 unix 對新手敵意的例子而臭名昭著。在 1975 年,乙個名叫 george coulouris 的人在倫敦瑪麗皇后學院的 unix 系統上開發了乙個改進版 ed 。
當時是伯克利軟體發行公司(bsd)的研究生的 bill joy 以 coulouris 的源**為基礎,為擴充套件 ed 建立了乙個名為 ex 的改進版 ed。
1979 年的第 2 版 bsd 引入了乙個名為 vi 的可執行檔案,它只在可視模式下開啟 ex 。這也就後來的 vi。
「vim」現在是「改進版 vi」的縮寫,而最初代表的是「模擬版 vi」。和其他許多「vi轉殖版本」一樣,vim 始於在乙個無法使用 vi 的平台上覆現 vi 的乙個嘗試。在荷蘭 venlo 一家影印公司工作的軟體工程師 bram moolenaar 想要為他全新的 amiga 2000 準備一款類似於 vi 的編輯器。moolenaar 已經習慣了在大學時使用的 unix 系統上的 vi ,當時他已經對vi瞭如指掌。10 所以在 1988 年,moolenaar 使用當時的 stevie vi轉殖版本開始在 vim 上工作。
vim 最初開發的年代,雖然國外已經興起了開源運動,但是開源專案的組織與執行還不像現在這樣方便,git 和 github 要在十幾年後才會出現。其他開發者向 bram 貢獻 vim 源**的方式是通過郵件,向 bram 提交 patch,如果 bram 覺得這個 patch 不錯,就會把 patch 加入到 vim 的源**中。20 多年過去了,開源專案的協作方式由於 git 和 github 的出現發生很大變化。很多頂級開源專案都選擇使用 github 進行**的開發和管理,開發者通過 git 提交 pull request 方式貢獻自己的**,如果專案的維護者覺得**的質量 ok,就會合併這個請求,將**併入主線**中。
並且對於大多數使用者來說,vim有著乙個比較陡峭的學習曲線。這意味著開始學習的時候可能會進展緩慢,掌握一些基本操作之後,才能大幅度提高編輯效率。
參考資料
LinkedList前世今生
1 linkedlist元素在內部儲存的實現,節點定義即指向前一元素的指標,後一元素的指標,當前元素的值。private static class entry 2 建立乙個空鍊錶。預設有個頭指標header。private transient entryheader new entry null,n...
前世今生 STL
嘛,string就是乙個用於字串處理的標準類庫,但是需要注意的是其速度可能會比直接操縱char陣列要慢一些。reverse這個方法是我一直都想找到但是沒有找到的,在判斷回文的時候格外好用。string s abcdef string ss s ss abcdef reverse ss.begin s...
位址 前世今生
alu arithemetic and logic unit 書面意思是 算術與邏輯部件,運算器,算術與邏輯單元,通俗來講 cpu處理的資料位數。從4位 8位 16位 32位,處理能力越來越強。發問 16位計算能力如何處理20位的位址呢?cs ip 是一組暫存器,用於告知 cpu 當前將要讀取的彙編...