歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux Vim常用命令配置,插件ctags/taglist/WinManager/Easygrep,打造強悍IDE

對於很多經常使用Linux的童鞋來說,VIM並不陌生,有很多強悍的功能,但是比起Windows的下的某些代碼編輯查看工具,在方便和實用性上還是遜色不少。但是,VIM得可塑性非常強,可以擴展支持很多的插件,使用這些插件,我們能夠完全將其打造成一款Linux下的酷炫IDE。 於是通過參考相關的文章以及VIM官方插件的官方幫助,總結了這篇玩轉VIM,讓插件帶你飛的文章!

目的:在VIM下能夠高效的編寫閱讀源代碼!

接下來,我們先從source insight的基本功能說起,如下圖,可以看到基本的功能區域

1.源代碼編輯顯示區域

2.文件目錄樹顯示區域

3.函數符號顯示區域

4.文件符號顯示區域

5.當前選中的函數區域

6.隱藏的強大搜索功能

\

我們目的就是將VIM 打造成類似與source insight的強悍工具,下面我會為大家一步一步的介紹HowTo,在介紹之前,先上王道!大笑

\

圖中實現的功能:

1. 文件浏覽器

2. Tag浏覽器

3.字符高亮

4.自動補全

5.快速搜索

6.智能標簽

在進入正題之前,先把本教程需要的插件和工具的功能和下載地址列在此處,需要時可隨時下載。

相關的插件和工具:

 

插件 作用 下載 Vimdoc 中文幫助支持 https://sourceforge.net/projects/vimcdoc/files/vimcdoc/ Ctags 為整個源文件目錄創建tag https://sourceforge.net/projects/ctags/ Taglist 管理ctags生成的tag http://www.vim.org/scripts/script.php?script_id=273 WinManager 管理taglist和netrw http://www.vim.org/scripts/script.php?script_id=95 智能補全 自帶的智能補全插件 自帶 OmniCppComplete C++檔案智能補全插件 http://www.vim.org/scripts/script.php?script_id=1520 Echofunc 可以提示函數原型 http://www.vim.org/scripts/script.php?script_id=1735 Visual mark 高亮書簽 http://www.vim.org/scripts/script.php?script_id=1026 Quickfix 智能編譯 自帶 Easygrep 快速搜索功能 http://www.vim.org/scripts/script.php?script_id=2438 MiniBufExplorer 快速浏覽操作多個文件 http://www.vim.org/scripts/script.php?script_id=159 Cscope 集ctags和搜索功能與一身 http://cscope.sourceforge.net

 

Vim的基本配置與常用命令

這步主要熟悉一下VIM的相關的配置,不用安裝任何插件,對於已經比較熟悉VIM基本操作的童鞋可以忽略了!

基本操作命令

對於基本的操作命令不詳細多說,已經有大神總結了,直接借鑒過來,原文已經寫在參考文獻的link上 \  

中文幫助包

不習慣使用英文的同學有福利了,看著母語,感覺還是爽爽的,水平高的童鞋可以忽略。 安裝: a.tar zxvf vimcdoc-.tar.gz b.cd vimcdoc- c../vimcdoc.sh -i 執行完上述3步,就完成了中文版幫助的安裝,不需要root權限,效果如下圖: \

Vim基礎配置

這部分主要是通過配置~/.vimrc來實現的,默認情況下VIM好多的功能是享受不到的,需要配置研究挖掘才能像sourceinsight那樣顯示的很nice,VIM的美需要我們使用探索的眼睛去挖掘! 當然VIM的強大功能就是來源於各種插件以及基礎配置的結合,一般情況下在~/下新建一個.vimrc的配置文件用作配置

這裡列出幾點:

a.在VIM中捕捉鼠標信號

:set mouse=a

b.設置語法高亮

syntax on

c.顯示行號

set nu

d.高亮顯示光標所在的行為紅色,顏色可以修正,也可以之家下劃線

 

set cursorline
hi CursorLine cterm=NONE  ctermbg=darkred ctermfg=white
hi CursorColumn cterm=NONE ctermbg=darkred ctermfg=white

打造tag預覽,享受飛來飛去

  要想在source code中飛來飛去,這個就需要請ctags和taglist二位出山了,ctags生成source code的tag,然後taglist就是通過圖形界面的形式將這些tags給顯示出來,供我們操作  

ctags

ctags: 主要功能建立整個源碼庫中函數 變量 宏定義等的tag,方面在閱讀源代碼中能夠快速的定位切換,這樣可以實現跳來跳去...

Tags文件中包括這些對象的列表:用#define定義的宏枚舉型變量的值函數的定義、原型和聲明名字空間(namespace)類型定義(typedefs)變量(包括定義和聲明)類(class)、結構(struct)、枚舉類型(enum)和聯合(union)類、結構和聯合中成員變量或函數VIM用這個“tags”文件來定位上面這些做了標記的對象。

如何使用tags?

a.安裝

cmd:book@book-virtual-machine:~/source_code/linux-3.18.36$sudo apt-get install ctags
或者是通過表格中的地址下載,make/make install這樣的方式安裝,需要root權限

b.使用

->ctags -R * “首先要建立tags,進入源代碼目錄樹使用這個cmd,可以生成tags文件。 -> 配置~/.vimrc,將產生的tag添加到vim中
    set tags=tags
        set tags+=./tags "add current directory's generated tags file

->打開vim,嘗試使用tags,鼠標指針指向一個函數名字,然後使用CTRL+]按鍵,看是否有跳到函數實現處!

c.常用的cmd

跳轉到光標下函數或者變量的標簽 : CTRL + ]

返回上一個標簽: CTRL + T

跳到指定的標簽: tag [TagName]

新創建一個窗口,顯示標簽的內容 CTRL + W + ]

新建一個預覽窗口,顯示指定標簽內容:ptag TagName

關閉預覽窗口: pclose

在預覽窗口編輯,頭文件 pedit file.h

說了這麼多,來幾張圖欣賞下:

這張圖是光標定位到unix_mkname上,然後按CTRL+W+],就會新建一個窗口,並顯示unix_mkname的內容,這個cmd是使用最頻繁的,切記,當然後期可以用鼠標代替,但是快捷鍵比鼠標可快多了,CTRL+T是返回到前一個tag

\

這張圖是如何搜索一個tag,:tag xxx, 直接跳轉到tag處

\

  這張圖是如何搜所tag 並在一個新窗口顯示

\

 

taglist

taglist插件是以vim腳本的形式存在,因此只需要將其下載下來放到相應的目錄即可。taglist基於ctags才能發揮作用,因此在使用taglist之前,確保已經安裝了ctags。

a.安裝

下載後放到~/.vim 目錄下,直接解壓 unzip taglist_46.zip

進入doc 目錄,開啟vim 並且執行:helptags. cmd 來 處理taglist help 文件,如果不執行此步驟,你不會跳到taglist的help topic

b.配置

要方便的使用taglist,需要進行一些配置放到~/.vimrc中

let Tlist_Show_One_File=1   "taglist同時只展示1個文件的sysmbol列表,0 支持展示多個"
let Tlist_Use_Right_Window=0  "0的話就是顯示在左邊, 1 是右邊"
let Tlist_Exit_OnlyWindow=1 "當taglist是最後一個窗口時,自動退出Vim"
let Tlist_Process_File_Always=1 "實時更新tags"

c.使用

經過上述配置可以打開vim,使用:Tlist來打開關閉Taglist的管理窗口,可以看到函數的macro、struct、function的tag,使用鼠標雙擊即可跳轉!   使用過程中的圖示,可以看到左邊顯示了本file的所有symbol,選擇你自己的需要的雙擊,直接跳過去!   \

 

管理器Winmanager

Winmanager是在Vim6.0中實現經典windows類型的IDE的插件,安裝了此插件,你將會有一個目錄樹並,可以單獨的操作每一個目錄,每一只file,buffer list 隨著你動態的編輯改變, 它盡可能的占用最小的空間來展示所有當前被列出的windows,這裡所說的管理器主要用來管理我們的文件浏覽器netrw和標簽浏覽器taglist,netrw是vim自帶的插件!

a.安裝

1.下載http://www.vim.org/scripts/script.php?script_id=95 2.Copy 下載file到~/.vim/ 3.unzip 解壓

- plugin/
winmanager.vim
winfileexplorer.vim
wintagexplorer.vim
- doc/
winmanager.txt

4.vim -c "helptags ~/.vim/doc" -c "q"(unix)

b.配置

let g:winManagerWindowLayout=' FileExplorer | TagList' “設置要管理的組件”
nmap wm:WMToggle "映射快捷鍵wm"

c使用

使用wm 打開關閉 FileExplorer 和 Taglist 如下圖,也可以像Windows 一樣 雙擊進入某個文件了...

更多方便的操作與配置 可以參考 :help winmanager,不斷學習才能打造經典!

使用圖示:

\

精雕細琢

經過上面的配置,一個IDE基本成型,能夠不斷在symbol中跳來跳去,也能夠實施的去找到自己需要的File 並且快速顯示,其實這些並不能完全滿足我們,仍然需要進一步精雕細琢的打磨 才能出好的東西!接下來會介紹幾款小的插件,讓我們的操作更加流暢,如果你知道好的插件,也可以留言告知,後面會增加!

Omnicompletion

全能補全的功能source insight 都沒有,使用Microsoft Visual Studio的visial studio的人應該使用過特別酷,這個是vim自帶的,不用下載,直接使用

使用前配置~/.vimrc

filetype plugin indent on "文件類型自動檢測"

CTRL-X CTRL-O 開始全能補全 直接上圖:看著是不是有點眼花缭亂,比較復雜的函數使用還可以,簡單的就別用了.. 選擇恐懼症者慎用! \唯唯一的不足之處需要選定挨個挑...多了還是很麻煩

OmniCppComplete

如果上一個用不習慣可以使用這個OmniCppComplete,這個腳本運行至少咋7.0或者更高的版本,提供了對C/C++支持,不過這個tool的基礎也是ctags的數據庫 下載地址:http://www.vim.org/scripts/script.php?script_id=1520 並且在~/.vim 目錄下解壓   優勢與功能:     - Complete namespaces, classes, structs and union members.
- Complete inherited members for classes and structs (single and multiple inheritance).
- Complete attribute members eg: myObject->_child->_child etc...
- Complete type returned by a function eg: myObject->get()->_child.
- Complete the "this" pointer.
- Complete a typedef.
- Complete the current scope (global and class scope).
- Complete an object after a cast (C and C++ cast).
- Complete anonymous types (eg: struct {int a; int b;}g_Var; g_Var.???). It also works for a typedef of an anonymous type.   在使用此工具之前tags需要這樣生成:

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . --c++-kinds=+p : 為C++文件增加函數原型的標簽 --fields=+iaS : 在標簽文件中加入繼承信息(i)、類成員的訪問控制信息(a)、以及函數的指紋(S) --extra=+q : 為標簽增加類修飾符。注意,如果沒有此選項,將不能對類成員補全
同時需要配置下.vimrc [這是參考大神的配置,可以選擇性配置]
"-- omnicppcomplete setting --
" 按下F3自動補全代碼,注意該映射語句後不能有其他字符,包括tab;否則按下F3會自動補全一些亂碼
imap  
"按下F2根據頭文件內關鍵字補全”
imap  
set completeopt=menu,menuone " 關掉智能補全時的預覽窗口
let OmniCpp_MayCompleteDot = 1 " autocomplete with .
let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
let OmniCpp_GlobalScopeSearch=1 " enable the global scope search
let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
"let OmniCpp_DefaultNamespaces=["std"]
let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column
let OmniCpp_ShowAccess=1
相關的幫助文檔可以使用 :help omnicppcomplete 看效果圖 \  

Echofunc 提示函數原型

這個插件用處不是特別大,但是在coding的時候有也是很nice的

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

主要功能就是在命令欄顯示C/C++的函數聲明

安裝: 把echofunc.vim 放到~/.vim/plugin目錄下即可

使用如下cmd去create tags 包含語言和signature fields

ctags -R --fields=+IS

介紹:
在插入模式下,你寫完一個函數名字去寫‘(’的時候這個函數的聲明就會自動顯示在命令行裡,你可以使用ALT+- 和ALT+=來循環切換同樣函數名的聲明(Configurable via EchoFuncKeyPrev and EchoFuncKeyNext) .

另外一個feature就是 如果在編譯vim的時候+balloon_eval, 那麼當鼠標放在一個函數名字上之後會彈出tip顯示

因為信息欄經常被其他的插件給清除,一個不錯的選擇就是讓函數聲明信息在狀態欄顯示, 首先增加%{EchoFunGetStatusLine()}到你的狀態欄的option,然後增加一個配置在.vimrclet g:EchoFuncShowOnStatus = 1

在statusline 選項

可選配置項:

let g:EchoFuncShowOnStatus = 1 "顯示在狀態欄

效果如圖

\

高亮書簽Visual Mark

像UltraEdit的Bookmark一樣,主要是在看code的時候 對經常看的地方可以加標簽,來回切換。Visual Mark就實現了這樣一個功能

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

 

a. 對於gvim來說 直接使用CTRL + F2來 添加一個visual mark

對於vim/gvim 使用mm來添加一個visual mark, 添加上mark之後 ,本行會變成高亮

b. 使用F2來在各個mark中來回切換,使用shift F2 反向切換

If you do not like the highlighting scheme, you could change "SignColor" in the script

這句話的意思是在visual mark.vim中修改顏色

if &bg == "dark"  // 根據你的背景色風格來設置不同的書簽顏色
 highlight SignColor ctermfg=white ctermbg=blue guifg=wheat guibg=peru
else             // 主要就是修改guibg的值來設置書簽的顏色
 highlight SignColor ctermbg=white ctermfg=blue guibg=grey guifg=RoyalBlue3
endif

 

使用可以看圖:在這個地方會出現一個錯誤提示:Can not set language to en_Us 這個地方看起來不兼容linux,可以修改下visualmark.vim

 

將
    exec ":lan mes en_US" 
改為
    exec ":lan POSIX"

 

\

 

Quickfix

其實這個場景大約可以用在寫測試程序中,一般的大程序比較復雜弄起來不是很方便,我們在開發過程中,經常要寫代碼,編譯,修改編譯錯誤,這個過程會數十遍上百遍的重復。如果你是根據編譯器輸出的錯誤信息,打開出錯的文件,找到出錯的行,然後再開始修改,那效率未免太低下了。利用vim的quickfix模式,可以大大加快這一過程,你可以在vim啟動編譯,然後vim會根據編譯器輸出的錯誤信息,自動跳到第一個出錯的地方,讓你進行修改;修改完後,使用一個快捷鍵,跳到下一個錯誤處,再進行修改,方便的很。

如果你的project使用了makefile,那麼其實vim的make cmd就夠用了,如果使用時cmd 編譯,那麼血藥配置makeprg的值。用一個很簡單的例子來看下如何使用:

配置編譯:

:set makeprg=gcc\ test.c\ -o\ hello

make

這樣就可以看到結果了,可以使用copen打開QickFix close 關閉QickFix, 看圖說話

\

EasyGrep

其實在寫EasyGrep之前,准備是使用csope OR grep插件來講述搜索的功能,但是偶然間發現了EasyGrep這個插件,使用了下,覺得EasyGrep更好用一些,它是一個在多個文件中高效的查找與替換的工具,要VIM 7.0以上才會支持, Vim其實已經集成了文件間的搜索功能,使用vimgrep 和grep 命令,但是EasyGrep使得使用這些功能更加的簡單,並且還提供了更加強勁的Replace操作,默認vim中替換操作可不是那麼容易操作哈,使用Easygrep,你看搜索你想要的關鍵詞在所有的文件中或者僅僅是打開的文件中以及或者是當前的文件。另外,你也可以非常使用的搜索隱藏的文件,在linux中就是.開頭的文件而且也有效的利用了Quickfix的窗口,將結果顯示在裡面!

配置.vimrc

let g:EasyGrepFileAssociations=~/.vim/plugin/EasyGrepFileAssociations "指定同步文件類型"
let g:EasyGrepMode = 2  "跟蹤當前擴展"
let g:EasyGrepCommand = 0 “選擇cmd為vimgrep,但是測試使用Grep也可以”
let g:EasyGrepRecursive = 1 “啟動遞歸搜索”
let g:EasyGrepHidden = 1 “搜索隱藏文件”
let g:EasyGrepFilesToExclude = “*.bak, *~, cscope.*, *.a, *.o, *.pyc, *.bak”   “排除不想搜索的file類型”
let g:EasyGrepAllOptionsInExplorer = 1 “在使用GrepOption是是否顯示所有配置項, 1 是顯示”
let g:EasyGrepWindow = 0 “默認情況下也為0  就是Quickfix窗口”
let g:EasyGrepJumpToMatch = 1 “跳轉第一個..”
let g:EasyGrepInvertWholeWord = 1 “搜索整個單詞”
let g:EasyGrepFileAssociationsInExplorer = 1; "文件中顯示關系表"
let g:EasyGrepReplaceWindowMode = 1 “全局代替時,執行當前窗口與下一個窗口拆分”

使用快捷鍵:

vv : 實際上是\ v v 按下這三個按鍵之後,會搜索光標所在的字串, ccl 取消顯示的窗口

vr: 先搜索 後替代

使用cmd:

:Grep [arg] 搜索指定的參數

:Replace [target] [replacement] 替代

:ReplaceUndo 撤銷

:GrepOptions 打開配置界面可以配置一些參數

 

GitHub上有一個比較好的使用例子,在這裡展示給大家

 

\

MiniBufExplorer

這個工具主要使用在編輯多個文件的時候,其實還是很常用了,比較簡單

下載之後,復制minibufexpl.vim到.vim/plugin目錄下即可。

./.vimrc中不用配置什麼就可以使用了! 如果做一些配置 詳細的解釋可以參照https://github.com/fholgado/minibufexpl.vim的說明

主要操作是使用鼠標切換文件,雙擊即可,也可以配置成tab!

直接上圖:

\

Copyright © Linux教程網 All Rights Reserved