我的的IDE製做(vim)——適用於C++/C

引用文章A:http://learnvimscriptthehardway.onefloweroneworld.com/php

引用介紹:初學者建議通讀一遍。對VIM能有總體性的瞭解。c++

引用文章B:http://blog.csdn.net/wooin/article/details/1858917git

引用介紹:文章自己很好。但把我坑了兩天。無它,此博文補全功能不支持C++。但建議瀏覽,由於能夠從總體上知曉如何配置IDE。github

引用文章C:http://easwy.com/blog/archives/advanced-vim-skills-omin-complete/comment-page-1/vim

引用介紹:經過此文完成C++補全功能。彷佛也是一個系列。有空閱讀後再「補全」吧。瀏覽器

 

 

首先,但願製做IDE的孩子們擺正心態。不要期待可以有一個和VS媲美的IDE。VIIM僅僅是一個編輯器而已。編輯器

 本文中尚存在疑惑,能夠參考以上引用文章。此文並不是初學者教程,而是初學者練習結果。因此,更偏向於我的備忘而非教學。函數

因此,推薦閱讀引用文章。當對引用文章存在疑問時,能夠參考此文。工具

個人VIM配置:www.github.com/zheng39562/vimrc學習

 

文中須要注意的事項:

1,符號$ 如無特別指明,皆表示後跟着一個自定義變量。如$path。path表示路徑。具體設置,且勿直接帶入。

2,文中大部分插件均可以使用help找到幫助文檔。經過閱讀幫助來得到更多信息。

 

1、語法高亮。

1:初學者建議使用默認高亮。在vimrc中添加。

syntax enable
syntax on

 

2:GVIM中能夠選擇配色。具體在:編輯->配色方案。

3:若是想添加本身的語法高亮,能夠在路徑:~/.vim/syntax/中添加。

  1,引用文章B中,有一個簡短的例子。

2、函數,變量,宏的搜索和補全:Ctags。

1:首先須要安裝ctages。此軟件一般是默認安裝的,若是不是,能夠嘗試yum(但不肯定是否有此軟件)或者去官網下載http://ctags.sourceforge.net

2:使用。

  1,若是是C,只須要輸入:ctags -R。若是是C++,默認補全是不支持的,須要安裝插件OmniCppComplete。地址:http://www.vim.org/scripts/script.php?script_id=1520

  2,在工程的最上級目錄輸入指令。下面是C++的補全指令。

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q
--c++-kinds=+p  : 爲C++文件增長函數原型的標籤
--fields=+iaS   : 在標籤文件中加入繼承信息(i)、類成員的訪問控制信息(a)、以及函數的指紋(S)
--extra=+q      : 爲標籤增長類修飾符。注意,若是沒有此選項,將不能對類成員補全

 

    1)須要注意,每次定義了新的函數或類型,須要更新tags文件。暫時還未找到簡易方法。對此有一個初步想法:將其定義成vim快捷鍵。但實現還存在困難。

  3,聲徹tags文件後,你須要在你的當前文件中輸入:set tags= $current_path/tags.  $current_path是指工程目錄最上級目錄。若是此工程目錄是經常使用的,能夠添加的.vimrc中。

  4,完成以上步驟後,能夠嘗試 <C-]>  <C-T> 來肯定功能是否成功。

    1)<C-]> : 跳到定義處。  <C-T> : 回跳。

3:補全功能:文中的補全功能,須要tags文件支持。

3、源代碼總覽:TagList。

  1,做用:能夠列出當前源文件的函數,變量,類等。對源代碼有總體的概覽。

    1)此爲vim插件。能夠在官網下載。

  2,須要在vimrc中添加設置:

let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1

  3,可使用Tlist打開此插件。

  4,還有不少其餘功能,但因時間和需求,暫時擱置。

4、文件瀏覽器:netrw.vim

  1,做用:查看當前目錄中包含的文件。指令:e $path

  2,經常使用的目錄和文件操做:

<F1> 顯示幫助
<cr> 若是光標下是目錄, 則進入該目錄; 若是光標下文件, 則打開該文件
- 返回上級目錄
c 切換vim 當前工做目錄正在瀏覽的目錄
d 建立目錄
D 刪除目錄或文件
i 切換顯示方式
R 文件或目錄重命名
s 選擇排序方式
x 定製瀏覽方式, 使用你指定的程序打開該文件

5、窗口管理器:WinManager

  1,做用:能夠理解成分窗口的工具。

  2,一個例子:同時打開TList和netrw。能夠添加到vimrc中嘗試效果。

et g:winManagerWindowLayout='FileExplorer|TagList'
nmap wm :WMToggle<cr>

6、ctags增強版:Cscope.

  1,使用。下載地址:http://cscope.sourceforge.net。

    1)須要解壓,編譯後安裝。不肯定yum有沒有。

    2)安裝好後,在vimrc中添加:set cscopequickfix=s-,c-,d-,i-,t-,e-  // 設定使用quickfix窗口

    3)使用cs須要在工程根目錄下設置。

cscope -Rbq 

 

  2,"cscope find"的用法: cs find c|d|e|f|g|i|s|t name

0 或 s 查找本 C 符號(能夠跳過註釋)
1 或 g 查找本定義
2 或 d 查找本函數調用的函數
3 或 c 查找調用本函數的函數
4 或 t 查找本字符串
6 或 e 查找本 egrep 模式
7 或 f 查找本文件
8 或 i 查找包含本文件的文件

    1)如下是參考映射:我的更喜歡的映射前綴爲:<leader>f。此爲引用文章B複製而來,下述指令爲經過本人驗證,沒法確保其正確性。

nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR>

 7、報錯窗口:quickfix.

  1,介紹:vim自帶窗口。機制:將報錯信息儲存在於一個默認文件中,並使用quickfix打開。

  2,指令:但是在不少場合使用。也能夠過濾部分報錯。具體設置,須要進一步學習。

cw // 打開quickfix
cn // 下一個結果。
cp // 上一個結果。

 

8、多文件瀏覽(多BUFFER):MiniBufExplorer

  1,效果:打開二個以上文件時,就會自動出現。

  2,指令:TAB / <C-Tab> 進行切換。

9、h/c文件切換:插件A。引用文章B。

  1,未使用。

10、搜索和高亮書籤:Grep | VisualMark。引用文章B。

  1,未使用。

11、補全功能。

  1,功能:補全函數,類,宏等等。

    1)依賴:tags文件。

    2)能夠閱讀:help new-omni-completion 瞭解更多詳情。

    3)須要在vimrc添加:(暫時不懂原理)

filetype plugin indent on
set completeopt=longest,menu

  2,一些補全功能快捷鍵。

Ctrl+P 向前切換成員
Ctrl+N 向後切換成員
Ctrl+E 表示退出下拉窗口, 並退回到原來錄入的文字
Ctrl+Y  表示退出下拉窗口, 並接受當前選項
   
Ctrl+X Ctrl+L 整行補全
Ctrl+X Ctrl+N 根據當前文件裏關鍵字補全
Ctrl+X Ctrl+K 根據字典補全
Ctrl+X Ctrl+T 根據同義詞字典補全
Ctrl+X Ctrl+I 根據頭文件內關鍵字補全
Ctrl+X Ctrl+] 根據標籤補全
Ctrl+X Ctrl+F 補全文件名
Ctrl+X Ctrl+D 補全宏定義
Ctrl+X Ctrl+V 補全vim命令
Ctrl+X Ctrl+U 用戶自定義補全方式
Ctrl+X Ctrl+S 拼寫建議

  3,補全功能的缺陷:須要更新tags文件。若是新定義一個類或函數,須要更新tags文件。 

    1)正在嘗試直接使用vim快捷鍵解決此問題。但暫時看來彷佛不行。若有成功者,指望可以評論或email:zheng39562@163.com

12、補充。

  1,由於時間和需求緣由。部分的插件和功能並未徹底按張引用文B中來執行。並且,我的並不太但願用太多的插件,而更但願瞭解機制和原理後,自行完成IDE的餘下工做。

相關文章
相關標籤/搜索