ddu.vim へ移行する
昨日、重い腰を上げて、denite.vimから、ddu.vimへの移行を行った。
基本的なセッティッグは、ddu.vim の README.md を読めばある程度出来る。 とは言え、ddu.vim の理念を理解していないとそもそも使えないプラグインなので、理念を含めて説明していきたいと思う。
ddu.vim とは
ddu.vim は、Shougoさんによって開発されている、Vim プラグインである。 Unite.vim や denite.vim の流れを組むプラグインであり、物凄く雑に説明すると、Vim で操作できる全てをコントロールしようというプラグインである。 雑すぎねーか。
Unite.vim からこのコンセプトは変わっていないが、Unite.vim は速度が遅いという欠点を抱えていた。 そこで、速度改善のために、pure Vim Script から脱却し、Python3 を採用したのが、denite.vim。 しかし、denite.vim は Python 回りのでトラブルが多かった。
そういう地獄のような状況で、denops.vimというプラグインが登場する事で環境が一気に変わった。 denops.vim は、Denoを Vim で使えるようにするプラグインで、これがべらぼうに Vim と相性が良かった。 早いし、色々なことが出来るなど、非常に柔軟な対応を出来るようになった。 Python ちゃんは要らなかったんや……。
簡単にまとめると、
- ddu.vim は全てを繋ぐ
- 環境依存性を著しく下げる denpos.vim の登場により、環境構築が容易に
- Deno を採用することで高速性と柔軟性を担保
と言った、まさしく次世代のプラグインと呼ぶことが出来る。
ddu.vim の概念
ddu.vim には、
- UI
- sources
- filters
- kinds
という概念があり、これらも合わせてインストールが必要である。 それぞれ好きな物をインストールすれば良いと書いてしまえばそれで終わりなのだが、初めて導入する人にとっては何を言っているのか意味が分からないと思う。
UI は、文字通り、ユーザーインターフェースである。 とりあえず、ファジーファインダーに近い動きをしている、ddu-ui-ff を採用すれば良い。
sources は、文字通り、ソース。入力出力変換で言う所の入力。 ここが、色々とバラエティに溢れたのを採用出来るが、それがそもそも分からねーよ!!という人がいると思う。 代表的なのは、ファイルであるが、レジスタやバッファ、履歴などを採用出来る。 自分は、ファイル、レジスタ、バッファ、履歴を導入した。 よく使っているのは、履歴であり、これに関しては、導入して育てて行けばどんどん使いやすくなるので、マストで入れておきたい。 ファイルも、基本なので、これも導入しておきたい。 バッファも ddu.vim 経由で選択出来ると楽を出来るので、入れておきたい。 レジスタはおまけだが、これも有効だと便利。
filters は、文字通り、フィルタ。文字を入力して候補を絞っていくために自分は、ddu-filter-matcher_substring を採用している。 多分、これが一番使いやすい。
kinds は選んだアイテムに対する動作を設定する。基本、ddu-kind-file があれば問題ない。
ddu.vim の導入方法
ここから、ddu.vim の導入方法を記載する。 参考にして欲しい。 既に済んでいるステップがあるならば、飛ばしても良い。
Deno のインストール
ddu.vim の導入に当たり、Denoのインストールは必須なので、頑張ってインストールする。 まあ、頑張るほど大変ではない。
ddu.vim と必須ライブラリのインストール
- Shougo/ddu.vim
- vim-denops/denops.vim
上記のライブラリのインストールは必須。
UI のインストール
- Shougo/ddu-ui-ff
自分は、上記をインストールした。
sources のインストール
- Shougo/ddu-source-file
- Shougo/ddu-source-register
- kuuote/ddu-source-mr
- lambdalisue/mr.vim
- shun/ddu-source-buffer
先述したように、必要なソースをインストール。 mr.vim は ddu-source-mr に必要なので、インストール
filters のインストール
- Shougo/ddu-filter-matcher_substring
フィルタはとりあえず、matcher_substring が使いやすいので、オススメ。
kinds のインストール
- Shougo/ddu-kind-file
kinds は、当面は kind-file で間に合っている。
ddu-commands のインストール
- Shougo/ddu-commands.vim
:call ddu#start({雑多なオプション})みたいな感じで、実行してもいいが、それは面倒なので、vimrc によく使うコマンドをまとめて置くことにした。
まとめると
Plug 'Shougo/ddu.vim'
Plug 'vim-denops/denops.vim'
Plug 'Shougo/ddu-ui-ff'
Plug 'Shougo/ddu-source-file'
Plug 'Shougo/ddu-source-register'
Plug 'kuuote/ddu-source-mr'
Plug 'lambdalisue/mr.vim'
Plug 'shun/ddu-source-buffer'
Plug 'Shougo/ddu-filter-matcher_substring'
Plug 'Shougo/ddu-commands.vim'
すれば良い。
余談だが、自分は、dein.toml で管理しているので、vimrc には書いていない。
ddu の設定
call ddu#custom#patch_global({
\ 'ui': 'ff',
\ 'sources': [{'name':'file','params':{}},{'name':'mr'},{'name':'register'},{'name':'buffer'}],
\ 'sourceOptions': {
\ '_': {
\ 'matchers': ['matcher_substring'],
\ },
\ },
\ 'kindOptions': {
\ 'file': {
\ 'defaultAction': 'open',
\ },
\ },
\ })
一番シンプルなこの形を採用した。 最低限の事は出来る。 sources に何を入れるかがキモだが、自分はとりあえず先述したように、ファイル、履歴、レジスタ、バッファを入れた。
キー操作の設定
ddu.vim 内での動きをキー設定する必要があるので、vimrc に書く。
autocmd FileType ddu-ff call s:ddu_my_settings()
function! s:ddu_my_settings() abort
nnoremap <buffer><silent> <CR>
\ <Cmd>call ddu#ui#ff#do_action('itemAction')<CR>
nnoremap <buffer><silent> <Space>
\ <Cmd>call ddu#ui#ff#do_action('toggleSelectItem')<CR>
nnoremap <buffer><silent> i
\ <Cmd>call ddu#ui#ff#do_action('openFilterWindow')<CR>
nnoremap <buffer><silent> q
\ <Cmd>call ddu#ui#ff#do_action('quit')<CR>
endfunction
autocmd FileType ddu-ff-filter call s:ddu_filter_my_settings()
function! s:ddu_filter_my_settings() abort
nnoremap <buffer> <CR>
\ <Cmd>call ddu#ui#ff#do_action('itemAction')<CR>
nnoremap <buffer><silent> q
\ <Cmd>call ddu#ui#ff#do_action('quit')<CR>
inoremap <buffer> <CR>
\ <Cmd>call ddu#ui#ff#do_action('itemAction')<CR>
inoremap <buffer> <C-j>
\ <Cmd>call ddu#ui#ff#execute("call cursor(line('.')+1,0)")<CR>
inoremap <buffer> <C-k>
\ <Cmd>call ddu#ui#ff#execute("call cursor(line('.')-1,0)")<CR>
endfunction
ddu.vim を起動したあと、i キーを押すことで、ファジーファインダーでやってる事が出来る。 q で終了、エンターでアクション実行、Ctrl+J/Ctrl+K でアイテムの上下移動ができる。 この辺は基本の動作として書いておけば良い。
nnoremap <SID>[ug] <Nop>
nmap ,u <SID>[ug]
nnoremap <silent> <SID>[ug]m :<C-u>Ddu mr<CR>
nnoremap <silent> <SID>[ug]b :<C-u>Ddu buffer<CR>
nnoremap <silent> <SID>[ug]r :<C-u>Ddu register<CR>
nnoremap <silent> <SID>[ug]n :<C-u>Ddu file -source-param-new -volatile<CR>
nnoremap <silent> <SID>[ug]f :<C-u>Ddu file<CR>
自分は、トリガーを,u に設定している。
- ,um で履歴表示
- ,ub でバッファ表示
- ,ur でレジスタ表示
- ,un で新規ファイル作成
- ,uf でファイル選択
という動きをさせている。ちなみに、新規ファイル作成は昨日実装されたばかりの機能なので、今導入すれば古参顔する事が出来る。
コピペしたい人用
とっちらかり過ぎていてつれえわ……って人用に、まとめとく。
"vim-plug
call plug#begin()
Plug 'Shougo/ddu.vim'
Plug 'vim-denops/denops.vim'
Plug 'Shougo/ddu-ui-ff'
Plug 'Shougo/ddu-source-file'
Plug 'Shougo/ddu-source-register'
Plug 'kuuote/ddu-source-mr'
Plug 'lambdalisue/mr.vim'
Plug 'shun/ddu-source-buffer'
Plug 'Shougo/ddu-filter-matcher_substring'
Plug 'Shougo/ddu-commands.vim'
call plug#end()
"ddu settings.
call ddu#custom#patch_global({
\ 'ui': 'ff',
\ 'sources': [{'name':'file','params':{}},{'name':'mr'},{'name':'register'},{'name':'buffer'}],
\ 'sourceOptions': {
\ '_': {
\ 'matchers': ['matcher_substring'],
\ },
\ },
\ 'kindOptions': {
\ 'file': {
\ 'defaultAction': 'open',
\ },
\ },
\ })
"ddu-key-setting
autocmd FileType ddu-ff call s:ddu_my_settings()
function! s:ddu_my_settings() abort
nnoremap <buffer><silent> <CR>
\ <Cmd>call ddu#ui#ff#do_action('itemAction')<CR>
nnoremap <buffer><silent> <Space>
\ <Cmd>call ddu#ui#ff#do_action('toggleSelectItem')<CR>
nnoremap <buffer><silent> i
\ <Cmd>call ddu#ui#ff#do_action('openFilterWindow')<CR>
nnoremap <buffer><silent> q
\ <Cmd>call ddu#ui#ff#do_action('quit')<CR>
endfunction
function! s:ddu_filter_my_settings() abort
nnoremap <buffer> <CR>
\ <Cmd>call ddu#ui#ff#do_action('itemAction')<CR>
nnoremap <buffer><silent> q
\ <Cmd>call ddu#ui#ff#do_action('quit')<CR>
inoremap <buffer> <CR>
\ <Cmd>call ddu#ui#ff#do_action('itemAction')<CR>
inoremap <buffer> <C-j>
\ <Cmd>call ddu#ui#ff#execute("call cursor(line('.')+1,0)")<CR>
inoremap <buffer> <C-k>
\ <Cmd>call ddu#ui#ff#execute("call cursor(line('.')-1,0)")<CR>
endfunction
"ddu keymapping.
nnoremap <SID>[ug] <Nop>
nmap ,u <SID>[ug]
nnoremap <silent> <SID>[ug]m :<C-u>Ddu mr<CR>
nnoremap <silent> <SID>[ug]b :<C-u>Ddu buffer<CR>
nnoremap <silent> <SID>[ug]r :<C-u>Ddu register<CR>
nnoremap <silent> <SID>[ug]n :<C-u>Ddu file -source-param-new -volatile<CR>
nnoremap <silent> <SID>[ug]f :<C-u>Ddu file<CR>
うん、長いなこれ。 とりあえず、これを vimrc に書いて、:PlugInstall した後、,uf から、ddu.vim の世界に入門することをオススメする。 自分は、,u をトリガーにしているが、ここは好きな奴に変えてもらって構わない。 ddu keymapping の所を適度に修正してもらえばいい。
コメント
コメントを投稿