vim進階之新增ctags和cscope
你想要一個非常強大的ide嗎?除了eclipse,visual studio,android studio等我們就沒有選擇了嗎?這樣想就大錯特錯了,在linux下使用增強功能後的vim,emacs一樣能達到eclipse,visual studio,source insight的功能,今天給大家分享下ctags 和cscope的配置和使用
環境:64bit Ubuntu Desktop 12.04 LTS
快捷通道:https://github.com/alexanderkenndy/advancevim
先來看看效果嚐嚐鮮
下面就開始配置之旅吧
1.配置ctags
ctags的方便之處就在於多檔案編輯,檔案定位跳轉,通過命令生成一個tags檔案記錄原始檔的索引,幫您快速定位程式碼,它支援的語言非常多,如c,c++,java等。
1.1下載ctags-5.8.tar.gz,
via:https://github.com/alexanderkenndy/advancevim/blob/master/ctags-5.8.tar.gz
another :http://ctags.sourceforge.net
1.2解壓安裝
$ tar -xf ctags-5.8.tar.gz
$ ./configure
$ make
$ sudo make install
1.3生成索引檔案
1.4使用方式進入到原始檔所在目錄,輸入如下命令
$ ctags -R
此命令會在當前目錄生成一個名為tags的檔案,使用vim開啟檔案,設定生效命令
:set tags=./tags
如果經常在此目錄編輯,可以將此命令配置到vimrc中,如下是我的配置:
if has("tags") set tags=tags endif set autochdir
將游標定位在c/c++中的一個函式或成員變數中,按住Ctrl+] 則跳轉到方法的宣告處,再次按下Ctrl+t,則又跳回來。
2.配置cscope
cscope說自己就是一個超頻的ctags,使用過非常強大,不但分析出哪個函式定義的何處,還能分析出在哪裡被呼叫
2.1下載cscop-15.8a.tar.gz
via :https://github.com/alexanderkenndy/advancevim/blob/master/cscop-15.8a.tar.gz
another:http://cscope.sourceforge.net
2.2解壓安裝
$ tar -xf cscop-15.8a.tar.gz
$ ./configure
$ make
$ sudo make install
Tip:
1.如果在make過程中出現 curses.h not found 異常導致make失敗,則需要安裝libncurses5-dev包,最好連libncursesw5-dev一併安裝
2.如果在make過程中出現 fscanner.c 錯誤,並且伴隨著Flex的問題,則需要安裝bison和flex,安裝方式一樣:sudo apt-get install bison flex.
然後在 make clean,然後繼續make。
2.3生成索引檔案
我關注的是.cc,.h,.cpp檔案,所以程式碼如下
find . -name "*.cc" -o -name "*.h" -o -name "*.cpp" > cscope.files cscope -bkq -i cscope.files
命令執行完畢之後,會生成三個檔案,但是有一個檔案時我們比較關心的,就是 cscope.out,開啟vim,使用命令
當然好是要先配置vimrc,如果是通過apt-get install 安裝vim的話,預設vimrc是存放在 /etc/vim/下:cs add /home/alexanderkenndy/node-v0.10.21/src/cscope.out
nmap <C-x>s :cs find s <C-R>=expand("<cword>")<CR><CR> nmap <C-x>g :cs find g <C-R>=expand("<cword>")<CR><CR> nmap <C-x>c :cs find c <C-R>=expand("<cword>")<CR><CR> nmap <C-x>t :cs find t <C-R>=expand("<cword>")<CR><CR> nmap <C-x>e :cs find e <C-R>=expand("<cword>")<CR><CR> nmap <C-x>f :cs find f <C-R>=expand("<cfile>")<CR><CR> nmap <C-x>i :cs find i ^<C-R>=eptend("<cfile>")<CR>$<CR> nmap <C-x>d :cs find d <C-R>=expand("<cword>")<CR><CR>
2.4使用方式
使用vim開啟檔案之後,找到一個你想要檢視的方法,輸入快捷鍵:Ctrl-x,然後按下s,則跳轉到當前方法的宣告處,相當於輸入:cs find s 加上方法名
3.配置 TagList 外掛
taglist的功能十分強大,可以很方便的瀏覽原始碼,類似於eclipse的outline,列出程式碼當中定義的區域性變數,方法名等,可以通過taglist快速定位到程式碼指定的位置。
據官網說支援的語言非常多,有java,c++,python,perl,erlang等主流程式設計語言都支援吧。
3.1 外掛環境
想要在vim中新增幫助文件,外掛,以及語法高亮定義檔案,則需要在~/.vim/下建立三個資料夾,分別名為 plugin,doc,syntax,所有的外掛都放在plugin下,我的目錄結構如下:
3.2下載外掛
via :https://github.com/alexanderkenndy/advancevim/tree/master/plugin
another :http://www.vim.org/scripts/script.php?script_id=273
3.3 配置外掛
下載放到plugin 目錄後,還需要在vimrc中配置如下程式碼段
let Tlist_Ctags_Cmd='/usr/local/bin/ctags' let Tlist_Show_One_File=1 let Tlist_OnlyWindow=1 let Tlist_Use_Right_Window=0 let Tlist_Sort_Type='name' let Tlist_Exit_OnlyWindow=1 let Tlist_Show_Menu=1 let Tlist_Max_Submenu_Items=10 let Tlist_Max_Tag_length=20 let Tlist_Use_SingleClick=0 let Tlist_Auto_Open=0 let Tlist_Close_On_Select=0 let Tlist_File_Fold_Auto_Close=1 let Tlist_GainFocus_On_ToggleOpen=0 let Tlist_Process_File_Always=1 let Tlist_WinHeight=10 let Tlist_WinWidth=18 let Tlist_Use_Horiz_Window=0 nmap tl :TlistToggle<cr>
如此則taglist外掛就配置好了。
3.4 使用方式
使用vim開啟一個原始檔,如test.cpp
撥出方式1
:Tlist
撥出方式2
如vimrc中配置的,鍵 tl 已經被我繫結到了TlistToggle這個命令上,非編輯模式下輸入 tl 試試,則程式碼的變數宣告,函式名等就列在vim左邊啦
4.配置多terminal環境
有的時候希望一邊編輯檔案,一邊操作terminal,但是沒有辦法,vim模式下只能用:! + command 操作,視窗之間切來切去是不是很煩躁,emacs可以通過 alt+x shell 來建立命令列視窗,現在有了terminator ,vim使用者不用發愁了,就可以幫助我們了,下面看下我的效果圖嚐嚐鮮
4.1 安裝
安裝方式就比較簡單了
$ sudo apt-get install terminator
4.2 常用快捷鍵
Ctrl-Shift-E :豎分屏
Ctrl-Shift-O :橫分屏
Ctrl-Tab或Ctrl-Shift-N :在多個屏之間切換
Ctrl-Shift-Left :將可拖拽的bar向左移動(豎分屏)
Ctrl-Shift-Right :將bar向右移動(豎分屏)
Ctrl-Shift-UP : 將bar向上移動(橫分屏)
Ctrl-Shift-Down :將bar向下移動(橫分屏)
Ctrl-Shift-S :隱藏滾動條
Alt-UP :游標向上移動
Alt-Down :游標向下移動
Alt-Left :游標向左移動
Alt-Right:游標向右移動
Ctrl-Shift-C :複製選中文字
Ctrl-Shift-V :貼上選中的文字
Ctrl-Shift-X :只顯示當前terminal視窗,隱藏其他terminal視窗
Ctrl-Shift-W :關閉當前視窗
Ctrl-Shift-Q :關閉terminal
via :https://github.com/alexanderkenndy/advancevim/blob/master/vimrc
---------------------------------------------------------
持續更新中....
author :alexanderkenndy
create date:2014/6/15
相關文章
- VIM 進階 —— 《VIM 8 文字處理實戰》
- CoreText進階(七) 新增自定義View和對其View
- 修改ctags讓fzf.vim外掛顯示C,C++方法宣告的標籤C++
- JavaScript進階之模擬call,apply和bindJavaScriptAPP
- Spring進階案例之註解和IoC案例Spring
- Python進階之閉包和裝飾器Python
- Python爬蟲進階之會話和CookiesPython爬蟲會話Cookie
- Taglist: Exuberant ctags (http://ctags.sf.net) not found in PATH. Plugin is not loaded.HTTPPlugin
- ctags 處理 PHP traitPHPAI
- Django 進階之 celeryDjango
- 前端進階之困前端
- javascript 進階之 - PromiseJavaScriptPromise
- SpringBoot高階篇MongoDB之如何新增文件Spring BootMongoDB
- 前端入門16-JavaScript進階之EC和VO前端JavaScript
- 高階前端的進階——CSS之flex前端CSSFlex
- JavaScript進階之繼承JavaScript繼承
- JavaScript進階之原型鏈JavaScript原型
- 【Linux】中預設文字編輯器 vim 的入門與進階Linux
- linux之vim命令Linux
- 【Android進階】RecyclerView之ItemDecoration(一)AndroidView
- Java進階之詳談ExceptionJavaException
- 前端基礎之jQuery進階前端jQuery
- JavaScript進階之(一) this指標JavaScript指標
- Android自我進階——JAVA之JVMAndroidJavaJVM
- Python進階之物件導向Python物件
- pytest進階之fixture函式函式
- 前端進階-類和物件前端物件
- jsp進階教程和ServletJSServlet
- vim外掛之Taglist
- 【Android進階】RecyclerView之快取(二)AndroidView快取
- flutter的進階之路之常用元件Flutter元件
- 【Flutter】開發之進階Widget(三)Flutter
- 【Flutter】開發之進階Widget(五)Flutter
- JAVA進階之IO模型深入解析Java模型
- 攻防世界web高手進階之blgdelWeb
- Asp.NetCore之AutoMapper進階篇ASP.NETNetCoreAPP
- Linux 和 vim使用Linux
- redis訂閱者和進階Redis
- 【C進階】25、#和##運算子