🙌

ddu.vimを導入する

2022/03/11に公開
4

ddu.vimを導入

ddu.vimを一発で導入するためのスニペットを書いた。
各種解説を読みたい場合は、新世代の UI 作成プラグイン ddu.vimを読めば良い。

今回は、以下のsourceを導入する

  • file
  • register
  • buffer
  • mr

mrは履歴用。それ以外は、基本的なものを入れている。
ddu.vimを簡易実行するために、ddu-commands.vimも合わせて入れておく。
プラグインのインストールにはdein.vimを使う。
dein.vimは既にインストールされている物とする。

コピペ用

"dein
call dein#begin()

call dein#add('Shougo/ddu.vim')
call dein#add('vim-denops/denops.vim')
call dein#add('Shougo/ddu-ui-ff')
call dein#add('Shougo/ddu-source-file')
call dein#add('Shougo/ddu-source-register')
call dein#add('kuuote/ddu-source-mr')
call dein#add('lambdalisue/mr.vim')
call dein#add('shun/ddu-source-buffer')
call dein#add('Shougo/ddu-filter-matcher_substring')
call dein#add('Shougo/ddu-commands.vim')
call dein#add('Shougo/ddu-kind-file')

call dein#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

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 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>

使い方

normalモードで、

  • ,umで履歴表示
  • ,ubでバッファ表示
  • ,urでレジスタ表示
  • ,unで新規ファイル作成
  • ,ufでファイル選択

となっている。
iキーを押すと、ファジーファインドモードになり、そこから対象を絞り込んで行くことが出来る。
絞り込んだアイテムは、Ctlr+J/Ctrl+Kを使って選択を上下移動できる。
Enterキーで対象アイテムを開いたり、デフォルトの操作が出来たりする。
当面は、,ufを用いて、ファイルを選択することがメインになると思うが、その内、,umで多くのことがまかなえるようになる。
ちなみに、,unでのファイル作成を行なうと、カレントディレクトリが採用されるので、最初はどこにファイルが保存されるか分からないかもしれない。
任意のバッファ内で保存したい場合は、カレントディレクトリを変更すると良い。

command! -nargs=? -complete=dir -bang CD  call s:ChangeCurrentDir('<args>', '<bang>') 
function! s:ChangeCurrentDir(directory, bang)
    if a:directory == ''
	lcd %:p:h
    else
	execute 'lcd' . a:directory
    endif

    if a:bang == ''
	pwd
    endif
endfunction

" Change current directory.
nnoremap <silent> <Space>cd :<C-u>CD<CR>

上記のスクリプトを書いておけば、スペースcdでカレントディレクトリを変更することが出来る。

Discussion

ArcCosineArcCosine

ご指摘ありがとうございます。
typoとddu-kind-file追加しました。

ArcCosineArcCosine

最近のアップデートに合わせて、ddu_filter_my_settingsの内容を修正しました。