將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
第二步:下載和安裝外掛
- ctags
直接sudo apt-get install ctags
這是一個生成標籤tag的外掛,可以用來檢視函式定義之類的。在其它的外掛中也會用到。 - 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 查詢包含本檔案的檔案 TagList
下載地址:http://www.vim.org/scripts/script.php?script_id=273
不過我感覺這個網站開啟很慢,所以直接百度的。下載之後直接解壓到~/.vim資料夾下面,沒有~/.vim就自己建一個。在上面的.vimrc檔案中設定了快捷鍵F3和一些選項。開啟效果如下圖:
NERD_tree(檔案瀏覽)
下載地址:http://www.vim.org/scripts/script.php?script_id=1658
當然我還是直接百度的。下載後同樣直接解壓到~/.vim檔案下面。在.vimrc中設定了F2開,F4關。:help NERD_tree.txt可以檢視幫助手冊。效果如下圖:
- 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
Centos將vim設定成為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改造為強大的IDE—Vim整合Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有圖有真相)
工欲善其事,必先利其器。一個強大的開發環境可以大大提高工作效率。好吧,我知道這是廢話。。。不過,我想一定有很多跟我一樣打算進入Linux平臺開發的新手,一開始都為找不到一個像Windows下的VS那樣可以一鍵安裝並且功能幾乎完美無缺的開發工具而鬱悶不已,甚至打算收回
使用android studio將eclipse專案改造成gradle專案中踩過的坑
本文中部分內容是看過了張大神的部落格後分享出來的。 其實android studio使用起來和之前習慣用eclipse開發區別並不大,只是一些快捷鍵發生了變化,這個是需要你
把vim打造成牛逼的C++ IDE
對於windows上做C++開發的使用者來說,vs為他們做了大量的工作,語法高亮、自動縮排、智慧提示等等,當你happy的使用vs時,請記住一點,這是一個收費軟體,雖然在我大中華普遍都在使用微軟的盜版軟體,但作為程式設計師我們心裡應該知道這是不對的行為,然後再去——等等