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

Neovim で関数ジャンプする

$
0
0

ある vimmer が IDE を眺めていて思ったこと。


関数の定義元にジャンプするやつずるい!!!!!!!


Vim でもぴょんぴょんしたい...

※ 以下は Neovim での手順ですが、Vim でも Neovim でもだいたい同じ手順のはず

ctags のインストール

Ctags(英: Ctags)はソース及びヘッダ内にある名前のインデックス(又はタグ)ファイルを生成するプログラム。
- Ctags - Wikipedia

関数ジャンプを実現するにはこいつと vim のタグジャンプを組み合わせればいい。

ctags といっても exuberant-ctags と universal-ctags というのがあり、前者はメンテされてないっぽい。
なので universal-ctagsをインストールしてみる。

Mac を使ってるので Homebrew を使う。

$ brew install--HEAD universal-ctags/universal-ctags/universal-ctags

実行が終わったらインストールされたか確認。

$ brew tap
homebrew/cask
homebrew/core
universal-ctags/universal-ctags

追加されてるね。
ついでに ctagsコマンド打ってみる。

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

たぶんOK。

設定ファイルの作成

universal-ctags の設定ファイルは ~/.ctags.d/配下に拡張子が .ctagsのファイルを置く。

$ mkdir ~/.ctags.d
$ touch ~/.ctags.d/config.ctags

config.ctagsはとりあえず以下のようにしておく。

config.ctags
# 除外するファイル or ディレクトリ
--exclude=*.min.js
--exclude=.git
--exclude=node_modules

# タグを作成する言語
--languages=javascript,php,python,typescript

# 言語ごとの作成するタグの種類
--kinds-javascript=*
--kinds-php=-{namespace}{local}{alias}
--kinds-python=*
--kinds-typescript=*

# 再帰的にディレクトリを探索してタグを作成
--recurse=yes

# タグを case-sensitive にソート
--sort=yes

# タグに相対パスを使う
--tag-relative=yes

# 参照する側のタグも作成
--extras=+{reference}

正規表現を使う

関数名が動的に定義されたりする場合でも、 ---regex-<LANG>=オプションでタグを作ることができる。
以下は Laravel のスコープとアクセサに対応させた例。

config.ctags
--regex-php=/get([a-z|A-Z|0-9]+)Attribute/\1/
--regex-php=/scope([a-z|A-Z|0-9]+)/\1/

タグの生成

試しにタグを作ってみる。
-R--recurseと同じ。

$ ctags -R

デフォルトではカレントディレクトリに tagsというファイルができる。

Neovim 経由で作るので一旦削除。

$ rm ./tags

Neovim の設定

init.vim に追記する。
以下のように書いておくと開いているファイルから親を遡って tags を探してくれるらしい。

settags=./tags;

他にも色々設定できる。

settags=./tags " 開いているファイルのディレクトリから tagsを探す
settags=tags   " カレントディレクトリから tagsを探す
settags=./tags,tags " どちらも探す (優先度高い順)

これで、手動で ctags -Rすれば一応は使えるようになった。

プラグイン

ファイル更新時に生成したりするのは面倒なのでプラグイン入れる。
auto-ctags.vimが良さそう。

dein などでインストールして、設定を init.vim に追記。

" ファイルに書き込む際にタグ生成letg:auto_ctags=1

Neovim で以下を実行すればカレントディレクトリに tags を生成してくれる。

:Ctags

使い方

コマンド動作
Ctrl - ]定義元にジャンプ
Ctrl - tジャンプ元に戻る
g]定義元の候補を列挙する

まとめ

結構手間がかかったけど無事に使えるようになった。
関数探すのにいちいち grep しなくて済む!

参考


Viewing all articles
Browse latest Browse all 5608

Trending Articles



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