先日 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-file
, ddu-kind-file
, ddu-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#get_item()->get('isTree', v:false) ?
\ "<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#get_item()->get('isTree', v:false) ?
\ "<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',
\ 'searchPath': expand('%:p'),
\ })<CR>
ℹ️
上記設定に最新情報を反映しました(2023年3月20日)
;d
を入力すると ddu-ui-filer を起動します。
ファイルツリーが表示されるので、ディレクトリでエンターキーを押すと展開、ファイルでエンターキーを押すと垂直分割で開きます。
スペースだと水平分割で開きます。
💁♂️
作者の Shougo さんよりアドバイスいただきました。上記の設定例は更新済みです。
-
ddu#start
したときに現在開いているファイルまでのディレクトリツリーを開いた状態にするには?-
search
にパスを渡す
-
-
newFile
したときに現在開いているディレクトリツリーに作成するには?- ディレクトリを開く必要がある
以上です。この記事では筆者が使用している ddu-ui-filer の設定例を紹介しました。
コメントを送る
コメントはブログオーナーのみ閲覧できます