Vimでファイル名をあいまい検索したり、ファイルの中身をgrepしたいと思ったときに、まず候補に上がるのがdenite.nvimだと思います。
denite.nvimを使えばファイルを開いたりgrepするだけでなく(私はそこまで使いこなせていないですが)カスタマイズしてもっといろいろなことがVimでできるようになります。
ちなみに、denite.nvimとよく比較されるプラグインとしてfzf.vimがありますが、fzf.vimはgrepすると頻繁に固まってしまったので個人的には安定してサクサク動くdenite.nvimがおすすめです。
そういうわけで、このエントリではNeoVimにdenite.nvimを導入する際の極めて個人的なおすすめの使い方と設定を紹介します。
denite.nvimはREADMEの冒頭に書かれている通り、インストールしただけではデフォルトのキーマッピングを持ちません。
そこで作者がサンプルとして載せてくれているキーマッピングを自分なりにアレンジして使わせてもらいます。
autocmd FileType denite call s:denite_my_settings()
function! s:denite_my_settings() abort
" エンターキー: 垂直分割でファイルを開く
nnoremap <silent><buffer><expr> <CR>
\ denite#do_map('do_action', 'vsplit')
" スペースキー: 水平分割でファイルを開く
nnoremap <silent><buffer><expr> <Space>
\ denite#do_map('do_action', 'split')
" エスケープキー: 終了
nnoremap <silent><buffer><expr> <Esc>
\ denite#do_map('quit')
" Qキー: 終了
nnoremap <silent><buffer><expr> q
\ denite#do_map('quit')
" Iキー: フィルター入力の開始
nnoremap <silent><buffer><expr> i
\ denite#do_map('open_filter_buffer')
" Aキー: フィルター入力の開始
nnoremap <silent><buffer><expr> a
\ denite#do_map('open_filter_buffer')
endfunction
ファイル検索(file/rec)とgrepを高速なrgに変更します。
rgはripgrepのコマンドでagよりも高速で.gitignore
ファイルを考慮して検索してくれます。
こちらも作者が載せてくれているサンプルをそのまま使わせてもらいます。
" Change file/rec command
call denite#custom#var('file/rec', 'command',
\ ['rg', '--files', '--glob', '!.git', '--color', 'never'])
" Ripgrep command on grep source
call denite#custom#var('grep', {
\ 'command': ['rg'],
\ 'default_opts': ['-i', '--vimgrep', '--no-heading'],
\ 'recursive_opts': [],
\ 'pattern_opt': ['--regexp'],
\ 'separator': ['--'],
\ 'final_opts': [],
\ })
rg
コマンドが必要なので適宜インストールしてください。
Macでは下記のようにHomebrewで簡単にインストールできます。
$ brew install ripgrep
ファイル名を検索するフィルターでdeoplete.nvimによる補完が嫌な人は、下記の設定を追加してオフにします。
好みの問題なので、実際に使ってみて必要なら設定してみてください。
" ref. https://github.com/Shougo/denite.nvim/issues/657
autocmd FileType denite-filter call s:denite_filter_my_settings()
function! s:denite_filter_my_settings() abort
call deoplete#custom#buffer_option('auto_complete', v:false)
endfunction
ファイル検索とgrepのキーマッピングを追加します。
ここは好みによって大きく変わってくる部分なので、私の設定を紹介しつつ、何をしているかだけ説明したいと思います。
まず下記が私の設定です。
call denite#custom#option('default', {
\ 'prompt': '% ',
\ 'split': 'floating',
\ 'wincol': float2nr((&columns - (&columns * s:floating_window_width_ratio)) / 2),
\ 'winheight': float2nr(&lines * s:floating_window_height_ratio),
\ 'winrow': float2nr((&lines - (&lines * s:floating_window_height_ratio)) / 2),
\ 'winwidth': float2nr(&columns * s:floating_window_width_ratio / 2),
\ })
nmap <silent> ;f :<C-u>Denite -start-filter file/rec<CR>
nmap <silent> ;F :<C-u>DeniteProjectDir -start-filter file/rec<CR>
nmap <silent> ;g :<C-u>DeniteProjectDir grep:::<C-r><C-w><CR>
nmap <silent> ;G :<C-u>DeniteProjectDir grep:::<C-r><C-a><CR>
nmap <silent> ;;g :<C-u>Denite grep<CR>
nmap <silent> ;;G :<C-u>DeniteProjectDir grep<CR>
;f
でファイル検索file/rec
を開始できます。-start-filter
オプションをつけると入力モードでフィルターを開始することができます。
;F
を使うとプロジェクトディレクトリから検索できます。
;g
でカーソル位置の単語で検索できます。区切り文字を含むようなネストされたモジュール名などをカーソル位置から検索するには;G
を使います。
自分でキーワードを入力してgrepしたい場合は;;g
や;;G
を使います。
denite#custom#option
の第1引数はバッファ名で、-buffer-name=some-name
のようにオプションで指定したバッファに対して個別にオプションを設定することもできます*1。
さらに下記のエントリでは自動プレビューの設定を紹介しています。自動プレビューは必須級に便利ですので、ぜひ設定してみてください。
以上です。
このエントリではNeoVimにdenite.nvimを導入する際の極めて個人的なおすすめの使い方と設定を紹介しました。
これを参考にぜひご自身の好みに合わせてカスタマイズしてみてください。良いVimライフを!
- 1:作者のShougo様から直々にアドバイスいただきました。感謝!
コメントを送る
コメントはブログオーナーのみ閲覧できます