aboutsummaryrefslogtreecommitdiffstats
path: root/easytags.vim
blob: 7e7c649751bcde92457bcfae2b85d264e5845448 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
" Vim plug-in
" Maintainer: Peter Odding <peter@peterodding.com>
" Last Change: June 10, 2010
" URL: http://peterodding.com/code/vim/easytags
" Requires: Exuberant Ctags (http://ctags.sf.net)
" License: MIT
" Version: 1.8

" Support for automatic update using the GLVS plug-in.
" GetLatestVimScripts: 3114 1 :AutoInstall: easytags.zip

" Don't source the plug-in when its already been loaded or &compatible is set.
if &cp || exists('g:loaded_easytags')
  finish
endif

" Configuration defaults. {{{1

if !exists('g:easytags_file')
  if has('win32') || has('win64')
    let g:easytags_file = '~\_vimtags'
  else
    let g:easytags_file = '~/.vimtags'
  endif
endif

if !exists('g:easytags_resolve_links')
  let g:easytags_resolve_links = 0
endif

if !exists('g:easytags_always_enabled')
  let g:easytags_always_enabled = 0
endif

if !exists('g:easytags_on_cursorhold')
  let g:easytags_on_cursorhold = 1
endif

if !exists('g:easytags_ignored_filetypes')
  let g:easytags_ignored_filetypes = '^tex$'
endif

" Before sourcing the rest of the plug-in first check that the location of the
" "Exuberant Ctags" program has been configured or that the program exists in
" one of its default locations.

if exists('g:easytags_cmd') && executable(g:easytags_cmd)
  let s:ctags_installed = 1
else
  " On Ubuntu Linux, Exuberant Ctags is installed as `ctags'. On Debian Linux,
  " Exuberant Ctags is installed as `exuberant-ctags'. On Free-BSD, Exuberant
  " Ctags is installed as `exctags'. Finally there is `ctags.exe' on Windows.
  for s:command in ['ctags', 'exuberant-ctags', 'esctags', 'ctags.exe']
    if executable(s:command)
      let g:easytags_cmd = s:command
      let s:ctags_installed = 1
      break
    endif
  endfor
  unlet s:command
endif

if !exists('s:ctags_installed')
  echomsg "easytags.vim: Exuberant Ctags unavailable! Plug-in not loaded."
  if executable('apt-get')
    echomsg "On Ubuntu & Debian Linux, you can install Exuberant Ctags"
    echomsg "by installing the package named `exuberant-ctags':"
    echomsg "  sudo apt-get install exuberant-ctags"
  else
    echomsg "Please download & install Exuberant Ctags from http://ctags.sf.net"
  endif
  finish
endif
unlet s:ctags_installed

" Let Vim know about the global tags file created by this plug-in.

" Parse the &tags option and get a list of all configured tags files including
" non-existing files (this is why we can't just call the tagfiles() function).
let s:tagfiles = []
let s:expanded = []
for s:entry in split(&tags, '[^\\]\zs,')
  call add(s:tagfiles, s:entry)
  call add(s:expanded, expand(substitute(s:entry, '\\\([\\, ]\)', '\1', 'g')))
endfor

" Add the tags file to the &tags option when the user hasn't done so already.
if index(s:expanded, expand(g:easytags_file)) == -1
  let s:entry = substitute(expand(g:easytags_file), '[, ]', '\\\0', 'g')
  let &tags = join(insert(s:tagfiles, s:entry, 0), ',')
endif

unlet s:tagfiles s:expanded s:entry

" The :UpdateTags and :HighlightTags commands. {{{1

command! -bar -bang UpdateTags call easytags#update_cmd(<q-bang> == '!')
command! -bar HighlightTags call easytags#highlight_cmd()

" Automatic commands. {{{1

augroup PluginEasyTags
  autocmd!
  if g:easytags_always_enabled
    autocmd BufReadPost,BufWritePost * call easytags#autoload()
  endif
  if g:easytags_on_cursorhold
    autocmd CursorHold,CursorHoldI * call easytags#autoload()
  endif
  autocmd User PublishPre HighlightTags
augroup END

" }}}1

" Make sure the plug-in is only loaded once.
let g:loaded_easytags = 1

" vim: ts=2 sw=2 et