LoginSignup
4
1

More than 3 years have passed since last update.

DefxとDeniteを合わせて検索を快適に

Posted at

この記事はZOZOテクノロジーズ #4 Advent Calendar 2020の17日目の記事です。
昨日は @akitokさんの HTMLの分散負荷試験という選択肢 でした。

はじめに

Defxを利用中、カーソル上のディレクトリに対して、Deniteで検索できれば捗りそうだなと思ったので実装してみました。
2つのダークパワーにより、さらなる闇力を上げていこうかと思います!

Defx

簡単に説明すると、ツリー型のようなファイラーです。

スクリーンショット 2020-12-16 11.11.26.png

実装

Defxは、defx-action-callにより、独自関数をアクションとして呼び出すことができます。
これを利用して、Defxのカーソル上のディレクトリ内検索できるよう実装します。
※最後に最小構成のvimrc載せてます!

Defxから呼び出す関数

処理としては、

  1. Defxのカーソル上のディレクトリパスを取得(a:context.targets[0]で取得可能)
  2. それをもとに、Denite grepコマンドを実行

これだけでOKです!

function! DefxDeniteGrep(context) abort
  let dirpath = fnamemodify(a:context.targets[0], ':p:h')
  exec 'Denite grep -path=' . dirpath ' -start-filter'
endfunction

Defxキーバインドに追加

autocmd FileType defx call s:defx_custom_settings()
function! s:defx_custom_settings() abort
  nnoremap <silent><buffer><expr> <SPACE>fg
    \ defx#do_action('call', 'DefxDeniteGrep')
endfunction

実践

  1. :Defx
  2. 検索したいディレクトリにカーソル合わせる
  3. <SPACE>fgでDenite grep実行

ちなみに、インタラクティブでgrepしたい場合は、下記のように書き換えればOKですね!

function! DefxDeniteGrepInteractive(context) abort
  let dirpath = fnamemodify(a:context.targets[0], ':p:h')
  exec 'Denite grep:::! -path=' . dirpath ' -start-filter'
endfunction

最小構成のvimrc

サンプル実行

$ git clone https://gist.github.com/deresmos/32b54ebe418c935895505f41f4303358 sample
$ nvim -u sample/defx_sample.vim

まとめ

簡単にDefxの独自アクションを実装できるので、他にも色々とできそうですね!例えば、2つのディレクトリの差分をチェックしたい場合も、Defxで2つのディレクトリ選択してアクション実行させれば実現できそうですね!

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1