Walk してファイル検索表示! (denops.vim)

2 min read読了の目安(約2300字

またまた denops.vim ネタ。

https://github.com/yukimemi/dps-walk

ファイルを walk して表示、 filter するやつ。

Denops Walk -> dps-walk

asciicast

インストール

インストールは dein.vim だとこんな感じ。

  • dein.toml
[[plugins]]
repo = 'vim-denops/denops.vim'

[[plugins]]
repo = 'yukimemi/dps-walk'
hook_add = '''
let g:walk_debug = v:false
" let g:walk_bufsize = 500
" let g:walk_skips = ["\\.git", "\\.svn", "\\.hg", "\\.o$", "\\.obj$", "\\.a$", "\\.exe~?$", "tags$"]

nnoremap <space>wa <cmd>DenopsWalk<cr>
nnoremap <space>ws <cmd>DenopsWalk --path=~/src<cr>
nnoremap <space>wD <cmd>DenopsWalk --path=~/.dotfiles<cr>
nnoremap <space>wc <cmd>DenopsWalk --path=~/.cache<cr>
nnoremap <space>wm <cmd>DenopsWalk --path=~/.memolist<cr>
nnoremap <space>wd <cmd>DenopsWalkBufferDir<cr>
'''

依存として、 denops.vim が必要。(もちろん Deno も。)

設定は特に不要だが、上記コメントアウトしているように追加設定は可能。

  • g:walk_debug

デバッグログ出力有無。デフォルト: v:false
調査で必要な時 v:true にすると、ログが echomsg される。

  • g:walk_bufsize

walk して見つかったファイルを描画する単位。デフォルト 500 ファイルずつ溜め込んで表示する。
フィルターに文字打ち込むと、その時点の見つかったファイルで即時表示される。

  • g:walk_skips

スキップする正規表現のリスト。
デフォルトは上記記載の通り。変更したい場合は設定する。

deno.land/std@0.92.0/fs/walk.ts - deno doc の引数 skip に指定される。

  • DenopsWalk

カレントディレクトリ配下のファイルを一覧表示する。
--pathwalk 始めるルートパスを指定できる。指定しない場合はカレントディレクトリとなる。
また、引数に文字列を指定することで予め検索対象を絞ることができる。
指定しなかった場合は Search for pattern: というプロンプトが出るのでそこで入力する。
全部対象にしたい場合は何も入力せずにそのまま Enter。

~/src 配下で vim がファイル名につくものを検索する例。

:DenopsWalk --path=~/src vim
  • DenopsWalkBufferDir

バッファのディレクトリ配下のファイルを一覧表示する。

不具合について

なぜか Vim では、 startinsert! が効かず、フィルターに入っても初期状態はノーマルモードのままとなってしまう・・・。
手動で i or a してインサートモードに入る必要あり・・・。

また、他にも、リストを毎回 deletebufline して、 setbufline しているからチカチカする・・・。
うまく非同期に update する方法はないだろうか・・・。


参考