アルパカログ

📅  2021-03-22

denite.nvimのgrepでテストファイルを除外する方法


Vimのファイル検索プラグイン denite.nvim はその速さとカスタマイズ性の高さから愛用している人も多いでしょう。

denite.nvim のgrepで検索する際、テストファイルを除外したいということがあります。

そこでこのエントリでは denite.nvim のgrepの対象からテストファイルを除外する方法を2ステップで説明します。

差分だけわかれば良いという方は下記コミットをご覧ください。

ステップ1. 任意のコマンドを定義する

テストファイルの除外はgrepのソースコマンドで行います。テストファイルを除外するオプションを加えて任意の名前でカスタムgrepを定義します。

例えば、次のディレクトリやファイルを除外したい場合を考えてみましょう。

  • test/ ディレクトリ
  • spec/ ディレクトリ
  • *_test.go ファイル

Ripgrep だと下記のようなオプション付きコマンドになります。

rg -g '!test/' -g '!spec/' -g '!*_test.go'

このオプションを default_opts に加えてカスタムgrepを定義します。

call denite#custom#var('grep/ignore_test', {
\ 'command': ['rg'],
\ 'default_opts': ['-i', '--vimgrep', '--no-heading', '-g', '!test/', '-g', '!spec/', '-g', '!*_test.go'],
\ 'recursive_opts': [],
\ 'pattern_opt': ['--regexp'],
\ 'separator': ['--'],
\ 'final_opts': [],
\ })

ここではカスタムgrepを grep/ignore_test という名前で定義しました。

定義したコマンドには下記のようにしてエイリアスを付けておきます。

call denite#custom#alias('source', 'grep/ignore_test', 'grep')

最終的な設定は下記になりました。

call denite#custom#alias('source', 'grep/ignore_test', 'grep')
call denite#custom#var('grep/ignore_test', {
\ 'command': ['rg'],
\ 'default_opts': ['-i', '--vimgrep', '--no-heading', '-g', '!test/', '-g', '!spec/', '-g', '!*_test.go'],
\ 'recursive_opts': [],
\ 'pattern_opt': ['--regexp'],
\ 'separator': ['--'],
\ 'final_opts': [],
\ })

ステップ2. カスタムgrepを任意のキーにマッピングする

カスタムgrepを定義したらキーマッピングを追加しておきましょう。例えば ;g にマッピングするには下記のようにします。

nmap <silent> ;g  :<C-u>DeniteProjectDir grep/ignore_test:::<C-r><C-w><CR>

これでテストファイルを除外してgrepできるようになりました。

テストファイルを除外するカスタムgrepとは別に、テストファイルを除外しない通常のgrepを別のキーに割り当てておくと状況に応じて使い分けられて便利です。

以上です。このエントリでは denite.nvim のgrepの対象からテストファイルを除外する方法を2ステップで説明しました。