插件管理
我选择 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