Ctags: Cara mengurai tagname dan jenis dari output ctags -R -x

Dibuat pada 12 Mar 2019  ·  8Komentar  ·  Sumber: universal-ctags/ctags


Nama pengurai: siapa saja

Baris perintah yang Anda gunakan untuk menjalankan ctags:

$ ctags --options=NONE -R -x

Isi file masukan:

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

Keluaran tag yang Anda tidak puas dengan:

Saya tidak tahu bagaimana mengurai output dari ctags -R -x . Saya ingin memfilter nama tag dan cakupan dari output ctags -R -x , tetapi tidak tahu bagaimana melakukannya dengan benar.

Keluaran tag yang Anda harapkan:

Itu layak jika ada juga format khusus untuk ctags -R :

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

Versi ctag:

$ 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

Bagaimana Anda mendapatkan biner ctags:

brew install ctags di macOS

Semua 8 komentar

Saya tidak mengerti pertanyaan Anda.

Apakah Anda puas dengan output ctags -R ? Jika ya, mengapa Anda tidak menggunakan opsi -x ?
Saya ingin tahu lebih banyak latar belakang use case untuk menjawab pertanyaan Anda.

Saya tidak tahu skrip vim. Namun, sejauh membaca vim.c, pengurai vim dari ctag, itu tidak mengisi bidang cakupan. Jika menurut Anda itu adalah bug, beri tahu kami bahwa parser vim mengisi bidang cakupan untuk jenis input apa.

Maaf karena tidak menjelaskannya.

mengapa menggunakan opsi -x ?

Meskipun ctags -R akan memenuhi kebutuhan saya, saya tidak ingin membuat file tag, jadi saya menggunakan opsi -x .

kasus penggunaan saya.

Saat ini vista.vim hanya mendukung menampilkan tag di beberapa file, tetapi beberapa pengguna ingin menampilkan semua tag dalam sebuah proyek (https://github.com/liuchengxu/vista.vim/issues/14). Saya mencoba menambahkan dukungan ctags -R , tetapi tidak tahu cara mengekstrak hasil ini dengan benar.

Singkatnya, bagaimana cara mengekstrak vista#util#Trim , function , 18 , autoload/vista/util.vim , vista#util#Trim(str) masing-masing?

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

Dengan opsi -o - , ctags memancarkan output ke stdout seperti:

[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

Anda dapat menyesuaikan output dengan opsi --_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$/

Lihat http://docs.ctags.io/en/latest/news.html?highlight=--_xformat#customizing -xref-output .

Jika Anda tidak ingin menulis parser, --output-format=json bisa menjadi pilihan:

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"}

Terima kasih! Saya akan mencoba opsi --_xformat= , karena ctags diinstal oleh brew tidak mendukung --output-format=json secara default, apakah brew install ctags atau brew install --HEAD universal-ctags/universal-ctags/universal-ctags .

@KazuakiM , bukankah mungkin untuk menautkan ctag ke libjansson.so.4?
u-ctags memiliki mode keluaran json. Ini tersedia jika u-ctags ditautkan ke libjansson.
Beri tahu saya jika saya harus melaporkan ini sebagai masalah baru di repo homebrew-universal-ctags.

@liuchengxu , file tag, format asli ctag dapat diuraikan dengan fungsi di readtags.c.
perintah readtags dan python-ctags3, perpustakaan python menggunakan readtags.c.

@masatake
Hai, homebrew-universal-ctags mendukung 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 Tangkapan yang bagus, saya melewatkan bantuannya. Dukungan JSON membutuhkan opsi --with-jansson .

$ brew reinstall --with-jansson universal-ctags/universal-ctags/universal-ctags
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

jespinal picture jespinal  ·  8Komentar

jagjordi picture jagjordi  ·  9Komentar

JulienPivard picture JulienPivard  ·  16Komentar

trevordmiller picture trevordmiller  ·  9Komentar

fabiensabatie picture fabiensabatie  ·  3Komentar