2018再次更新vim配置

参考这篇博文 http://www.skywind.me/blog/archives/2084

插件管理

我选择 vim-plug 来管理插件了,主要是因为支持插件延迟加载。

自动更新 ctags

" 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

函数列表和文件模糊搜索

let g:Lf_ShortcutF = '<c-p>'       " Ctrl + p 打开文件搜索
noremap <c-n> :LeaderfMru<cr>      " Ctrl + n 打开MRU文件列表
noremap <m-p> :LeaderfFunction<cr> " Alt + p 打开函数列表

预览文件

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的预览窗口

输入提示

inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"

全局搜索

" 查找工程目录
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 在新的标签页打开

最后

点击进入评论 ...