diff options
| -rw-r--r-- | ftplugin/latex-box/complete.vim | 55 | 
1 files changed, 33 insertions, 22 deletions
| diff --git a/ftplugin/latex-box/complete.vim b/ftplugin/latex-box/complete.vim index 1a1389af..61ddd70c 100644 --- a/ftplugin/latex-box/complete.vim +++ b/ftplugin/latex-box/complete.vim @@ -196,37 +196,42 @@ function! s:FindBibData(...)  	endif  	if !filereadable(file) -		return '' +		return []  	endif +	let lines = readfile(file) +	let bibdata_list = [] +	" +	" Search for added bibliographies +	"  	let bibliography_cmds = [  				\ '\\bibliography',  				\ '\\addbibresource',  				\ '\\addglobalbib',  				\ '\\addsectionbib',  				\ ] - -	let lines = readfile(file) - -	let bibdata_list = [] -  	for cmd in bibliography_cmds -		let bibdata_list += map(filter(copy(lines), -					\ 'v:val =~ ''\C' . cmd . '\s*{[^}]\+}'''), +		let filtered = filter(copy(lines), +					\ 'v:val =~ ''\C' . cmd . '\s*{[^}]\+}''') +		let files = map(filtered,  					\ 'matchstr(v:val, ''\C' . cmd . '\s*{\zs[^}]\+\ze}'')') +		for file in files +			let bibdata_list += map(split(file, ','), +						\ 'fnamemodify(v:val, '':r'')') +		endfor  	endfor -	let bibdata_list += map(filter(copy(lines), -				\ 'v:val =~ ''\C\\\%(input\|include\)\s*{[^}]\+}'''), -				\ 's:FindBibData(LatexBox_kpsewhich(matchstr(v:val,' -					\ . '''\C\\\%(input\|include\)\s*{\zs[^}]\+\ze}'')))') - -	let bibdata_list += map(filter(copy(lines), -				\ 'v:val =~ ''\C\\\%(input\|include\)\s\+\S\+'''), -				\ 's:FindBibData(LatexBox_kpsewhich(matchstr(v:val,' -					\ . '''\C\\\%(input\|include\)\s\+\zs\S\+\ze'')))') +	" +	" Also search included files +	" +	for input in filter(lines, +				\ 'v:val =~ ''\C\\\%(input\|include\)\s*{[^}]\+}''') +		let bibdata_list += s:FindBibData(LatexBox_kpsewhich( +					\ matchstr(input, +						\ '\C\\\%(input\|include\)\s*{\zs[^}]\+\ze}'))) +	endfor -	return join(bibdata_list, ',') +	return bibdata_list  endfunction  let s:bstfile = expand('<sfile>:p:h') . '/vimcomplete' @@ -235,7 +240,7 @@ function! LatexBox_BibSearch(regexp)  	let res = []  	" Find data from bib files -	let bibdata = s:FindBibData() +	let bibdata = join(s:FindBibData(), ',')  	if bibdata != ''  		" write temporary aux file @@ -247,9 +252,15 @@ function! LatexBox_BibSearch(regexp)  		call writefile(['\citation{*}', '\bibstyle{' . s:bstfile . '}',  					\ '\bibdata{' . bibdata . '}'], auxfile) -		silent execute '! cd ' shellescape(LatexBox_GetTexRoot()) . -					\ ' ; bibtex -terse ' -					\ . fnamemodify(auxfile, ':t') . ' >/dev/null' +		if has('win32') +			silent execute '! cd ' shellescape(LatexBox_GetTexRoot()) . +						\ ' & bibtex -terse ' +						\ . fnamemodify(auxfile, ':t') . ' >nul' +		else +			silent execute '! cd ' shellescape(LatexBox_GetTexRoot()) . +						\ ' ; bibtex -terse ' +						\ . fnamemodify(auxfile, ':t') . ' >/dev/null' +		endif  		let lines = split(substitute(join(readfile(bblfile), "\n"),  					\ '\n\n\@!\(\s\=\)\s*\|{\|}', '\1', 'g'), "\n") | 
