vim用法
vim用法
建议使用vim7.0以上版本
设置tab的行为
通用设置
" Set 4 spaces per tab
set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4
这个使用了插件系统,需要放到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
在.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只能跳转到本文件中定义的函数,不能跳转到别的文件
对这种情况,一般这样处理:,] 跳转到声明处
* 选中光标下的函数名
n找到定义的地方
在normal模式下,通过,gc跳转到声明的地方
git插件
git可以使用vim-fugitive这个插件来管理
修改~/.vimrc配置
Plugin 'tpope/vim-fugitive'
保存退出
安装插件
vim +PluginInstall +qall
最常用的是: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
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 !$
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
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跳到下一处修改点
在~/.vim/bundle/vim-snippets/UltiSnips/目录下查看支持的补全关键字