vim编程插件
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/下增加自定义的补全 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |