logo

アルパカログ

Vimファイラの決定版「ddu-ui-filer」設定例を紹介

先日 defx.nvim の後継となる ddu-ui-filer が公開されました。

ddu-ui-filer は Vim にファイラ機能を追加するプラグインで、Vim 上でファイルツリーを表示したり、ファイル操作ができるようになります。

ddu-ui-filer は defx.nvim を使ったことのある方にとっては説明の必要もないくらい簡単に設定ができますが、そうでない人のためにこの記事では ddu-ui-filer の設定例を紹介します。

ℹ️
ddu.vim の他の設定例は ddu.vim 設定例の紹介 をご覧ください。
インストール

ddu-ui-filer は ddu のいちUIなので、事前に ddu.vim をインストールしておいてください。

追加で ddu-ui-filer, ddu-source-fileddu-kind-fileddu-column-filename をインストールします。

設定例

NeoVim ファイル操作とツリー表示が便利なdefx.nvimの設定と使い方 で紹介した使い勝手となるように設定していきます。

設定例は下記です。

call ddu#custom#patch_local('filer', {
\   'ui': 'filer',
\   'sources': [
\     {
\       'name': 'file',
\       'params': {},
\     },
\   ],
\   'sourceOptions': {
\     '_': {
\       'columns': ['filename'],
\     },
\   },
\   'kindOptions': {
\     'file': {
\       'defaultAction': 'open',
\     },
\   },
\   'uiParams': {
\     'filer': {
\       'winWidth': 40,
\       'split': 'vertical',
\       'splitDirection': 'topleft',
\     }
\   },
\ })

autocmd TabEnter,CursorHold,FocusGained <buffer>
	\ call ddu#ui#filer#do_action('checkItems')

autocmd FileType ddu-filer call s:ddu_filer_my_settings()
function! s:ddu_filer_my_settings() abort
  nnoremap <buffer><silent><expr> <CR>
    \ ddu#ui#filer#is_tree() ?
    \ "<Cmd>call ddu#ui#filer#do_action('itemAction', {'name': 'narrow'})<CR>" :
    \ "<Cmd>call ddu#ui#filer#do_action('itemAction', {'name': 'open', 'params': {'command': 'vsplit'}})<CR>"

  nnoremap <buffer><silent><expr> <Space>
    \ ddu#ui#filer#is_tree() ?
    \ "<Cmd>call ddu#ui#filer#do_action('itemAction', {'name': 'narrow'})<CR>" :
    \ "<Cmd>call ddu#ui#filer#do_action('itemAction', {'name': 'open', 'params': {'command': 'split'}})<CR>"

  nnoremap <buffer><silent> <Esc>
    \ <Cmd>call ddu#ui#filer#do_action('quit')<CR>

  nnoremap <buffer><silent> q
    \ <Cmd>call ddu#ui#filer#do_action('quit')<CR>

  nnoremap <buffer><silent> ..
    \ <Cmd>call ddu#ui#filer#do_action('itemAction', {'name': 'narrow', 'params': {'path': '..'}})<CR>

  nnoremap <buffer><silent> c
    \ <Cmd>call ddu#ui#filer#do_action('itemAction', {'name': 'copy'})<CR>

  nnoremap <buffer><silent> p
    \ <Cmd>call ddu#ui#filer#do_action('itemAction', {'name': 'paste'})<CR>

  nnoremap <buffer><silent> d
    \ <Cmd>call ddu#ui#filer#do_action('itemAction', {'name': 'delete'})<CR>

  nnoremap <buffer><silent> r
    \ <Cmd>call ddu#ui#filer#do_action('itemAction', {'name': 'rename'})<CR>

  nnoremap <buffer><silent> mv
    \ <Cmd>call ddu#ui#filer#do_action('itemAction', {'name': 'move'})<CR>

  nnoremap <buffer><silent> t
    \ <Cmd>call ddu#ui#filer#do_action('itemAction', {'name': 'newFile'})<CR>

  nnoremap <buffer><silent> mk
    \ <Cmd>call ddu#ui#filer#do_action('itemAction', {'name': 'newDirectory'})<CR>

  nnoremap <buffer><silent> yy
    \ <Cmd>call ddu#ui#filer#do_action('itemAction', {'name': 'yank'})<CR>
endfunction

nmap <silent> ;d <Cmd>call ddu#start({
\   'name': 'filer',
\   'uiParams': {'filer': {'search': expand('%:p')}},
\ })<CR>
ℹ️
ddu#ui#filer#is_directory()ddu#ui#filer#is_tree() になりました。詳細は下記の 該当のコミット をご覧ください。

;d を入力すると ddu-ui-filer を起動します。

ファイルツリーが表示されるので、ディレクトリでエンターキーを押すと展開、ファイルでエンターキーを押すと垂直分割で開きます。

スペースだと水平分割で開きます。

💁‍♂️
作者の Shougo さんよりアドバイスいただきました。上記の設定例は更新済みです。
  • ddu#start したときに現在開いているファイルまでのディレクトリツリーを開いた状態にするには?
    • search にパスを渡す
  • newFile したときに現在開いているディレクトリツリーに作成するには?
    • ディレクトリを開く必要がある

以上です。この記事では筆者が使用している ddu-ui-filer の設定例を紹介しました。