スキップしてメイン コンテンツに移動

ddu.vim introduction

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 の所を適度に修正してもらえばいい。

コメント

このブログの人気の投稿

EFIブートローダを移動した話

EFIブートローダを移動した HX90に環境を整え終わってから、アホな事をしたので、その記録を残す。 SSD: Cドライブ SSD: Dドライブ(データストレージ用) + ESP※ SSD: Eドライブ(データストレージ用) ※ESP(EFI System Partition) インストールした時、こんな構成だった。 ESPがDドライブにあるのが気持ち悪かったので、これを削除した。 そしたら、BIOS画面が出るだけになり、Windowsが起動しなくなった。 移動手順 この時の自分はMBRをふっ飛ばした時と同じ現象だと思ったので、MBRというキーワードで検索したが、今はEFIブートローダーと呼んでいるらしい。 【Win10】任意のディスクにEFIブートローダをインストールする 色々検索した結果この記事が参考になった。 Diskpartを使って、パーティションを新たに分割し、bcdbootを実行して、無事に事なきを得た。 パーティションの分割はこんな感じ Diskpart Select volume 0 shrink desired = 200 Select disk 0 Create partition EFI size=200 Format quick fs=fat32 label="ESP" Assign letter=P exit EFIブートローダーのインストールはこんな感じ bcdboot C:\Windows /s P: /f UEFI ちなみに、自分の環境だけの問題なのだが、コマンドラインで、「\」を入力するのができなかった。我が家のキーボードはHHKBだけなので、日本語配列を無理やり適用されると、バックスラッシュが入力できないという不具合が生じる。 結局、コマンドプロンプトからマウスで範囲選択してコピーして貼り付けるという荒業でクリアした。 普通の人は、何も考えずに、\を入力すれば良い。 最終的に SSD: Cドライブ + ESP※ SSD: Dドライブ(データストレージ用) SSD: Eドライブ(データストレージ用) ※ESP(EFI System Partition) という構成に切り替えることができた。

PlemolJP導入

PlemolJP を導入した 思い立つことがあり、 PlemolJP をインストールする事にした。 自分は、PowerLine を使っているので、PlemolJP Nerd Fonts 版である、PlemolJP_NF をダウンロードしてインストールした PlemolJP の releases から、PlemolJP_NF_vx.x.x.zip をダウンロードする。 zip を展開し、PlemolJPConsoleNF-Regular.ttf をインストールする set guifont=PlemolJP_Console_NF:h18 を gvimrc に書く(フォントサイズはお好きに) ちなみに、これは Windows 限定の設定なので、Mac や Linux などで導入する際には、別の方法をオススメする。 余談 gvimrc に指定するフォント名が微妙にわかりづらい。 普段は、 set guioptions-=m してメニューバーは出していないが、今回は :set guioptions+=m を実行して、編集 → フォント設定からフォントを選び、フォント名に入力されている文字列をコピペして、スペース部分をアンダースコアで置き換えた。 この辺のルールとかに詳しい人にぜひとも教えて欲しい所。 導入した感想 今までの Powerline フォントはいまいちなのが多かったが、PlemolJP の表示は非常に良い。 今後はこちらをメインで使って行きたい。 あと、僕はヱビス派です。