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 = 'lsm@skybility.com'

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/下增加自定义的补全