Ctags: ctags -R -x . рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдЯреИрдЧрдирд╛рдо рдФрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдорд╛рд░реНрдЪ 2019  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: universal-ctags/ctags


рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдирд╛рдо: рдХреЛрдИ рдПрдХ

ctags рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЬрд┐рд╕ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

$ ctags --options=NONE -R -x

рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА:

$ git clone https://github.com/liuchengxu/vista.vim
$ cd vista.vim
$ ctags --options=NONE -R -x

рдЯреИрдЧ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдЖрдк рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ:

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ ctags -R -x рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдХреИрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореИрдВ ctags -R -x рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдЯреИрдЧрдирд╛рдо рдФрд░ рджрд╛рдпрд░реЗ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдареАрдХ рд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЯреИрдЧ рдЖрдЙрдЯрдкреБрдЯ:

рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реИ рдпрджрд┐ ctags -R рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╛рд░реВрдк рднреА рд╣реИ:

{tagname}<Tab>{tagfile}<Tab>{tagaddress}[;"<Tab>{tagfield}..]

ctags рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг:

$ ctags --version
Universal Ctags 0.0.0(1208e45), Copyright (C) 2015 Universal Ctags Team
Universal Ctags is derived from Exuberant Ctags.
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Mar 11 2019, 17:01:27
  URL: https://ctags.io/
  Optional compiled features: +wildcards, +regex, +iconv, +option-directory, +xpath, +case-insensitive-filenames, +packcc

рдЖрдк ctags рдмрд╛рдЗрдирд░реА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

brew install ctags macOS рдкрд░

рд╕рднреА 8 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рдЖрдкрдХрд╛ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рд╕рдордЭрддрд╛ред

рдХреНрдпрд╛ рдЖрдк ctags -R рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рд╣реИрдВ? рдпрджрд┐ рд╣рд╛рдБ, рддреЛ рдЖрдк -x рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ?
рдореИрдВ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рдФрд░ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореИрдВ рд╡рд┐рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрд╣рд╛рдБ рддрдХ vim.c, ctags рдХреЗ рд╡рд┐рдо рдкрд╛рд░реНрд╕рд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдмрд╛рдд рд╣реИ, рдпрд╣ рд╕реНрдХреЛрдк рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ рднрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рдо рдкрд╛рд░реНрд╕рд░ рд╕реНрдХреЛрдк рдлреАрд▓реНрдб рднрд░рддрд╛ рд╣реИред

рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред

-x рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?

рд╣рд╛рд▓рд╛рдВрдХрд┐ ctags -R рдореЗрд░реА рдЬрд╝рд░реВрд░рдд рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛, рдореИрдВ рдЯреИрдЧ рдлрд╝рд╛рдЗрд▓ рдЬреЗрдирд░реЗрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ -x рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ vista.vim рдХреЗрд╡рд▓ рдХреБрдЫ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЯреИрдЧ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рднреА рдЯреИрдЧ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (https://github.com/liuchengxu/vista.vim/issues/14)ред рдореИрдВрдиреЗ ctags -R рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрди рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рдПред

рдПрдХ рд╢рдмреНрдж рдореЗрдВ, рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓реЗрдВ vista#util#Trim , function , 18 , autoload/vista/util.vim , vista#util#Trim(str) рдХреНрд░рдорд╢рдГ?

ctags -R -x :

...
vista#util#Trim  function     18 autoload/vista/util.vim function! vista#util#Trim(str)
vista#util#Truncate function     13 autoload/vista/util.vim function! vista#util#Truncate(msg) abort
vista#util#Warning function     90 autoload/vista/util.vim function! vista#util#Warning(msg) abort
vista#viewer#Display function     90 autoload/vista/viewer.vim function! vista#viewer#Display(data) abort
vista#viewer#Render function     86 autoload/vista/viewer.vim function! vista#viewer#Render(data) abort
vista#viewer#prefixes function     94 autoload/vista/viewer.vim function! vista#viewer#prefixes() abort

-o - рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде, ctags рдЖрдЙрдЯрдкреБрдЯ рдХреЛ stdout рдореЗрдВ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ:

[yamato@slave]/tmp/vista.vim% u-ctags -R -o - | head 
/   ftplugin/vista.vim  /^nnoremap <buffer> <silent> \/    :<c-u>call vista#finder#fzf#Run()<CR>$/;"    m
<CR>    ftplugin/vista.vim  /^nnoremap <buffer> <silent> <CR> :<c-u>call vista#cursor#FoldOrJump()<CR>$/;"  m
Commands    README.md   /^### Commands$/;"  S
Contributing    README.md   /^## Contributing$/;"   s
Features    README.md   /^## Features$/;"   s
Installation    README.md   /^## Installation$/;"   s
Introduction    README.md   /^## Introduction$/;"   s
License README.md   /^## License$/;"    s
NeoVim  README.md   /^#### NeoVim$/;"   t
Options README.md   /^### Options$/;"   S

рдЖрдк --_xformat= рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 u-ctags -R -x --_xformat='TAGNAME:%N @@@ KIND:%K !!! LINE:%n +++ INPUT-FILE:%F === PATTERN:%P' | head
TAGNAME:/ @@@ KIND:map !!! LINE:38 +++ INPUT-FILE:ftplugin/vista.vim === PATTERN:/^nnoremap <buffer> <silent> \/    :<c-u>call vista#finder#fzf#Run()<CR>$/
TAGNAME:<CR> @@@ KIND:map !!! LINE:37 +++ INPUT-FILE:ftplugin/vista.vim === PATTERN:/^nnoremap <buffer> <silent> <CR> :<c-u>call vista#cursor#FoldOrJump()<CR>$/
TAGNAME:Commands @@@ KIND:subsection !!! LINE:101 +++ INPUT-FILE:README.md === PATTERN:/^### Commands$/
TAGNAME:Contributing @@@ KIND:section !!! LINE:164 +++ INPUT-FILE:README.md === PATTERN:/^## Contributing$/
TAGNAME:Features @@@ KIND:section !!! LINE:37 +++ INPUT-FILE:README.md === PATTERN:/^## Features$/
TAGNAME:Installation @@@ KIND:section !!! LINE:69 +++ INPUT-FILE:README.md === PATTERN:/^## Installation$/
TAGNAME:Introduction @@@ KIND:section !!! LINE:25 +++ INPUT-FILE:README.md === PATTERN:/^## Introduction$/
TAGNAME:License @@@ KIND:section !!! LINE:168 +++ INPUT-FILE:README.md === PATTERN:/^## License$/
TAGNAME:NeoVim @@@ KIND:subsubsection !!! LINE:90 +++ INPUT-FILE:README.md === PATTERN:/^#### NeoVim$/
TAGNAME:Options @@@ KIND:subsection !!! LINE:113 +++ INPUT-FILE:README.md === PATTERN:/^### Options$/

http://docs.ctags.io/en/latest/news.html?highlight=--_xformat#customizing -xref-output рджреЗрдЦреЗрдВред

рдпрджрд┐ рдЖрдк рдПрдХ рдкрд╛рд░реНрд╕рд░ рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ --output-format=json рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

u-ctags -R --output-format=json | head
{"_type": "tag", "name": "/", "path": "ftplugin/vista.vim", "pattern": "/^nnoremap <buffer> <silent> \\/    :<c-u>call vista#finder#fzf#Run()<CR>$/", "kind": "map"}
{"_type": "tag", "name": "<CR>", "path": "ftplugin/vista.vim", "pattern": "/^nnoremap <buffer> <silent> <CR> :<c-u>call vista#cursor#FoldOrJump()<CR>$/", "kind": "map"}
{"_type": "tag", "name": "Commands", "path": "README.md", "pattern": "/^### Commands$/", "kind": "subsection"}
{"_type": "tag", "name": "Contributing", "path": "README.md", "pattern": "/^## Contributing$/", "kind": "section"}
{"_type": "tag", "name": "Features", "path": "README.md", "pattern": "/^## Features$/", "kind": "section"}
{"_type": "tag", "name": "Installation", "path": "README.md", "pattern": "/^## Installation$/", "kind": "section"}
{"_type": "tag", "name": "Introduction", "path": "README.md", "pattern": "/^## Introduction$/", "kind": "section"}
{"_type": "tag", "name": "License", "path": "README.md", "pattern": "/^## License$/", "kind": "section"}
{"_type": "tag", "name": "NeoVim", "path": "README.md", "pattern": "/^#### NeoVim$/", "kind": "subsubsection"}
{"_type": "tag", "name": "Options", "path": "README.md", "pattern": "/^### Options$/", "kind": "subsection"}

рд╢реБрдХреНрд░рд┐рдпрд╛! рдореИрдВ --_xformat= рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдмреНрд░реВ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдкрд┐рдд ctags --output-format=json рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ brew install ctags рдпрд╛ brew install --HEAD universal-ctags/universal-ctags/universal-ctags ред

@KazuakiM , рдХреНрдпрд╛ ctags рдХреЛ libjansson.so.4 рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ?
рдпреВ-рд╕реАрдЯреАрдПрдЬреА рдореЗрдВ рдЬреЗрд╕рди рдЖрдЙрдЯрдкреБрдЯ рдореЛрдб рд╣реИред рдпрд╣ рдЙрдкрд▓рдмреНрдз рд╣реИ рдпрджрд┐ u-ctags libjansson рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред
рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕реЗ рд╣реЛрдордмреНрд░реЗ-рдпреВрдирд┐рд╡рд░реНрд╕рд▓-рд╕реАрдЯреАрдПрдЬреА рд░реЗрдкреЛ рдкрд░ рдПрдХ рдирдП рдореБрджреНрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@liuchengxu , рдЯреИрдЧ рдлрд╝рд╛рдЗрд▓, ctags рдХреЗ рдореВрд▓ рд╕реНрд╡рд░реВрдк рдХреЛ readtags.c рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
readtags рдХрдорд╛рдВрдб рдФрд░ python-ctags3, рдПрдХ рдЕрдЬрдЧрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп readtags.c рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

@masatake
рдирдорд╕реНрддреЗ, Homebrew-universal-ctags jansson рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред

$ brew info universal-ctags
universal-ctags/universal-ctags/universal-ctags: HEAD
Maintained ctags implementation
https://github.com/universal-ctags/ctags
Conflicts with:
  ctags (because this formula installs the same executable as the ctags formula)
/usr/local/Cellar/universal-ctags/HEAD-1b747b3 (325 files, 4.3MB) *
  Built from source on 2019-02-02 at 16:45:17
From: https://github.com/universal-ctags/homebrew-universal-ctags/blob/master/universal-ctags.rb
==> Dependencies
Build: autoconf тЬФ, automake тЬФ, pkg-config тЬФ
Optional: jansson тЬФ, libyaml тЬФ
==> Options
--with-jansson
        Build with jansson support
--with-libyaml
        Build with libyaml support
--without-doc
        Compile without man pages
--without-xml
        Compile without libxml2
--HEAD
        Install HEAD version
==> Caveats
Under some circumstances, emacs and ctags can conflict. By default,
emacs provides an executable `ctags` that would conflict with the
executable of the same name that ctags provides. To prevent this,
Homebrew removes the emacs `ctags` and its manpage before linking.
However, if you install emacs with the `--keep-ctags` option, then
the `ctags` emacs provides will not be removed. In that case, you
won't be able to install ctags successfully. It will build but not
link.

@KazuakiM рдЕрдЪреНрдЫреА рдкрдХрдбрд╝, рдореИрдВ рдорджрдж рд╕реЗ рдЪреВрдХ рдЧрдпрд╛ред JSON рд╕рдорд░реНрдерди рдХреЛ --with-jansson рд╡рд┐рдХрд▓реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

$ brew reinstall --with-jansson universal-ctags/universal-ctags/universal-ctags
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕