vim用法
vim用法
建議使用vim7.0以上版本
設置tab的行爲
通用設置
" Set 4 spaces per tab
set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4
自動檢測源文件的tab設置,並使用相同的配置
這個使用了插件系統,需要放到vundle的段落裏面,參見插件管理
" use tab or space according to contents.
Plugin 'conormcd/matchindent.vim'
設置leader
在~/.vimrc中設置leader的值
" Set map leader
let mapleader = ","
自動刪除行尾空格
在~/.vimrc中增加如下配置:
" 去掉行尾空格
autocmd BufWritePre * :%s/\s\+$//e
插件管理
可以通過vundle插件來管理其他插件,使vim的配置維護更簡單。
下載vundle
cd ~/.vim/bundle
git clone https://github.com/gmarik/Vundle.vim
在.vimrc中配置使用vundle
vim ~/.vimrc
輸入以下內容:
"------------------------------------------->
" Bundle begin
" ------------------------------------------>
filetype off " required!
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
" add other plugin here
call vundle#end() " required
" Enable file type plugin and indent
filetype plugin indent on
"-------------------------------------------<
" Bundle end
" ------------------------------------------<
保存並退出
執行以下命令初始化插件
vim +PluginInstall +qall
到這裏,初始化完成,後續如果新增插件,還需要再次執行這個命令初始化新的插件。
用法:
安裝新插件::PluginInstall
更新插件::PluginUpdate
自動補全插件
採用YouCompleteMe插件來實現自動補全功能
在.vimrc配置中增加配置
" YCM for completions
Plugin 'Valloric/YouCompleteMe'
let g:ycm_confirm_extra_conf = 0
let g:ycm_filepath_completion_use_working_dir = 1
let g:ycm_key_list_select_completion = []
let g:ycm_key_list_previous_completion = []
let g:ycm_collect_identifiers_from_tags_files = 1
let g:ycm_filetype_whitelist = {'c': 1, 'cpp': 1, 'python': 1}
nnoremap <F4> :YcmDiags<CR>
nnoremap <F5> :YcmForceCompileAndDiagnostics<CR>
nnoremap <Leader>] :YcmCompleter GoTo<CR>
nnoremap <Leader>gh :YcmCompleter GoToInclude<CR>
nnoremap <Leader>gd :YcmCompleter GoToDefinition<CR>
nnoremap <Leader>gc :YcmCompleter GoToDeclaration<CR>
保存並退出
安裝插件
vim +PluginInstall +qall
安裝cmake
安裝clang(3.8+)
安裝boost(1.49+)
編譯YouCompletMe
cd ~/.vim/bundle/YouCompleteMe
./install.py --clang-completer --system-libclang --system-boost
編寫.ycm_extra_conf.py
對於每個工程,都需要編寫一個.ycm_extra_conf.py,用於指導ycm如何編譯工程下的文件。 SkybilityHA工程已經實現了該文件,所以不需要做額外動作,hadm2目前還沒有這個文件, 後續需要增加。
用法:
在., ->, ::後自動提示補全,通過ctrl + n, ctrl + p上下移動選擇,或繼續輸入減少篩選範圍。
在normal模式下,通過,]跳轉到定義的地方,如果找不到定義,跳轉到聲明的地方
在normal模式下,通過,gd跳轉到定義的地方 YCM只能跳轉到本文件中定義的函數,不能跳轉到別的文件
對這種情況,一般這樣處理: ,] 跳轉到聲明處
* 選中光標下的函數名
:A跳轉到對應的.c或.cpp文件
n找到定義的地方
或者使用ctags插件,用ctrl + ]跳轉
在normal模式下,通過,gc跳轉到聲明的地方
在normal模式下,通過,gh跳轉到所在行的頭文件
git插件
git可以使用vim-fugitive這個插件來管理
修改~/.vimrc配置
Plugin 'tpope/vim-fugitive'
保存退出
安裝插件
vim +PluginInstall +qall
用法
這個插件功能很強大,通過:help fugitive查看
最常用的是:Gblame查看歷史記錄
ctags插件
使用ludovicchabant/vim-gutentags來管理工程中的tags。 這個插件會在項目的根目錄下生成tags文件(根據.git目錄來識別)。
修改~/.vimrc配置
Plugin ’ludovicchabant/vim-gutentags‘
let g:gutentags_cache_dir = '/tmp/tags/'
安裝插件 在vim裏面執行下面三個指令:
:w
:so %
:PluginInstall
安裝ctags軟件exuberant-ctags
與YCM結合,YCM要求使用-l參數來識別tags所屬的語言,以實現更準確的匹配。
echo 'fields+=-l' >> ~/.ctags
用法: ctrl + ]來跳轉到函數定義的地方
snippet插件
這是一個提高代碼效率的插件,在輸入關鍵字後,按tab鍵,可以將預定義的代碼片段補全出來, 用戶再根據自己的需要修改即可。
修改~/.vimrc配置
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'
let g:UltiSnipsSnippetDirectories=["UltiSnips", 'mysnips']
let g:snips_author = 'Songmin.Li (Li)'
let g:snips_email = '[email protected]'
let g:snips_github = ''
let g:snips_company = 'Skybility Software Co.,Ltd.'
姓名,郵箱根據實際情況替換
保存退出
安裝插件
vim +PluginInstall +qall
增加文件頭的註釋的補全
1.創建mysnips目錄
mkdir ~/.vim/bundle/vim-snippets/mysnips
cd !$
2.在目錄下,增加補全文件c.snippets
priority -40
snippet docs "file docs ..."
/**
\file `!v expand('%:t')`
\brief ${1}
\author `!v g:snips_author`, `!v g:snips_email`
\copyright Copyright (c) `!v strftime('%Y')`, `!v g:snips_company` All rights reserved.
*/
endsnippet
3.在目錄下,增加補全文件python.snippets
priority -40
snippet docs "file docs ..."
"""
File: `!v expand('%:t')`
Author: `!v g:snips_author`
Email: `!v g:snips_email`
Copyright: Copyright (c) `!v strftime('%Y')`, `!v g:snips_company` All rights reserved.
Description: ${0}
"""
endsnippet
用法:
輸入補全關鍵字, 按tab鍵
按ctrl + j跳到下一處修改點
按ctrl + k跳轉到上一處修改點
在~/.vim/bundle/vim-snippets/UltiSnips/目錄下查看支持的補全關鍵字
可以在~/.vim/bundle/vim-snippets/mysnips/下增加自定義的補全