“工欲善其事必先利其器”。
在之前就一直打算把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。
一個開啟的摺疊由一欄來表示,頂端是 ‘-‘,其下方是 ‘|’。這欄在摺疊結束的地方結束。當摺疊嵌套時,嵌套的摺疊出現在被包含的摺疊右方一個字元位置。
一個關閉的摺疊由 ‘+’ 表示。
當摺疊欄太窄而不能顯示所有摺疊時,顯示一數字來表示嵌套的層級。
在摺疊欄點擊滑鼠,可以開啟和關閉摺疊:
- 點擊 ‘+’ 開啟在這行的關閉摺疊
- 在任何其他非Null 字元上點擊,關閉這行上的開啟摺疊
在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=1let g:fencview_auto_patterns='*'
對於方法2因為每次開啟都將執行檢測運算,所以效率比較低,使用方法1效率最高的(推薦)。
當方法1不能識別時,可以使用:FencAutoDectect自動檢測,然後追加encoding到方法1中。
到此,我們的vim的功能基本夠用了~接下來可以美美地敲代碼了,純鍵盤操作,不再需要像eclipse那樣一會鍵盤一會滑鼠。