mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-03-12 17:55:41 +08:00
fix gtags completion and list project files (#4209)
* fix gtags completion and list project files * gtags: use cgetexpr instead of cexpr! if there's multiple results * gtags: set $GTAGSDBPATH for completion
This commit is contained in:
parent
9f6faa4011
commit
bbac004900
@ -26,7 +26,7 @@ function! SpaceVim#layers#gtags#config() abort
|
||||
let g:_spacevim_mappings_space.m.g = {'name' : '+gtags'}
|
||||
call SpaceVim#mapping#space#def('nnoremap', ['m', 'g', 'c'], 'GtagsGenerate!', 'create-a-gtags-database', 1)
|
||||
call SpaceVim#mapping#space#def('nnoremap', ['m', 'g', 'u'], 'GtagsGenerate', 'update-tag-database', 1)
|
||||
call SpaceVim#mapping#space#def('nnoremap', ['m', 'g', 'p'], 'Gtags -p', 'list-all-file-in-GTAGS', 1)
|
||||
call SpaceVim#mapping#space#def('nnoremap', ['m', 'g', 'p'], 'Gtags -P', 'list-all-file-in-GTAGS', 1)
|
||||
call SpaceVim#mapping#space#def('nnoremap', ['m', 'g', 'd'], 'exe "Gtags -d " . expand("<cword>")', 'find-definitions', 1)
|
||||
call SpaceVim#mapping#space#def('nnoremap', ['m', 'g', 'r'], 'exe "Gtags -r " . expand("<cword>")', 'find-references', 1)
|
||||
call SpaceVim#mapping#space#def('nnoremap', ['m', 'g', 's'], 'exe "Gtags -s " . expand("<cword>")', 'find-cursor-symbol', 1)
|
||||
|
@ -212,6 +212,34 @@ function! s:TrimOption(option) abort
|
||||
return l:option
|
||||
endfunction
|
||||
|
||||
function! s:ExecGlobal(cmd) abort
|
||||
let l:restore_gtagsroot = 0
|
||||
if empty($GTAGSROOT)
|
||||
let $GTAGSROOT = SpaceVim#plugins#projectmanager#current_root()
|
||||
let l:restore_gtagsroot = 1
|
||||
endif
|
||||
|
||||
let l:restore_gtagsdbpath = 0
|
||||
if empty($GTAGSDBPATH)
|
||||
let $GTAGSDBPATH = s:FILE.unify_path(g:tags_cache_dir) . s:FILE.path_to_fname($GTAGSROOT)
|
||||
let l:restore_gtagsdbpath = 1
|
||||
endif
|
||||
|
||||
let l:result = system(a:cmd)
|
||||
|
||||
" restore $GTAGSROOT and $GTAGSDBPATH to make it possible to switch
|
||||
" between multiple projects or parent/child projects
|
||||
if l:restore_gtagsroot
|
||||
let $GTAGSROOT = ''
|
||||
endif
|
||||
|
||||
if l:restore_gtagsdbpath
|
||||
let $GTAGSDBPATH = ''
|
||||
endif
|
||||
|
||||
return l:result
|
||||
endfunction
|
||||
|
||||
"
|
||||
" Execute global and load the result into quickfix window.
|
||||
"
|
||||
@ -242,31 +270,8 @@ function! s:ExecLoad(option, long_option, pattern) abort
|
||||
let l:cmd = g:gtags_global_command . ' ' . l:option . 'e ' . g:Gtags_Shell_Quote_Char . a:pattern . g:Gtags_Shell_Quote_Char
|
||||
endif
|
||||
|
||||
let l:restore_gtagsroot = 0
|
||||
if empty($GTAGSROOT)
|
||||
let $GTAGSROOT = SpaceVim#plugins#projectmanager#current_root()
|
||||
let l:restore_gtagsroot = 1
|
||||
endif
|
||||
let l:result = s:ExecGlobal(l:cmd)
|
||||
|
||||
let l:restore_gtagsdbpath = 0
|
||||
if empty($GTAGSDBPATH)
|
||||
let $GTAGSDBPATH = s:FILE.unify_path(g:tags_cache_dir) . s:FILE.path_to_fname($GTAGSROOT)
|
||||
let l:restore_gtagsdbpath = 1
|
||||
endif
|
||||
|
||||
let l:result = system(l:cmd)
|
||||
|
||||
" restore $GTAGSROOT and $GTAGSDBPATH to make it possible to switch
|
||||
" between multiple projects or parent/child projects
|
||||
if l:restore_gtagsroot
|
||||
let $GTAGSROOT = ''
|
||||
endif
|
||||
|
||||
if l:restore_gtagsdbpath
|
||||
let $GTAGSDBPATH = ''
|
||||
endif
|
||||
|
||||
e
|
||||
if v:shell_error != 0
|
||||
if v:shell_error == 2
|
||||
call s:Error('invalid arguments. (gtags.vim requires GLOBAL 5.7 or later)')
|
||||
@ -303,7 +308,11 @@ function! s:ExecLoad(option, long_option, pattern) abort
|
||||
" Parse the output of 'global -x or -t' and show in the quickfix window.
|
||||
let l:efm_org = &efm
|
||||
let &efm = g:Gtags_Efm
|
||||
cexpr! l:result
|
||||
if l:result =~# '\n.'
|
||||
cgetexpr l:result
|
||||
else
|
||||
cexpr! l:result
|
||||
endif
|
||||
let &efm = l:efm_org
|
||||
endfunction
|
||||
|
||||
@ -357,7 +366,7 @@ function! gtags#global(line) abort
|
||||
if l:option =~# 'f'
|
||||
let l:line = input('Gtags for file: ', expand('%'), 'file')
|
||||
else
|
||||
let l:line = input('Gtags for pattern: ', expand('<cword>'), 'custom,GtagsCandidateCore')
|
||||
let l:line = input('Gtags for pattern: ', expand('<cword>'), 'custom,gtags#complete')
|
||||
endif
|
||||
let l:pattern = s:Extract(l:line, 'pattern')
|
||||
if l:pattern ==# ''
|
||||
@ -429,7 +438,7 @@ function! s:GtagsCandidateCore(lead, ...) abort
|
||||
endif
|
||||
return glob(l:pattern)
|
||||
else
|
||||
let l:cands = system(g:gtags_global_command . ' ' . '-c' . s:option . ' ' . a:lead)
|
||||
let l:cands = s:ExecGlobal(g:gtags_global_command . ' ' . '-c' . s:option . ' ' . a:lead)
|
||||
if v:shell_error == 0
|
||||
return l:cands
|
||||
endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user