]> Sergey Matveev's repositories - dotfiles.git/blobdiff - vim/.vim/autoload/ctags.vim
Vim scripts refactoring
[dotfiles.git] / vim / .vim / autoload / ctags.vim
diff --git a/vim/.vim/autoload/ctags.vim b/vim/.vim/autoload/ctags.vim
new file mode 100644 (file)
index 0000000..dc6f90e
--- /dev/null
@@ -0,0 +1,35 @@
+" Universal Ctags creator
+" Maintainer: Sergey Matveev <stargrave@stargrave.org>
+" License: GNU General Public License version 3 of the License or later
+"
+" Create "tags" file in your project's root first.
+" Then :Ctags LANG to fill it.
+
+function! ctags#do(lang, onlyCmd, verbose) abort
+    let dst = tagfiles()
+    if len(dst) == 0
+        echohl WarningMsg | echomsg "No tagfiles" | echohl None
+        return
+    endif
+    let dst = sort(dst, {a, b -> len(a) > len(b) ? 1 : len(a) == len(b) ? 0 : -1})[0]
+    let src = "/" . join(split(dst, "/")[:-3], "/")
+    if dst[0] != "/"
+        let dst = getcwd() . "/.tags/tags"
+        let src = getcwd()
+    endif
+    let cmdline = [
+        \"uctags",
+        \"--languages=" . a:lang,
+        \"--python-kinds=-i",
+        \"--c++-kinds=+p",
+        \"--recurse",
+    \]
+    if a:verbose == v:true | let cmdline += ["--verbose"] | endif
+    let cmdline += ["-f", dst, src]
+    if a:onlyCmd == v:true
+        echo join(cmdline, " ")
+        return
+    endif
+    execute "!" . join(cmdline, " ")
+    if a:verbose != v:true | redraw! | endif
+endfunction