vim使いの私に常時表示のファイラーは必要なかった

# vim使いの私に常時表示のファイラーは必要なかった

[Vim 2 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/vim2) の投稿です。
これもneovimで書いている程度にはvimにどっぷりな @jazzsasori です。
ファイラーを [vimfiler.vim](https://github.com/Shougo/vimfiler.vim) から [defx.nvim](https://github.com/Shougo/defx.nvim) に移行した話です。
(どちらも [Shougo](https://github.com/Shougo) さんが開発されたプラグインです。平素よりお世話になっております :bow: )

vimfilerに特に不満も無かったんですが、常時表示やめてみようと思い立ったついでにdefxに乗り換えてみました。
defx を選んだのはdein, denite, deoplete にお世話になっている流れからです。
いつでも戻れるように設定はしたのですが、結局今ではdefxのみ使っています。


## vimfiler

元々 vimfiler を常時表示のファイラーとして使っていました。

```vim
"--------------------------------------------------------------------------
" vimfiler
call vimfiler#custom#profile('default', 'context', {
    \ 'safe'       : 0,
    \ 'auto_expand': 1,
    \ 'parent'     : 0,
    \ })
"default explore -> vimfiler
let g:vimfiler_as_default_explorer = 1
autocmd VimEnter * VimFilerExplorer
" Textmate icons
let g:vimfiler_tree_leaf_icon   = ' '
let g:vimfiler_tree_opened_icon = '▾'
let g:vimfiler_tree_closed_icon = '▸'
let g:vimfiler_file_icon        = '-'
let g:vimfiler_marked_file_icon = '*'
let g:vimfiler_ignore_pattern   = '\(^\.\|\~$\|__pycache__$\|\.pyc$\|\.[oad]$\|\.egg-info$\|^dist$\|^GTAGS$\|^GRTAGS$\|^GPATH$\|^tmp$\|^build$\)'
```

比較的シンプルにアイコンだけ設定しているのと、vimの起動時にvimfilerも起動する設定だけしていました。
↑ の設定をしていると起動時に左にvimfilerが表示され、右のエディターのペインにフォーカスが当たります。


## defx の設定

先にスクショ貼るとこんな感じで表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4760/45bbfc03-61b8-87e7-ddfb-d5fa02f4a080.png)

そして先に具体的な設定をペタリ (dein.tomlで設定してます)

```toml
#-------------------------------------------------------------------------
# defx
[[plugins]]
repo = 'Shougo/defx.nvim'
hook_add = '''
" vim起動時にdefxを起動
autocmd VimEnter * execute 'Defx'
nnoremap <silent> <C-f> :<C-u> Defx <CR>
autocmd FileType defx call s:defx_my_settings()

call defx#custom#option('_', {
      \ 'show_ignored_files': 0,
      \ 'buffer_name': 'exlorer',
      \ 'resume': 1,
      \ })

let g:defx_icons_enable_syntax_highlight = 1
let g:defx_icons_column_length = 2

function! s:defx_my_settings() abort
    " ファイルを開く
    nnoremap <silent><buffer><expr> <CR>
    \ defx#do_action('open')

    "  隠しファイルを表示/非表示する
    nnoremap <silent><buffer><expr> .
    \ defx#do_action('toggle_ignored_files')

    "  親ディレクトリに移動する
    nnoremap <silent><buffer><expr> <BS>
    \ defx#do_action('cd', ['..'])

    " フォルダopenをトグル
    nnoremap <silent><buffer><expr> l
    \ defx#do_action('open_tree', 'toggle')

    " 【ESC】 / 【q】 defx.nvimを終了する
    nnoremap <silent><buffer><expr> <Esc> 
    \ defx#do_action('quit')
    nnoremap <silent><buffer><expr> q
    \ defx#do_action('quit')

    " 【j】 カーソルを下に移動する
    nnoremap <silent><buffer><expr> j
    \ line('.') == line('$') ? 'gg' : 'j'

    " カーソルを上に移動する
    nnoremap <silent><buffer><expr> k
    \ line('.') == 1 ? 'G' : 'k'

    " 新しいファイルを作成する
    nnoremap <silent><buffer><expr> N
    \ defx#do_action('new_file')

    " ファイルを削除する
    nnoremap <silent><buffer><expr> d
    \ defx#do_action('remove')

    " ファイル/ディレクトリのパスをコピーする
    nnoremap <silent><buffer><expr> yy
    \ defx#do_action('yank_path')

    " ファイルを実行する
    nnoremap <silent><buffer><expr> x
    \ defx#do_action('execute_system')

    " ファイル名を変更する
    nnoremap <silent><buffer><expr> r
    \ defx#do_action('rename')

    " ファイルをコピーする
    nnoremap <silent><buffer><expr> c
    \ defx#do_action('copy')

    " ファイルを貼り付ける
    nnoremap <silent><buffer><expr> p
    \ defx#do_action('paste')

    " 新しいディレクトリを作成する
    nnoremap <silent><buffer><expr> K
    \ defx#do_action('new_directory')

    " ファイルを移動する
    nnoremap <silent><buffer><expr> m
    \ defx#do_action('move')

    " ウィンドウを水平分割してファイルを開く
    nnoremap <silent><buffer><expr> s
    \ defx#do_action('open', 'split')

    " ウィンドウを垂直分割してファイルを開く
    nnoremap <silent><buffer><expr> v
    \ defx#do_action('open', 'vsplit')

    " ツリーを表示/非表示する
    nnoremap <silent><buffer><expr> t
    \ defx#do_action('open_or_close_tree')

    " ホームディレクトリに移動する
    nnoremap <silent><buffer><expr> ~
    \ defx#do_action('cd')

    " Neovim上のカレントディレクトリを変更する
    " nnoremap <silent><buffer><expr> cd
    " \ defx#do_action('change_vim_cwd')

endfunction
'''
```

### 設定についてもろもろ

他のdefx関連記事でもよく言われてますが、入れた時点ではマッピングされてないので自分で設定していく必要があります。
plugin入れた時点で面食らいますが、「こうならないかな？」と思ったことはだいたい解決できるので、カスタマイズ性の高さが必要な方にはdefx合ってると思います。

自分の設定は (↑ の通りではあるんですが)
- だいたいキーマップをvimfilerに合わせてストレスなく移行できるように
- vim起動時に必ず起動
- resume: 1 にしてdefxを再び起動した時に前の表示状態を保つようにする
- 常時表示してないので Ctrl + f でファイラー起動

という感じのカスタマイズです。
deinが入っていれば↑ のコピペでも (おそらく) 動くと思うので試してみて下さい。


## 乗り換えてみて

- 常時表示をやめた分画面が広く使える
- defx はvimfilerと比較すると設定が ~~めんどくさい~~ 柔軟な分より自分好みにカスタマイズできる
- キーマップをvimfiler なり他のファイラーに合わせればストレスなく移行できる
- 動作が軽い (気がする)

という感想を持ちました。
自分としてはとてもオススメです！


## ところで defx って何て読むんだろう

デフュックス？
デフエックス？


## ファイラーどうしようか迷っているあなたに

調べてる過程でとても良い記事見つけました。
[2020秋 Vim のファイラー系プラグイン比較](https://zenn.dev/lambdalisue/articles/3deb92360546d526381f)
各ファイラーの比較してくれてるのでオススメです。