1. 程式人生 > >將VIM改造成c++IDE

將VIM改造成c++IDE

如何將vim改造成c++IDE

作為一個linux的初學者,看到網上各種吹vim的,心嚮往之,於是自己去網上查了相關的資料來做。傷心的是,做了兩天才做好(原諒我的菜)。然而還有部分原因卻是因為網上的教程不夠詳細和深入,沒有解釋為什麼而直接說該怎麼做,並且有些做法其實並不好。下面分享一些我的經驗。

第一步:修改使用者的.vimrc檔案

vim安裝後會在使用者路徑下生成一個.vimrc檔案,比如/home/username/.vimrc。此外在安裝目錄還有一個全域性版本的vimrc檔案,不過.vimrc中的內容會覆蓋掉vimrc中的設定,所以一般都是修改.vimrc檔案。這一步網上有很多資料,我也是直接照搬的。我的.vimrc檔案如下:

if(has("win32") || has("win95") || has("win64") || has("win16")) "判定當前作業系統型別
let g:iswindows=1
else
let g:iswindows=0
endif
"""""""""""""""檔案設定"""""""""""""""""""""""""
set fileencodings=utf-8,gb18030,utf-16,big5 "編碼設定
set nocompatible "不要 vim 模仿 vi 模式,建議設定,否則會有很多不相容的問題\
set noswapfile "不生成 swap 檔案
set
nowb set nobackup "不會生成備份檔案 """""""tags設定"""""""""""""""" set tags=tags set tags+=/home/liyan/.vim/tags/cpptags set tags+=/home/liyan/.vim/tags/acetags set tags+=./tags """""""""""""常規設定""""""""""""""" "字型的設定 set guifont=Courier\ 10\ Pitch\ 12 ""記住空格用下劃線代替哦 set gfw=幼圓:h10:cGB2312 "let mapleader = "," "" "let g:mapleader = "
," ""設定 leader 為',',預設為„\‟ "colo Dark "配色方案 syntax on "開啟高亮 ""set cursorline " 高亮當前行 set ruler " 在編輯過程中,在右下角顯示游標位置的狀態行 set incsearch " 查詢時非常方便,如要查詢 book 單詞,當輸入到/b 時,會自動找到 " 第一個 b 開頭的單詞,當輸入到/bo 時,會自動找到第一個 bo 開頭的 " 單詞,依次類推,進行查詢時,使用此設定會快速找到答案,當你 " 找要匹配的單詞時,別忘記回車 set vb t_vb= " vim 進行編輯時,如果命令錯誤,會發出一個響聲,該設定去掉響聲 set mouse=a "允許滑鼠的使用 "set listchars=tab:>-,trail:- "將 tab 符顯示為>---,並將行尾的空格顯示為-。如果你不喜歡這個特性,註釋這兩句即可 "set list """""""""""""""""""""""""""程式設計設定"""""""""""""""""""" set tabstop=4 "設定 tab 鍵的寬度 set shiftwidth=4 " 換行時行間交錯使用 4 個空格 set expandtab "空格代替 TAB set nowrap "no 自動換行 set backspace=indent,eol,start whichwrap+=<,>,[,] "允許退格鍵的使用 ""set ai! " 設定自動縮排 set nu! " 顯示行號 set showmatch " 設定匹配模式,類似當輸入一個左括號時會匹配相應的那個右括號 filetype on filetype plugin on ""自動匹配檔案 if has("autocmd") filetype plugin indent on "根據檔案進行縮排 augroup vimrcEx au! autocmd FileType text setlocal textwidth=78 autocmd BufReadPost * \ if line("'\"") > 1 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif augroup END else "智慧縮排,相應的有 cindent,官方說 autoindent 可以支援各種檔案的縮排, "但是效果會比只支援 C/C++的 cindent 效果會差一點,但筆者並沒有看出來 set autoindent " always set autoindenting on endif " has("autocmd") """""""""""""ctags 和 cscope(繫結F12)""""""""""""""" map <F12> :call Do_CsTag()<CR> nmap <[email protected]>s :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<CR> nmap <[email protected]>g :cs find g <C-R>=expand("<cword>")<CR><CR> nmap <[email protected]>c :cs find c <C-R>=expand("<cword>")<CR><CR>:copen<CR> nmap <[email protected]>t :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR> nmap <[email protected]>e :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR> nmap <[email protected]>f :cs find f <C-R>=expand("<cfile>")<CR><CR>:copen<CR> nmap <[email protected]>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:copen<CR> nmap <[email protected]>d :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR> function Do_CsTag() let dir = getcwd() if filereadable("tags") if(g:iswindows==1) let tagsdeleted=delete(dir."\\"."tags") else let tagsdeleted=delete("./"."tags") endif if(tagsdeleted!=0) echohl WarningMsg | echo "Fail to do tags! I cannot delete the tags" | echohl None return endif endif if has("cscope") silent! execute "cs kill -1" endif if filereadable("cscope.files") if(g:iswindows==1) let csfilesdeleted=delete(dir."\\"."cscope.files") else let csfilesdeleted=delete("./"."cscope.files") endif if(csfilesdeleted!=0) echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.files" | echohl None return endif endif if filereadable("cscope.out") if(g:iswindows==1) let csoutdeleted=delete(dir."\\"."cscope.out") else let csoutdeleted=delete("./"."cscope.out") endif if(csoutdeleted!=0) echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.out" | echohl None return endif endif if(executable('ctags'))"silent! execute "!ctags -R --c-types=+p --fields=+S *" silent! execute "!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ." endif if(executable('cscope') && has("cscope") ) if(g:iswindows!=1) silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' > cscope.files" else silent! execute "!dir /s/b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files" endif silent! execute "!cscope -b" execute "normal :" if filereadable("cscope.out") execute "cs add cscope.out" endif endif endfunction """""""""""進行Taglist的設定""""""""""""""""""""" "TlistUpdate "可以更新 tags map <F3> :silent! Tlist<CR> "按下 F3 就可以撥出了,可以改 let Tlist_Ctags_Cmd='ctags' "因為我們放在環境變數裡,所以可以直接執行 let Tlist_Use_Right_Window=0 "讓視窗顯示在右邊,0 的話就是顯示在左邊 let Tlist_Show_One_File=1 "讓 taglist 可以同時展示多個檔案的函式列表,如果想只有 1 個,設定為 1 let Tlist_File_Fold_Auto_Close=1 "非當前檔案,函式列表摺疊隱藏 let Tlist_Exit_OnlyWindow=1 "當 taglist 是最後一個分割視窗時,自動推出 vim let Tlist_Process_File_Always=0 "是否一直處理 tags.1:處理;0:不處理。不是一直實時更新 tags,因為沒有必要 let Tlist_Inc_Winwidth=0 """"""""""""""""對 NERD_commenter 的設定(註釋)""""""""""""" let NERDShutUp=1 "支援單行和多行的選擇,//格式 map <C-h> ,c<space> """""""""""""""""""""""""NERDTree"""""""""""""""""""""""" map <F2> :NERDTree<cr> "F2 開啟NERDTree map <F4> :NERDTreeClose<cr> "F4 關閉········· """""""""""""""""括號和引號補全"""""""""""""""""""" inoremap ( ()<Esc>i inoremap [ []<Esc>i inoremap { {<CR>}<Esc>O autocmd Syntax html,vim inoremap < <lt>><Esc>i| inoremap > <c-r>=ClosePair('>')<CR> inoremap ) <c-r>=ClosePair(')')<CR> inoremap ] <c-r>=ClosePair(']')<CR> inoremap } <c-r>=CloseBracket()<CR> inoremap " <c-r>=QuoteDelim('"')<CR> inoremap ' <c-r>=QuoteDelim("'")<CR> function ClosePair(char) if getline('.')[col('.') - 1] == a:char return "\<Right>" else return a:char endif endf function CloseBracket() if match(getline(line('.') + 1), '\s*}') < 0 return "\<CR>}" else return "\<Esc>j0f}a" endif endf function QuoteDelim(char) let line = getline('.') let col = col('.') if line[col - 2] == "\\" "Inserting a quoted quotation mark into the string return a:char elseif line[col - 1] == a:char "Escaping out of the string return "\<Right>" else "Starting a string return a:char.a:char."\<Esc>i" endif endf """""""""""""""""OMNI設定""""""""""""""""""""""""" 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

第二步:下載和安裝外掛

  1. ctags
    直接sudo apt-get install ctags
    這是一個生成標籤tag的外掛,可以用來檢視函式定義之類的。在其它的外掛中也會用到。
  2. cscope
    一樣,也是sudo apt-get install cscope
    一個利用tag的更強大的查詢外掛。
    用法:
    :cs find c|d|e|f|g|i name
    0 或 s 查詢本 C 符號(可以跳過註釋)
    1 或 g 查詢本定義
    2 或 d 查詢本函式呼叫的函式
    3 或 c 查詢呼叫本函式的函式
    4 或 t 查詢本字串
    6 或 e 查詢本 egrep 模式
    7 或 f 查詢本檔案
    8 或 i 查詢包含本檔案的檔案
  3. TagList
    下載地址:http://www.vim.org/scripts/script.php?script_id=273
    不過我感覺這個網站開啟很慢,所以直接百度的。下載之後直接解壓到~/.vim資料夾下面,沒有~/.vim就自己建一個。在上面的.vimrc檔案中設定了快捷鍵F3和一些選項。開啟效果如下圖:
    這裡寫圖片描述

  4. NERD_tree(檔案瀏覽)
    下載地址:http://www.vim.org/scripts/script.php?script_id=1658
    當然我還是直接百度的。下載後同樣直接解壓到~/.vim檔案下面。在.vimrc中設定了F2開,F4關。:help NERD_tree.txt可以檢視幫助手冊。效果如下圖:
    這裡寫圖片描述

  5. NERD_commenter (快速註釋)
    下載地址:http://www.vim.org/scripts/script.php?script_id=1218
    同上同上同上。。。
    操作快捷鍵:
    \ca 在可選的註釋方式之間切換,比如 C/C++ 的塊註釋/* */和行註釋//
    \cc 註釋當前行
    \c切換註釋/非註釋狀態
    \cs 以”性感”的方式註釋
    \cA 在當前行尾添加註釋符,並進入 Insert 模式
    \cu 取消註釋
    Normal 模式下,幾乎所有命令前面都可以指定行數
    Visual 模式下執行命令,會對選中的特定區塊進行註釋/反註釋
    各命令字首是可以自己設定的,通常是逗號’,’或者’\’.

接下來我要說的,就是讓我用掉兩天時間的罪魁禍首:ctags。
要使用這個外掛,首先要生成tags檔案,這也是很多其它外掛的基礎。在.vimrc檔案中設定了快捷鍵F12來在當前目錄生成一個tags檔案(請仔細閱讀相關內容),它包括了當前目錄及其子目錄下所有c++程式碼檔案的tag,當你想要檢視某個定義時,將游標移動到目標,按下ctrl+],就會跳轉到這個單詞定義的地方。但是這隻能檢視在當前目錄及子目錄下程式碼檔案中的tag。但是實際上我們經常會引用位於其它地方的標頭檔案,這就需要我們先對那些標頭檔案中的內容生成tag。網上的方法亂七八糟。一個比較好的方法是建立一個tags資料夾來管理所有的tags檔案。比如我的就放在~/.vim/tags中,然後在.vimrc檔案中設定tags檔案的搜尋命令(請看上文中的tags設定)。生成tags檔案的命令例子:

ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=c++ -f acetags /home/liyan/ACE_wrappers

這條命令會在當前目錄生成一個acetags檔案,其中有/home/liyan/ACE_wrappers目錄及其子目錄下的所有c++程式碼檔案的tag。請仔細百度上面的各種引數。一般時候,是不用 –language-force=c++ 的,但是如果要檢視c++標頭檔案(比如iostream)中的內容就必須要加這句話,否則會提示E426找不到tag。另外,cout這種巨集定義的型別也是找不到的,除非加上引數 -I 巨集。

相關推薦

VIM造成c++IDE

如何將vim改造成c++IDE 作為一個linux的初學者,看到網上各種吹vim的,心嚮往之,於是自己去網上查了相關的資料來做。傷心的是,做了兩天才做好(原諒我的菜)。然而還有部分原因卻是因為網上的教程不夠詳細和深入,沒有解釋為什麼而直接說該怎麼做,並且有些做

追求效率, 上古神器 | VIM造成專屬IDE

傳說中的Vim一直有著不可磨滅的神話, 為了追求效率, 嵌入式開發應該轉入LInux下, 首先當然是學會使用強大的Vim了~ 1. vi與vim 2. vim使用 在開始學習vim使用之前,先了解一下vim的三種工作模式: 命令模式 vim預設開啟就處於命令模式,在此

ubuntu14.04 vim配置成c++ IDE

1.  ubuntu本身自帶的vim是tiny版的,所以最好在網上下在一個完整版的安裝.通過apt-get 命令安裝的也是精簡版的.  無論你裝的是vim或者gvim  .這兩個沒有多大的差別.只是多了個圖形介面.  2.安裝好vim時可以制定安裝位置,也可以不指定安裝位

VSCode 打造成C/C++ IDE

時間:2018-11-03 序言 網上有許多這“將 VSCode打造成C/C++ IDE”的博文,在跟著前人做的時候還是有些許問題需要解決,寫下我的過程,分享給大家,有什麼問題歡迎留言。  什麼是VSCODE? VSCode 的官方網址:https://code.visualstudi

Vim造成伺服器端IDE

仔細想了下,伺服器端程式設計由於伺服器(一般都是Linux)並不會裝Eclipse,Visual Studio之類的IDE,所以用Vim還是比較好的選擇,還能提高Coding(敲鍵盤)能力,固化程式設計式思維。 愛上Coding! .bash_profile # .bash_p

如何 Vim造成一個成熟的 IDE

英文: xmodulo 譯文:LCTT - love_daisy_love 連結:http://linux.cn/article-3314-1.html 如果你稍微寫過一點程式碼,就能知道“整合開發環境”(IDE)是多麼的便利。不管是Java、C還是Pytho

Vim配置為C/C++編輯器(IDE

對於VIM外掛安裝,個人建議閱讀每個外掛的官方說明,如以下列出的外掛專案地址或者官網頁面,或者詳細閱讀外掛中的doc目錄下的說明文件,按照官方推薦的方式進行安裝,並獲取最新版本。話不多說,以下所有便是需要安裝的外掛列表。 Pathogen mkd

【linux】如何Vim造成一個成熟的IDE

如果你稍微寫過一點程式碼,就能知道“整合開發環境”(IDE)是多麼的便利。不管是Java、C還是Python,當IDE會幫你檢查語法、後臺編譯,或者自動匯入你需要的庫時,寫程式碼就變得容易許多。另外,如果你工作在Linux上,你也會知道Vim在進行文字編輯的時候是多麼的方便。所以,你可能會想從Vim中也獲取這

VIM造成強大的IDE

【正文】 開始前,我假設你:0)具備基本的 vim 操作能力,清楚如何開啟/編輯/儲存文件、命令與插入模式間切換;1)希望將 vim 打造成 C/C++ 語言的 IDE,而非其他語言。 關於 vim 的優點,你在網上能查到 128+ 項,對我而言,只有兩項:0)所想即所得,讓手輸入的速度跟

Linux下新手怎樣VIM配置成C++編程環境(能夠STL自己主動補全)

mes 標簽 ctrl+c 配色方案 lang 環境 rip vimr str ~ 弄拉老半天,最終弄的幾乎相同啦,果然程序猿還是須要有點折騰精神啊。 首先你要安裝vim,命令:sudo apt-get install vim vim它僅僅是一個編

Ubuntu下vim配置為Python IDE(轉)

配置好了Django的環境,該把vim好好配置一下當做python的IDE來用。 在Windows下用慣了各種現成的工具,轉到Linux下,一下沒了頭緒……好歹google出一些別人的心得,折騰來折騰去,也算是把開發環境配好了。 1. 安裝完整的vim # apt-get install vim-gno

Centosvim設定成為C++編輯器

第一步先安裝git sudo yum install git 第二步安裝一個外掛管理器的外掛 pathogen mkdir -p ~/.vim/autoload ~/.vim/bundle && curl -LSso ~/.vim/autol

在無GUI的Linux環境下vim編輯器打造成一款Python開發IDE

vim編輯器對於每一個IT從業人員來說肯定不陌生,除了一般的文件編輯功能以外,還可以通過vim來打造一個屬於我們自己的IDE。作為一名Python開發使用者,之前寫Python都是在windows帶G

spring cloud (六) 一個普通的springcloud項目 非feign或ribbon項目,造成turbine可聚合監聽的項目

static utf [] snapshot hello plugins reporting poi map 改造之前一個項目 service-a 1 pom.xml添加如下 <dependency> <groupId>or

Sublime Text 3打造成C/C++語言編譯器

安裝MinGW64: 連結: https://pan.baidu.com/s/1v4yPTIqgFHc6Ty8gjHta_A 提取碼: udn8 解壓到Sublime Text 3檔案中 環境變數配置: (Win10)開啟控制面板,選擇系統安全 點選系統 點選高階系統設定 點選環境變數

FPN中的一些層C++

因為需要用C++的程式碼跑測試,因而需要將prototxt中一些原來用python寫的層改成c++格式。 之前跑faster rcnn的時候,將rpn層參考部落格修改過,但是因為對原始碼不瞭解,這次改三個層無從下手,下面記錄一下過程。需要修改的三個層分別為rpn-data,roi-data和pr

訊息中心造成springboot專案,並整合maven打包docker image

一手動打包測試: [[email protected] docker]# ll 總用量 260160 -rw-r--r-- 1 root root       305 12月 22 21:12 Dockerfile -rw-r--r-- 1 root root 1

Vim改造為強大的IDEVim整合Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有圖有真相)

    工欲善其事,必先利其器。一個強大的開發環境可以大大提高工作效率。好吧,我知道這是廢話。。。不過,我想一定有很多跟我一樣打算進入Linux平臺開發的新手,一開始都為找不到一個像Windows下的VS那樣可以一鍵安裝並且功能幾乎完美無缺的開發工具而鬱悶不已,甚至打算收回

使用android studioeclipse專案造成gradle專案中踩過的坑

       本文中部分內容是看過了張大神的部落格後分享出來的。        其實android studio使用起來和之前習慣用eclipse開發區別並不大,只是一些快捷鍵發生了變化,這個是需要你

vim打造成牛逼的C++ IDE

對於windows上做C++開發的使用者來說,vs為他們做了大量的工作,語法高亮、自動縮排、智慧提示等等,當你happy的使用vs時,請記住一點,這是一個收費軟體,雖然在我大中華普遍都在使用微軟的盜版軟體,但作為程式設計師我們心裡應該知道這是不對的行為,然後再去——等等