標籤:des c style blog a http
Linux系統中很多東西都是以指令碼代碼、設定檔的形式存在,使用Linux系統時,需經常對這些檔案進行編輯。很顯然,如果沒有文字編輯器,江湖之路寸步難行。
我的選擇是Vim。Vim是Linux系統上的最著名的文本/代碼編輯器,也是早年的Vi編輯器的加強版,被譽為文本/代碼編輯器之中最為優秀經典的上古神器。 它之所以會獲得如此美譽,我想主要有以下原因:1.它古老而神秘,學習曲線陡峭,難以駕馭,但是一旦學會則受益匪淺。如今被看作是高手、Geek們專用的編輯器。所以儘管 Vim 已經是古董級的軟體,但還是有無數新人迎著困難去學習使用。 2.輕便,無需多言,當僅僅只需要對某一文字檔(比如指令碼代碼、設定檔)進行簡單的編輯的時候,所使用的工具當然是越輕便越好。Vim同時也是閱讀文字檔的利器。 3.經典巧妙的編輯方式及強大的功能。它全程使用鍵盤操作,使用者必須記住一堆快速鍵、按鍵組合以及各種命令才能開始使用,一旦使用熟練則編輯效率遠超其餘編輯器,而且具有各種外掛程式、文法高亮、代碼補全、色彩配置等極其豐富的資源以及靈活的配置;
我主要在以下情況下使用Vim: 1.用來修改伺服器系統的設定檔; 很多時候, Linux 作為伺服器是不會開啟圖形介面的,當需要遠程操作時,只能利用 SSH“命令字元式”的 Shell 介面對其進行操作,這種情況下,Vim自然是首選。 2.用來閱讀核心原始碼和系統的指令碼; 理由同上。 3.用來寫簡單的程式,一般都是單檔案的程式,或多檔案但是只有少數幾個檔案的項目,比如學習一門程式設計語言的時候做練習題,喜歡看到檔案夾內乾乾淨淨,不喜歡一大堆類似.project的檔案; 4.裝B,花花綠綠的全文本字元介面,很酷。
不適合Vim使用的情境: 1.大的編程項目,大的項目還是最好使用IDE,如果要遠端連線沒有圖形介面的伺服器寫大項目,最好還是在伺服器上建立代碼倉庫;理由:VIM沒有好的專案管理功能,VIM的自動補全只建立在文本匹配上,沒有程式語言的語義分析功能。 2.對內容的輸入要求不高,但是經常需要設定顯示格式,且每個動作之間本身就有很多的停頓的工作,用其他GUI編輯器(如LibreOffice Writer)效率反而比VIM高。
有人說,Vim是“成也外掛程式、敗也外掛程式”。Vim靈活的配置和豐富的外掛程式極大地增強了它的功能,但是也極大地增加了我們管理Vim的難度。首先,在使用Vim之前,必須經過適當的配置,而Vim的配置又極其繁瑣。所以網上有很多諸如“萬能配置”、“最強配置”的文章,這些都可以參考。但是這些文章中有些存在很多錯誤,甚至前後內容重複、衝突,而且這些文章是“授人以魚,而不是授人以漁”,它們給出的配置雖然可以照抄,但是經常會讓人不明所以。Vim的外掛程式豐富,在網上不乏使用各種外掛程式將Vim配置成強大IDE的文章,但是Vim的外掛程式管理非常困難,因為每安裝一個外掛程式,都需要將該外掛程式的檔案分別放到Vim安裝路徑下的plugin、autoload、syntax、doc等目錄下。好在是Vundle橫空出世,它不僅解決了Vim外掛程式在檔案系統中分散的問題,同時能夠自動搜尋和下載外掛程式。
安裝和配置Vim
使用Vim之前當然需要先安裝,不過在Ubuntu中這都不算個事,一條sudo aptitude install命令就可以搞定。由於Vundle搜尋和下載外掛程式需要git,所以我同時安裝vim、gvim和git,如:
在使用者的主目錄中建立.vim目錄,在.vim目錄中建立bundle目錄,以後Vundle自動下載的外掛程式都儲存在這裡。然後,進入Bundle目錄,使用git clone命令下載vundle。
下面,開始展示我的設定檔(主目錄下的.vimrc檔案)。我的配置不同於網上流傳的“萬能配置”、“最強配置”。我的配置是能夠達到我想要的效果的“最簡單配置”。是第1到17行,這裡配置了Vundle,使用Vundle來管理外掛程式。在網上的一些配置中,常把Vundle的配置放到設定檔的最後,這是不對的。Vundle的配置必須放到最前面。(如果不用Vundle,用Pathogen外掛程式也一樣要把配置放到最前面。)這是因為,只有Vundle外掛程式運行以後,Vim才會到~/.vim/bundle目錄下載入其它的外掛程式,如果Vundle沒有先運行,Vim當然找不到下載的外掛程式了。
第18到44行,如,這是在GVim中截的圖,順便展示一下GVim的效果:
第45到68行:
第69到86行:
從中可以看出,我的設定檔很簡潔,並且將各種設定初略地分了類,並進行了簡單的注釋。該設定檔只對Vim進行最基本的設定,不包含任何鍵盤對應,也不包含任何指令碼代碼。我把Vim和GVim使用了不同的色彩配置,Vim使用經典的desert,而GVim則是網上被眾多人推崇的solarized,而且該色彩配置是使用Vundle自動下載的。
使用Vundle管理外掛程式
Vundle可以自動下載和安裝外掛程式,只需要在“My Bundles Here”注釋後面使用Bundle命令把所需要的外掛程式列出來,每個外掛程式一行,然後運行:BundleInstall命令即可。Vundle支援github.com和Vim的官網vim.org。前面的設定檔中,solarized色彩配置就是Vundle從github.com上下載的外掛程式。下面,看看怎麼從vim.org下載一個類比駭客帝國的外掛程式。如,在.vimrc中增加一行配置:
儲存該設定檔,並重新啟動Vim後,使用:BundleInstall命令,可以看到自動下載和安裝外掛程式:
輸入:Matrix命令,可以看到如下效果:
當然,該外掛程式純屬娛樂。娛樂過後還是刪除掉比較好。要刪除一個外掛程式,首先要從設定檔中將Bundle ‘matrix.vim--Yang‘這一行刪掉或注釋掉,如:
然後儲存設定檔,重新啟動Vim,運行:BundleClean命令,如,刪除一個外掛程式後的效果:
怎麼學習使用Vim
使用Vim之前必須得先做點功課,否則根本玩不轉,Vim只會滴滴滴亂響,讓人一頭霧水。好在是Vim有一個非常棒的協助系統,通過該協助系統,可以非常方便地學習Vim。比如前面展示的設定檔,我並沒有做過多的解釋,因為如果想瞭解某條設定的作用,只需要:help一下即可。下面以guioptions設定為例,來瞭解該協助系統的用法。從我的中可以看到,我的GVim是去掉了工具列、狀態列、菜單、捲軸的,只保留了編輯介面,要達到該效果,需要使用set guioptions=...來設定。要想對guioptions有更深入的瞭解,可以使用:help guioptions命令,如:
彈出的協助文檔:
如果想對Vim進行系統的學習,可以使用不帶參數的:help命令,如:
由於Vim的命令非常多,幾乎鍵盤上的每一個按鍵都有特定的用途,所以學習Vim的時候一定要做筆記哦。下面,我給大家分享一個Vim的鍵盤配置圖:
(該圖片非常大,可以儲存下來觀看,或者在新的視窗中開啟觀看。)
VIM的提示,看這裡http://vim.wikia.com/wiki/Vim_Tips_Wiki
使用Vim瀏覽Linux核心原始碼
下面來看實戰,使用Vim瀏覽Linux核心原始碼。工欲善其事、必先利其器,我前面講到了使用Vundle可以自動管理外掛程式,但是沒有講到Vim中究竟有哪些外掛程式可用。可以到Vim的官網看看哪些外掛程式的下載率比較靠前。地址這裡:http://www.vim.org/scripts/script_search_results.php?order_by=downloads
是排名前15名的外掛程式的。如果只是閱讀原始碼的話,我覺得taglist.vim和The-NERD-tree這兩個外掛程式就夠了,The-NERD-tree是瀏覽分類樹的利器,taglist.vim是瀏覽代碼的利器,可以非常方便地顯示原始碼中定義的各種類型、變數、函數等資訊,也可以非常方便地在各個符號之間跳轉。taglist.vim必須配合tags檔案使用,Linux的核心原始碼是C語言的,可以使用ctags命令產生tags檔案。如果是想把Vim打造成強勁的IDE,還需要別的功能,比如自動補全、自動產生代碼塊、自動注釋、自動Make、自動運行/調試等,以後需要用到相關功能的時候我再介紹相應的外掛程式。在這裡,只需要瀏覽原始碼,我覺得taglist.vim和The-NERD-tree足以。
首先,使用前文《玩轉Linux系統的方法論》中介紹的方法,找到Linux的核心原始碼,並安裝:
然後找出它們都在檔案系統的什麼地方:
taglist.vim需要tags檔案的支援,而tags檔案需要使用tags命令產生,所以需要安裝exuberant-ctags,如:
解壓Linux核心原始碼,並產生tags檔案,如:(這兩個步驟都需要有點耐心,因為解壓和產生tags這兩個操作都很花時間。)
下面,為Vim安裝外掛程式。從下面的圖中可以看出,除了taglist.vim和The-NERD-tree,我還安裝了a.vim,該外掛程式可以方便地實現在.c檔案和.h檔案之間跳轉。當外掛程式名稱中含有空格的時候,以“-”代替,如同The-NERD-tree。配置外掛程式如:
安裝外掛程式如:
瀏覽代碼前,需要告訴Vim使用哪一個tags檔案,在這裡,就是剛剛使用ctags產生的檔案,可以通過:set tags=/usr/src/linux-source-3.13.0/tags來設定。為了方便起見,我把該設定放到了.vimrc設定檔中,如:
然後,啟動Vim。如果編輯的是一個目錄的話(如下面的:e .命令,表示編輯目前的目錄),會自動跳出The-NERD-tree的介面,在目錄之間導航非常方便,如:
這裡以Linux核心中紅/黑樹狀結構的實現為例。使用The-NERD-tree定位到lib目錄下的rbtree.c檔案,按Enter鍵即可開啟代碼。輸入:TlistToggle命令可以開啟Taglist視窗,如:
在源檔案中瀏覽時,使用Ctrl+]快速鍵,可以非常方便地在符號的使用和定義之間跳轉。上面的是將控制台全屏後的效果,是不是很拉風?
再看看在GVim中瀏覽代碼的效果:
是將GVim視窗最大化後的效果,Solarized的深色主題和Ubuntu自己的紫色主題之間似乎不是很和諧,但是閱讀代碼還是很舒服。如果在Fedora 20中,那應該是會很清爽的了(Fedora的主題是偏藍色的)。
關於The-NERD-tree和taglist.vim這兩個外掛程式,如果想知道關於它們的更進階的用法的話,可以使用:help NERD_tree.txt和:help taglist.txt命令查看它們自己的協助文檔,如下兩圖:
以上全是圖形介面下的效果。如果在全字元介面下會是什麼樣子的呢?
在CentOS 5.10的全字元介面下,下面兩圖是在desert主題下的效果:
主要問題是螢幕太小,經常無法完整地顯示一整行代碼。
下面兩圖是使用solarized主題,background=dark時的效果:
如果設定background=light,則根本沒法看:
由此可見,solarized是一個專為GUI設計的色彩配置。以上更進一步證實了我在上一篇文章中所說的“如果想使用全字元介面還是拉倒吧”的觀點。
(京山遊俠於2014-06-04發佈於部落格園,轉載請註明出處。)