Skip to content

Instantly share code, notes, and snippets.

@wordijp
Last active December 19, 2016 20:15
Show Gist options
  • Select an option

  • Save wordijp/ebddbe24404a892615a5c0ef4584cc3d to your computer and use it in GitHub Desktop.

Select an option

Save wordijp/ebddbe24404a892615a5c0ef4584cc3d to your computer and use it in GitHub Desktop.
Windows版Vimでも動作するtagsファイル作成コマンド
" tagsファイルを.gitディレクトリへ作成する
" NOtE : .gitディレトリが、プロジェクトのルートディレクトリ取得も兼ねている
function! Make_tags_gitdir()
let l:toplevel = system('git rev-parse --show-toplevel')
if v:shell_error
echo 'failed: git dir is not found'
endif
let l:toplevel = substitute(l:toplevel, '[\r\n]', '', 'g')
let l:cache_pwd = ''
redir => l:cache_pwd
silent pwd
redir END
let l:cache_pwd = substitute(l:cache_pwd, '[\r\n]', '', 'g')
let l:opt = ''
if &filetype ==# 'cpp'
let l:opt = l:opt.' --languages=c++'
elseif &filetype !=# ''
let l:opt = l:opt.' --languages='.&filetype
endif
let l:tagfile = l:toplevel.'/.git/tags'
" tags作成
try
exe 'lcd '.l:toplevel
call system('ctags --tag-relative --recurse --sort=yes --append=no '.l:opt.' -f '.l:tagfile.' '.l:toplevel) " 絶対パスで作成
echo 'done'
catch
echo 'error:' . v:exception
finally
exe 'lcd '.l:cache_pwd
endtry
endfunction
nnoremap :tgg :call Make_tags_gitdir()
set tags+=.git/tags
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment