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

來源:互聯網
上載者:User

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

在之前就一直打算把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那樣一會鍵盤一會滑鼠。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.