138 lines
4.1 KiB
VimL
138 lines
4.1 KiB
VimL
" --- ------ ----
|
|
" --- Config ----
|
|
" --- ------ ----
|
|
|
|
" Folder to store all dynamically generated files in
|
|
" + tags files
|
|
" + highlighting scripts
|
|
" I do not recommend using '.' especially if you don't auto cd with vim
|
|
" ~/.vim/plugin/HiTags/ is guaranteed to exist after installation,
|
|
" thats why it's the default
|
|
" otherwise you are responsible for creating your own
|
|
let s:polution_directory = expand('~/.vim/plugin/HiTags/')
|
|
|
|
" Compiler_Collection_based_Preprocessing:
|
|
if 0
|
|
" Compiler to use for preprocessing C/C++, so headers are respected
|
|
" Either use "clang" or "gcc" or something compatible,
|
|
" alternatively you will have to edit s:preprocessor
|
|
let s:preprocessor_executable = "clang"
|
|
"let s:preprocessor_executable = "gcc"
|
|
let s:preprocessor = s:preprocessor_executable . ' -fdirectives-only -E {input_} -o {output}'
|
|
endif
|
|
|
|
" Stand_alone_preprocessor:
|
|
" The only implementation i know is fcpp (https://github.com/bagder/fcpp.git)
|
|
" However, it has the major advantage that it will only warn on missing
|
|
" headers and not error. Meaning a tool chain using '-I' doesn't break
|
|
" everything.
|
|
let s:preprocessor = "fcpp -I/usr/local/include -LL {input_} {output}"
|
|
|
|
" --- --------------------------- ---
|
|
" --- Don't Touch ---
|
|
" --- Unless ---
|
|
" --- You know What You Are Doing ---
|
|
" --- --------------------------- ---
|
|
let s:tags_filename = 'tags'
|
|
let s:tags_file = expand(s:polution_directory) . s:tags_filename
|
|
let s:tags_scriptname = 'tags.vim'
|
|
let s:tags_script = expand(s:polution_directory) . 'tags.vim'
|
|
let s:sigs_script = expand(s:polution_directory) . 'sigs.vim'
|
|
"
|
|
let s:generator_script = expand('~/.vim/plugin/HiTags/hitags.py')
|
|
let s:generation_command =
|
|
\ 'python ' . s:generator_script .
|
|
\ ' -i ' . '"' . expand('%:p') . '"' .
|
|
\ ' -p ' . '"' . s:preprocessor . '"' .
|
|
\ ' -t ' . '"' . s:polution_directory . '"' .
|
|
\ ' hi ' .
|
|
\ ' > ' . '"' . s:tags_script . '"' .
|
|
\ ';' .
|
|
\ 'python ' . s:generator_script .
|
|
\ ' -i ' . '"' . expand('%:p') . '"' .
|
|
\ ' -p ' . '"' . s:preprocessor . '"' .
|
|
\ ' -t ' . '"' . s:polution_directory . '"' .
|
|
\ ' sig ' .
|
|
\ ' > ' . '"' . s:sigs_script . '"'
|
|
|
|
" --- Signature stuff ---
|
|
function! SigDebug()
|
|
echo s:generation_command
|
|
endfunction
|
|
|
|
|
|
function! SigInit()
|
|
let g:signatures = {}
|
|
|
|
autocmd TextChangedI * call SigPopup()
|
|
endfunction
|
|
|
|
call SigInit()
|
|
|
|
function! SigPopup()
|
|
let key = matchstr(getline('.')[:col('.')-2], '\k\+$')
|
|
if has_key(g:signatures, key)
|
|
call popup_atcursor(g:signatures[key], #{} )
|
|
endif
|
|
endfunction
|
|
|
|
function! Sig()
|
|
execute 'source ' . s:sigs_script
|
|
endfunction
|
|
|
|
if exists('g:sigs_events')
|
|
for e in g:sigs_events
|
|
execute "autocmd " . e . " * Sig"
|
|
endfor
|
|
endif
|
|
|
|
command! Sig :call Sig()
|
|
" --- --- ---
|
|
|
|
function! HiTagsUpdate()
|
|
let pid = system(s:generation_command)
|
|
|
|
if v:shell_error != 0
|
|
echohl ErrorMsg
|
|
echomsg "error: " . s:generator_script . " failed."
|
|
echohl NONE
|
|
return 1
|
|
endif
|
|
endfunction
|
|
|
|
function! HiTagsClean()
|
|
syn clear HiTagSpecial
|
|
syn clear HiTagFunction
|
|
syn clear HiTagType
|
|
syn clear HiTagConstant
|
|
syn clear HiTagIdentifier
|
|
endfunction
|
|
|
|
function! HiTagsHighlight()
|
|
execute 'source ' . s:tags_script
|
|
endfunction
|
|
|
|
function! HiTagsDo()
|
|
call HiTagsUpdate()
|
|
call HiTagsClean()
|
|
call HiTagsHighlight()
|
|
endfunction
|
|
|
|
" --- Hook up everything ---
|
|
if exists('g:hitags_events')
|
|
for e in g:hitags_events
|
|
execute "autocmd " . e . " * HiTagsDo"
|
|
endfor
|
|
endif
|
|
|
|
hi link HiTagSpecial Special
|
|
hi link HiTagFunction Function
|
|
hi link HiTagType Type
|
|
hi link HiTagConstant Constant
|
|
hi link HiTagIdentifier Identifier
|
|
|
|
command! HiTagsUpdate :call HiTagsUpdate()
|
|
command! HiTagsClean :call HiTagsClean()
|
|
command! HiTagsHighlight :call HiTagsHighlight()
|
|
command! HiTagsDo :call HiTagsDo()
|