插件管理
我选择 vim-plug 来管理插件了,主要是因为支持插件延迟加载。
自动更新 ctags
- 换个新的 ctags
 - 设置路径 
set tags=./.tags;,.tags - 支持异步自动更新 ctags 的插件 vim-gutentags
 
" gutentags 搜索工程目录的标志,碰到这些文件/目录名就停止向上一级目录递归
let g:gutentags_project_root = ['.root', '.svn', '.git', '.hg', '.project']
" 所生成的数据文件的名称
let g:gutentags_ctags_tagfile = '.tags'
" 将自动生成的 tags 文件全部放入 ~/.cache/tags 目录中,避免污染工程目录
let s:vim_tags = expand('~/.cache/tags')
let g:gutentags_cache_dir = s:vim_tags
" 配置 ctags 的参数
let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q']
let g:gutentags_ctags_extra_args += ['--c++-kinds=+px']
let g:gutentags_ctags_extra_args += ['--c-kinds=+px']
" 检测 ~/.cache/tags 不存在就新建
if !isdirectory(s:vim_tags)
    silent! call mkdir(s:vim_tags, 'p')
endif函数列表和文件模糊搜索
- 以前用的是 tagbar 和 CtrlP,现在改成 LeaderF 了
 - 设置快捷键
 - 文件列表默认是搜索文件名的,按 
Ctrl + f切换路径搜索 
let g:Lf_ShortcutF = '<c-p>'       " Ctrl + p 打开文件搜索
noremap <c-n> :LeaderfMru<cr>      " Ctrl + n 打开MRU文件列表
noremap <m-p> :LeaderfFunction<cr> " Alt + p 打开函数列表预览文件
- 使用插件 vim-preview
 - 关闭预览窗口的快捷键是 
Ctrl + w z - 设置其他快捷键
 
noremap <m-u> :PreviewScroll -1<cr> " Alt + u 往上滚动预览窗口
noremap <m-d> :PreviewScroll +1<cr> " Alt + d 往下滚动预览窗口
inoremap <m-u> <c-\><c-o>:PreviewScroll -1<cr>
inoremap <m-d> <c-\><c-o>:PreviewScroll +1<cr>
" 在quickfix窗口按 p 打开预览窗口(配合 grepper 插件很实用)
autocmd FileType qf nnoremap <silent><buffer> p :PreviewQuickfix<cr>
autocmd FileType qf nnoremap <silent><buffer> P :PreviewClose<cr>
noremap <m-n> :PreviewSignature!<cr> " Alt + n 提示函数声明
inoremap <m-n> <c-\><c-o>:PreviewSignature!<cr>
noremap <leader>g :PreviewTag<cr> " leader + g " 打开单词tag的预览窗口输入提示
- ycm 太卡,neovim 异步配置没起效果,平时也用不上语法补全,还是选用了 roxma/nvim-completion-manager
 - 配置 
tab和shift + tab选中候选项 
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"全局搜索
- 选用 mhinz/vim-grepper 插件,没有选用 ack 的原因是,ack 没配置搜索选中字符的功能。
 - 还需要安装搜索工具 ag
 - 异步搜索出结果后,在 quickfix 窗口显示,按 p 显示预览窗口
 - 再配置 yssl/QFEnter 插件支持更多快捷键操作 quickfix 窗口
 - 配置搜索路径和快捷键
 
" 查找工程目录
function! FindProjectRoot(lookFor)
    let s:root=expand('%:p:h')
    let pathMaker='%:p'
    while(len(expand(pathMaker))>len(expand(pathMaker.':h')))
        let pathMaker=pathMaker.':h'
        let fileToCheck=expand(pathMaker).'/'.a:lookFor
        if filereadable(fileToCheck)||isdirectory(fileToCheck)
            let s:root=expand(pathMaker)
        endif
    endwhile
    return s:root
endfunction
let g:root_dir = FindProjectRoot('.git')   " 搜索 .git 为项目路径
autocmd BufEnter * silent! lcd g:root_dir  " 设置当前路径为项目路径
nmap gs <plug>(GrepperOperator)	" 选择字符后按 g + s 开始搜索(异步的)
xmap gs <plug>(GrepperOperator)
let g:grepper = {}
let g:grepper.ag = {}
let g:grepper.ag.grepprg = 'ag --vimgrep $* '.g:root_dir " 设置 ag 参数
let g:qfenter_keymap = {}
let g:qfenter_keymap.vopen = ['<C-v>']  " Ctrl + v 纵向分屏打开
let g:qfenter_keymap.hopen = ['<C-CR>', '<C-s>', '<C-x>'] " Enter 横向分屏打开
let g:qfenter_keymap.topen = ['t'] " 按 t 在新的标签页打开最后
- 查哪个插件启动慢的命令 
vim --startuptime /tmp/vim.log a.c