【利器】Vim配置成IDE方案以及使用

jiange_zh發表於2016-09-18

“工欲善其事必先利其器”。

在之前就一直打算把vim作為自己的編輯器來工作的,但是由於vim的配置比較複雜,自己也還不知道自己需要哪些功能,並且公司的辦公機器是windows系統,linux開發機器則不方便裝自己的軟體,所以暫時用的是windows下的eclipse。

eclipse用了3個月,也大概知道自己在工作中需要哪些功能了。總的來說,eclipse的功能很全面,基本夠我用了,但是個人比較喜歡vim的各種操作(比如刪除一行用dd,上下快速移動n行等等),雖然裝了eclipse的vim外掛,但是用起來有很多bug,所以決定還是用回純正的vim。

目前的打算是,在windows機器上裝一個linux的虛擬機器,虛擬機器和宿主機通過共享資料夾來同步程式碼(雙向),宿主機跟開發機則使用同步工具進行單向同步(不使用雙向同步是因為開發機上的程式碼同時用於編譯,不想把編譯產生的檔案給同步到宿主機上)。之後所有的程式碼開發在虛擬機器上進行(最好能有雙螢幕,一個螢幕給linux虛擬機器,一個螢幕給windows宿主機)。

vim配置下載以及說明:

https://github.com/jiangeZh/vim-ide

下面是我常用的功能說明以及一些需要自己另外配置的內容:

1.Buffer瀏覽與操作——F8

這裡列出了目前開啟的檔案,可通過這個頁面來切換檔案。

按d鍵可刪除buffer。

這裡寫圖片描述

2.檔案瀏覽器——F2

由於檔案瀏覽器不是經常需要用到,所以預設是隱藏的,開啟檔案後該欄目會消失,如果需要固定該欄目,只需刪除家目錄下 .vimrc中的let NERDTreeQuitOnOpen=1這行,之後在nerdtree裡開啟檔案後nerdtree就不會消失了。

這裡寫圖片描述

3.tag瀏覽器——F3

tag瀏覽器顯示了當前檔案下的函式,變數,typedefs等等。

可切換到右邊視窗並快速跳轉到指定的函式。

切換視窗命令如下:

“ctrl-h”: move cursor to left window in vim
“ctrl-j”: move cursor to down window in vim
“ctrl-k”: move cursor to up window in vim
“ctrl-l”: move cursor to right window in vim

這裡寫圖片描述

4.標頭檔案與實現檔案切換——F4

通過F4可快速在標頭檔案和實現檔案之間切換,注意前提是兩個檔案都已經開啟了。

5.更新索引——F5

F5快捷鍵會把ctags,cscope兩個索引都更新了。

6.高亮檔案中所有當前單詞——F7

這個功能十分有用,比如你想看看這個變數在哪裡使用了,可以之間高亮,不需要動用搜尋功能:

這裡寫圖片描述

7.是否將tab擴充套件為space——F9

tab的使用容易使得程式碼排版比較亂,因為有的tab是4個空格的長度,有的是8個空格的長度。將tab擴充套件位space,即可避免這個問題~我們的配置預設是擴充套件的。

8.改變tab與space的對應關係——F10

對一個tab對應4個space還是8個space進行配置。

9.單檔案內查詢與替換

查詢

/love 從游標位置向前搜尋關鍵詞 love
?love 從游標位置向後搜尋關鍵詞 love

正常模式下使用 n 或 N 命令執行 向前查詢 或 向後查詢 下一個關鍵詞

:set ic 忽略大小寫命令,ic 為 ignore case 縮寫
:set is 邊輸入邊顯示匹配結果,is 是 incsearch 命令的縮寫
:set hls 高亮顯示匹配結果,hls 為 highlight search 縮寫

可將上述設定放入.vimrc 檔案中,設為預設搜尋設定

:set noic nois nohls 將取消上述設定

:noh 暫時取消高亮顯示,不會影響下次高亮顯示匹配結果

替換

單檔案中使用 :s 命令進行替換操作

幾個常用的標記 :

% 所有行 g 單行內所有匹配項 i 忽略大小寫 c 確認是否替換

關鍵詞 old 替換為 new

:s/old/new 將游標所在行第一個 old 替換為 new
:s/old/new/g 將游標所在行所有 old 替換為 new
:%s/old/new/gc 全文執行替換,詢問是否替換
:3,10s/old/new/gic 將第3行到第10行內容替換,忽略大小寫,且每個詢問是否替換

g i c 可自由組合

10.多檔案內查詢

vim 多檔案查詢方法

正常模式下使用 :vim 或 :vimgrep 命令執行多檔案搜尋

搜尋的時候涉及到選取檔案問題,這裡主要用到 * 作為萬用字元,
** 表示資料夾及子資料夾下的所有檔案

搜尋 love 關鍵詞

:vim/love/*                     #當前資料夾下的所有檔案  
:vim/love/**                    #當前資料夾及子目錄下的所有檔案  
:vim/love/**/*.php              #當前資料夾及子目錄下的所有 php 檔案  
:vim/love/*.php aa/**/*.php     #當前資料夾下的 php 檔案和 aa 目錄及子目錄下的 php 檔案  

使用 * 和 可任意組合出想要搜尋的檔案

:cw 檢視搜尋結果
:ccl 關閉搜尋結果
:cn 查詢下一個
:cp 查詢上一個

cscope 多檔案查詢方法

:cs find s word
在專案中查詢變數或者函式名word

:cs find t word
在專案中查詢文字word

11.快速對齊

“=”: 對齊所選的程式碼

這裡寫圖片描述

這裡寫圖片描述

12.快速註釋與取消註釋

需要先使用ctrl-v選擇。

“,”: comment selected code
“.”: uncomment selected code

13.配置相對行號

在.vimrc中新增:

set relativenumber

即可顯示相對行號,為什麼要用相對的呢?因為在vim中往上或者往下移動n行的操作比較多,因此使用相對行號十分方便,不需要我們去計算!

而且頁面右下角顯示了絕對行號和列號,因此這樣子我們可以同時看到絕對行號和相對行號,方便操作。

這裡寫圖片描述

14.撤銷與重做

u是撤銷,ctrl-r是重做。

15.複製貼上

先按v或shift-v,選中一些內容,按y複製,把游標移動到想要貼上的位置,按p。

16.選中一個單詞

viw:它的作用是選取一個單詞(word),無論游標在這個單詞的哪個位置都能選中整個單詞。

17.臨時退出vim

ctrl-z 臨時退出vim到後臺,退出時會得到一個任務編號:

這裡寫圖片描述

通過 fg %任務編號 恢復到前臺(fg是frontground的意思,同理有bg,background為後臺執行)。

18.語法高亮

在你的 ~/.vimrc 檔案中增加下面幾句話:

syntax enable
syntax on

再重新啟動vim。

如果你不喜歡這個配色方案你可以在”編輯->配色方案”(gvim)中選擇一個你滿意的配色方案,比如desert,然後在~/.vimrc檔案中增加下面這句:

colorscheme desert

19.突出當前行

突出當前行設定:

set cursorline

以上設定之後當前行會有下劃線。

如果想要更豐富的色彩,可以如下設定:

hi CursorLine cterm=NONE ctermbg=black ctermfg=green guibg=NONE guifg=NONE

ctermbg是整行的背景,ctermfg是整行的前景。
guibg和guifg則是下劃線的背景和前景。

(我目前只有下劃線,色彩方案沒有配置成功TAT)

20.標頭檔案,變數,函式定義跳轉

標頭檔案

游標在include的標頭檔案上時,使用gf命令可跳轉到該標頭檔案內,返回使用命令 ctrl-o 。

需要注意的是,gf命令會到path這個變數下面查詢,需要在.vimrc上設定。比如我們的專案在 /home/jiange/MyProj 下,則新增如下配置:

set path=/home/jiange/MyProj/**,    #我們的專案
set path+=/usr/include/**       #庫標頭檔案

變數與函式

游標選中要跳轉的單詞,ctrl-] 即可顯示出現該tag的位置,輸入相應數字可跳轉過去。

這裡寫圖片描述

如果想跳轉回來,則使用 ctrl-t 。

如果跳轉失敗,嘗試按F5來更新下索引,再重試。

21.去除多餘的^M

windows和unix的換行符號不一樣,需要轉換:

$ dos2unix filename

22.提示函式原型

echofunc可以在命令列中提示當前輸入函式的原型。

echofunc下載地址:http://www.vim.org/scripts/script.php?script_id=1735

下載完成後,把echofunc.vim檔案放到 ~/.vim/plugin資料夾中。

當你在vim插入(insert)模式下緊接著函式名後輸入一個”(“的時候, 這個函式的宣告就會自動顯示在命令列中。如果這個函式有多個宣告, 則可以通過按鍵”Alt+-“和”Alt+=”向前和向後翻頁, 這個兩個鍵可以通過設定g:EchoFuncKeyNext和g:EchoFuncKeyPrev引數來修改。

這個外掛需要tags檔案的支援, 並且在建立tags檔案的時候要加選項”–fields=+lS”(OmniCppComplete建立的tag檔案也能用), 整個建立tags檔案的命令如下:

$ ctags -R --fields=+lS

以上在我們的配置檔案中是F5按鍵的配置處。

其他外掛說明詳見echofunc.vim

如果你在編譯vim時加上了”+balloon_eval”特性,那麼當你把滑鼠放在函式名上的時候會有一個tip視窗彈出, 該視窗中也會有函式的宣告。

23.程式碼摺疊

摺疊fold用於把緩衝區內某一範圍內的文字行顯示為螢幕上的一行。
那些文字仍然在緩衝區內而沒有改變。受到摺疊影響的只是文字行顯示的方式。

摺疊的好處是,通過把多行的一節摺疊成帶有摺疊提示的一行,會使你更好地瞭解文字的巨集觀結構。

摺疊方式foldmethod

vim提供以下6種方法來選定摺疊方式:

manual 手工定義摺疊
indent 更多的縮排表示更高階別的摺疊
expr 用表示式來定義摺疊
syntax 用語法高亮來定義摺疊
diff 對沒有更改的文字進行摺疊
marker 對文中的標誌摺疊

摺疊級別foldlevel

‘foldlevel’ 是個數值選項:數字越大則開啟的摺疊更多。
當 ‘foldlevel’ 為 0 時,所有的摺疊關閉。
當 ‘foldlevel’ 為正數時,一些摺疊關閉。
當 ‘foldlevel’ 很大時,所有的摺疊開啟。

摺疊欄foldcolumn

‘foldcolumn’ 是個數字,它設定了在視窗的邊上表示摺疊的欄的寬度。當為0時,沒有摺疊欄。最大是12。

一個開啟的摺疊由一欄來表示,頂端是 ‘-‘,其下方是 ‘|’。這欄在摺疊結束的地方結束。當摺疊巢狀時,巢狀的摺疊出現在被包含的摺疊右方一個字元位置。

一個關閉的摺疊由 ‘+’ 表示。

當摺疊欄太窄而不能顯示所有摺疊時,顯示一數字來表示巢狀的級別。

在摺疊欄點選滑鼠,可以開啟和關閉摺疊:
- 點選 ‘+’ 開啟在這行的關閉摺疊
- 在任何其他非空字元上點選,關閉這行上的開啟摺疊

在vim配置檔案.vimrc中加入如下的配置:

    "--fold setting--
    set foldmethod=syntax " 用語法高亮來定義摺疊
    set foldlevel=100 " 啟動vim時不要自動摺疊程式碼
    set foldcolumn=5 " 設定摺疊欄寬度

常用命令
za 開啟/關閉在游標下的摺疊
zA 迴圈地開啟/關閉游標下的摺疊
zo 開啟 (open) 在游標下的摺疊
zO 迴圈開啟 (Open) 游標下的摺疊
zc 關閉 (close) 在游標下的摺疊
zC 迴圈關閉 (Close) 在游標下的所有摺疊
zM 關閉所有摺疊
zR 開啟所有的摺疊

幫助文件
:help usr_28.txt
:help fold.txt

24.檔案編碼檢測與轉換

雖然小組的程式碼明確規範使用utf-8,但是有一些老程式碼或者同事用的編輯器使用的是gbk編碼,一時沒法轉過來,所以常常會出現亂碼問題。使用eclipse的時候,裝了一個外掛,可以推測當前檔案編碼,以及便捷地進行編碼格式的轉換,如果vim也有類似的功能,那麼編碼問題就迎刃而解了!

Vim外掛FencView-自動識別編碼

下載地址:
http://www.vim.org/scripts/script.php?script_id=1735

把外掛放到plugin目錄,然後自動生效,命令模式輸入:

FencAutoDetect :自動識別檔案編碼
FencView:開啟一個編碼列表視窗,使用者選擇編碼reload檔案

在vim中:F然後直接tab按鍵就可以選了,不用全部輸入。

首先輸入:FencAutoDectect自動檢測,然後就可以:FencView檢視自動檢測到的字符集是什麼了。

重複輸入:FencView 視窗在’關閉/開啟’之間切換。

高亮顯示的字符集就是當前檔案使用的字符集了。

非常有用的選項:

let g:fencview_autodetect = 1   #開啟檔案時自動識別編碼
let g:fencview_checklines = 10 #檢查前後10行來判斷編碼

還可以指定識別編碼的工具–$FENCVIEW_TELLENC。

如果mount的iso資料夾裡面出現了亂碼,判斷iso的編碼:

$ ls /mnt/iso > ~/gliethtp
$ vim ~/gliethttp

然後

:F輸入tab按鍵
:FencAutoDectect
:FencView

就可以看到iso的編碼方案了。

對於vim開啟檔案時如何自動識別,可以有如下2個方法:

1.在.vimrc中加入如下一行

set fileencodings=utf-8,gb2312,ucs-bom,euc-cn,euc-tw,gb18030,gbk,cp936

2.在.vimrc中加入上面安裝的fencview外掛指令

let g:fencview_autodetect=1
let g:fencview_auto_patterns='*'

對於方法2因為每次開啟都將執行檢測運算,所以效率比較低,使用方法1效率最高的(推薦)。

當方法1不能識別時,可以使用:FencAutoDectect自動檢測,然後追加encoding到方法1中。

到此,我們的vim的功能基本夠用了~接下來可以美美地敲程式碼了,純鍵盤操作,不再需要像eclipse那樣一會鍵盤一會滑鼠!

相關文章