diff options
-rw-r--r-- | .vim/after/plugin/youcompleteme.vim | 8 | ||||
-rw-r--r-- | .vim/plugin/util.vim | 36 |
2 files changed, 40 insertions, 4 deletions
diff --git a/.vim/after/plugin/youcompleteme.vim b/.vim/after/plugin/youcompleteme.vim index b4e30a8..1c30617 100644 --- a/.vim/after/plugin/youcompleteme.vim +++ b/.vim/after/plugin/youcompleteme.vim @@ -33,10 +33,10 @@ let g:ycm_filetype_blacklist = { \ 'vimwiki': 1, \ } -nnoremap gd :YcmCompleter GoTo<CR> -nnoremap gy :YcmCompleter GoToType<CR> -nnoremap gr :YcmCompleter GoToReferences<CR> -nnoremap gi :YcmCompleter GoToImplementation<CR> +nnoremap gd :call PushTagStackOnCommand('YcmCompleter GoTo')<CR> +nnoremap gy :call PushTagStackOnCommand('YcmCompleter GoToType')<CR> +nnoremap gr :call PushTagStackOnCommand('YcmCompleter GoToReferences')<CR> +nnoremap gi :call PushTagStackOnCommand('YcmCompleter GoToImplementation')<CR> nnoremap <leader>rn :YcmCompleter RefactorRename<space> nmap <leader>fs <plug>(YCMFindSymbolInDocument) nmap <leader>fS <plug>(YCMFindSymbolInWorkspace) diff --git a/.vim/plugin/util.vim b/.vim/plugin/util.vim new file mode 100644 index 0000000..de2dadd --- /dev/null +++ b/.vim/plugin/util.vim @@ -0,0 +1,36 @@ +function! PushTagStackOnCommand(command_name) abort + call s:PushTagStackBefore() + exec a:command_name + call s:PushTagStackAfter() +endfunction + +function! PushTagStackOnFunction(function_name) abort + call s:PushTagStackBefore() + call a:function_name() + call s:PushTagStackAfter() +endfunction + +function! s:PushTagStackBefore() abort + let dotag = &tagstack && exists('*gettagstack') && exists('*settagstack') + if dotag + let from = [bufnr('%'), line('.'), col('.'), 0] + let tagname = expand('<cword>') + let stack = gettagstack() + if stack.curidx > 1 + let stack.items = stack.items[0:stack.curidx-2] + else + let stack.items = [] + endif + let stack.items += [{'from': from, 'tagname': tagname}] + let stack.curidx = len(stack.items) + call settagstack(win_getid(), stack) + endif +endfunction + +function! s:PushTagStackAfter() abort + let dotag = &tagstack && exists('*gettagstack') && exists('*settagstack') + if dotag + let curidx = gettagstack().curidx + 1 + call settagstack(win_getid(), {'curidx': curidx}) + endif +endfunction |