Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

gtags memo

$
0
0

globalやGTAGSの話となるとほとんどvimから検索するみたいな記事ばかりですが、この記事はshellからglobalコマンドをgrepの代替として使います。

grepに勝るglobalコマンドでファイル内検索

globalコマンドを使えばあらかじめ作成したファイル内の定義を検索するので、grepのようにいちいちファイルをオープンして探すみたいな時間のかかる行為をしなくて高速検索できる。

tagsファイルを作成

python用には

$cd ~/Dropbox/Program/python
$ ctags -R**/*.py

ディレクトリ数: 209, ファイル数: 4998のディレクトリで10秒程度でした。

あらかじめGTAGSファイルを作成

$cd path/to/project
$ global -v

ディレクトリ数:18103, ファイル数:2591 の私のpythonのsite-packageディレクトリでは GPATH, GRTAGS, GTAGSの作成に5分半かかりました。

関数->ファイル

zshのcompletionsを使うとglobal fineTabとするだけでfine_ticksをコンプリーションしてくれて、そのままEnter押せば、fine_ticksが定義されているファイルパスを見つけてくれます。

fineでfine_ticks
$ global fine_ticks
pyfeko/bin/pyfeko.py
fine_ticksが定義されているファイルのマッチする行を色付きで出力
$ global --grep fine_ticks --result=grep--color
  • --grep: grepを使ってすべてのマッチする行を出力
  • --result: 出力結果をの表示方法をcscope, ctags, ctags-x, grep, pathから選択。デフォルトはpath
  • --colorgrepで抜き出されたところに色付け
resultの出力結果の違い
$ global --grep fine_ticks --result=path
pyfeko/bin/pyfeko.py

$ global --grep fine_ticks --result=cscope
pyfeko/bin/pyfeko.py fine_ticks 163 def fine_ticks(tick, deg):
pyfeko/bin/pyfeko.py fine_ticks 175 print(fine_ticks(np.arange(181),i))
pyfeko/bin/pyfeko.py fine_ticks 233 plt.xticks(fine_ticks(x, xti))  # 30degごと
pyfeko/bin/pyfeko.py fine_ticks 234 plt.yticks(fine_ticks(y, yti))  # 1degごと
pyfeko/bin/pyfeko.py fine_ticks 235 ax = plt.colorbar(ticks=fine_ticks(interval, cmapstep))  #カラーバー2区切りで表示
$ global --grep fine_ticks --result=ctags
fine_ticks  pyfeko/bin/pyfeko.py    163
fine_ticks  pyfeko/bin/pyfeko.py    175
fine_ticks  pyfeko/bin/pyfeko.py    233
fine_ticks  pyfeko/bin/pyfeko.py    234
fine_ticks  pyfeko/bin/pyfeko.py    235

$ global --grep fine_ticks --result=ctags-x
fine_ticks        163 pyfeko/bin/pyfeko.py def fine_ticks(tick, deg):
fine_ticks        175 pyfeko/bin/pyfeko.py               print(fine_ticks(np.arange(181),i))
fine_ticks        233 pyfeko/bin/pyfeko.py     plt.xticks(fine_ticks(x, xti))  # 30degごと
fine_ticks        234 pyfeko/bin/pyfeko.py     plt.yticks(fine_ticks(y, yti))  # 1degごと
fine_ticks        235 pyfeko/bin/pyfeko.py     ax = plt.colorbar(ticks=fine_ticks(interval, cmapstep))  #カラーバー2区切りで表示
$ global --grep fine_ticks --result=greppyfeko/bin/pyfeko.py:163:def fine_ticks(tick, deg):
pyfeko/bin/pyfeko.py:175:              print(fine_ticks(np.arange(181),i))
pyfeko/bin/pyfeko.py:233:    plt.xticks(fine_ticks(x, xti))  # 30degごと
pyfeko/bin/pyfeko.py:234:    plt.yticks(fine_ticks(y, yti))  # 1degごと
pyfeko/bin/pyfeko.py:235:    ax = plt.colorbar(ticks=fine_ticks(interval, cmapstep))  #カラーバー2区切りで表示

ファイル->関数

-fオプションを使えば、特定のファイルに含まれる言語の定義だけを標準出力に出力できます。

generator.pyに含まれる定義を出力
$ global -f generator.py                                                                                                     TSTP(-20)↵  ⚙  03:26 Dur  15251  11:33:01
ctags: Warning: Ignoring non-option in ./.ctags

s                   3 generator.py     s='alphabets'
it                  4 generator.py     it=iter(s)
gen                12 generator.py     def gen(data):
gen2               43 generator.py     def gen2(data):
ls                 64 generator.py     ls=[i*i for i in range(10)]
xvec               71 generator.py     xvec=[2,3,4]
yvec               72 generator.py     yvec=[10,10,10]
f                  78 generator.py     def f():
v                  83 generator.py     v=list(f())

下のようにしてパイプで複数ファイルの検索もできます。
findやlocateも応用できそうです。

パイプを利用して検索
$ls re*# reを含むファイルを表示read_filelist.py*  remove_empty_list.py*  requests_use.py*

$\ls re* | xargs global -f# バックスラッシュを入れないと*アスタリスクが入って「そんなファイルはない!」と怒られる
ctags: Warning: Ignoring non-option in ./.ctags

codecs              1 read_filelist.py import codecs
re                  2 read_filelist.py import re
read_filelist       5 read_filelist.py def read_filelist(filelist_path):
doctest             3 requests_use.py  import doctest
requests            4 requests_use.py  import requests
sample              7 requests_use.py  def sample(query):

htags

Dropbox上のpythonディレクトリ
ディレクトリ数: 209
ファイル数: 4998
html化にかかった時間: 2min13sec


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>