view plugin/gutentags.vim @ 136:286e5b3095d0

Allow restricting tag generation to files listed by custom commands This adds a new setting, g:gutentags_file_list_command, which specifies command(s) to use to list files for which tags should be generated, instead of recursively examining all files within the project root. This is useful in projects using source control to restrict tag generation to only files tracked in the repository. This setting is conceptually similar to CtrlP's ctrlp_user_command option. This implements the feature requested in https://github.com/ludovicchabant/vim-gutentags/issues/90
author Stephen Kent <smkent@smkent.net>
date Fri, 22 Jul 2016 19:25:05 -0700
parents a6ef1c860d07
children 7bc4df0225d1 3459a2522a3b
line wrap: on
line source

" gutentags.vim - Automatic ctags management for Vim
" Maintainer:   Ludovic Chabant <http://ludovic.chabant.com>
" Version:      0.0.1

" Globals {{{

if v:version < 704
    echoerr "gutentags: this plugin requires vim >= 7.4."
    finish
endif

let g:gutentags_debug = get(g:, 'gutentags_debug', 0)

if (exists('g:loaded_gutentags') || &cp) && !g:gutentags_debug
    finish
endif
if (exists('g:loaded_gutentags') && g:gutentags_debug)
    echom "Reloaded gutentags."
endif
let g:loaded_gutentags = 1

let g:gutentags_trace = get(g:, 'gutentags_trace', 0)
let g:gutentags_fake = get(g:, 'gutentags_fake', 0)
let g:gutentags_background_update = get(g:, 'gutentags_background_update', 1)
let g:gutentags_pause_after_update = get(g:, 'gutentags_pause_after_update', 0)
let g:gutentags_enabled = get(g:, 'gutentags_enabled', 1)
let g:gutentags_enabled_user_func = get(g:, 'gutentags_enabled_user_func', '')
let g:gutentags_modules = get(g:, 'gutentags_modules', ['ctags'])

let g:gutentags_add_default_project_roots = get(g:, 'gutentags_add_default_project_roots', 1)
let g:gutentags_project_root = get(g:, 'gutentags_project_root', [])
if g:gutentags_add_default_project_roots
    let g:gutentags_project_root += ['.git', '.hg', '.svn', '.bzr', '_darcs', '_FOSSIL_', '.fslckout']
endif
let g:gutentags_project_root_finder = ''

let g:gutentags_project_info = get(g:, 'gutentags_project_info', [])
call add(g:gutentags_project_info, {'type': 'python', 'file': 'setup.py'})
call add(g:gutentags_project_info, {'type': 'ruby', 'file': 'Gemfile'})

let g:gutentags_exclude = get(g:, 'gutentags_exclude', [])
let g:gutentags_exclude_project_root = get(g:, 'gutentags_exclude_project_root', ['/usr/local'])
let g:gutentags_resolve_symlinks = get(g:, 'gutentags_resolve_symlinks', 0)
let g:gutentags_generate_on_new = get(g:, 'gutentags_generate_on_new', 1)
let g:gutentags_generate_on_missing = get(g:, 'gutentags_generate_on_missing', 1)
let g:gutentags_generate_on_write = get(g:, 'gutentags_generate_on_write', 1)
let g:gutentags_file_list_command = get(g:, 'gutentags_file_list_command', '')

if !exists('g:gutentags_cache_dir')
    let g:gutentags_cache_dir = ''
else
    " Make sure we get an absolute/resolved path (e.g. expanding `~/`), and
    " strip any trailing slash.
    let g:gutentags_cache_dir = fnamemodify(g:gutentags_cache_dir, ':p')
    let g:gutentags_cache_dir = fnamemodify(g:gutentags_cache_dir, ':s?[/\\]$??')
endif

let g:gutentags_define_advanced_commands = get(g:, 'gutentags_define_advanced_commands', 0)

if g:gutentags_cache_dir != '' && !isdirectory(g:gutentags_cache_dir)
    call mkdir(g:gutentags_cache_dir, 'p')
endif

if has('win32')
    let g:gutentags_plat_dir = expand('<sfile>:h:h:p') . "\\plat\\win32\\"
    let g:gutentags_res_dir = expand('<sfile>:h:h:p') . "\\res\\"
    let g:gutentags_script_ext = '.cmd'
else
    let g:gutentags_plat_dir = expand('<sfile>:h:h:p') . '/plat/unix/'
    let g:gutentags_res_dir = expand('<sfile>:h:h:p') . '/res/'
    let g:gutentags_script_ext = '.sh'
endif

" }}}

" Gutentags Setup {{{

augroup gutentags_detect
    autocmd!
    autocmd BufNewFile,BufReadPost *  call gutentags#setup_gutentags()
    autocmd VimEnter               *  if expand('<amatch>')==''|call gutentags#setup_gutentags()|endif
augroup end

" }}}

" Toggles and Miscellaneous Commands {{{

command! GutentagsUnlock :call gutentags#delete_lock_files()

if g:gutentags_define_advanced_commands
    command! GutentagsToggleEnabled :let g:gutentags_enabled=!g:gutentags_enabled
    command! GutentagsToggleTrace   :call gutentags#toggletrace()
endif

if g:gutentags_debug
    command! GutentagsToggleFake    :call gutentags#fake()
endif

" }}}