NO IMAGE

【vim】defx.nvimを設定!defx-git!defx-icon!

vimのファイラー「defx.nvim」を設定してみました。

以前からプラグインは入れていましたが、同僚が昨日「defx入れました♪」と言っていたので設定してみました。

いつもは「vimfiler.vim」を使っていましたが、設定したら今までと遜色なく便利だったのでこのままdefxに移行します。

必要な環境

Neovim 0.3.0以降
または
Python3.6.1以降のVim8.1以降

設定

ではShougoさんのリポジトリに

https://github.com/Shougo/defx.nvim

init.vim

if &compatible
  set nocompatible               " Be iMproved
endif

set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim

if dein#load_state('~/.cache/dein')
  call dein#begin('~/.cache/dein')

  call dein#load_toml('~/.config/nvim/dein.toml', {'lazy': 0})
  call dein#load_toml('~/.config/nvim/dein_lazy.toml', {'lazy': 1})

  call dein#add('posva/vim-vue')

  call dein#end()
  call dein#save_state()
endif

if dein#check_install()
  call dein#install()
endif

...略...

dein.toml

[[plugins]]
repo ="kristijanhusak/defx-git"
hook_add = '''
call defx#custom#column('git', 'indicators', {
  \ 'Modified'  : '✹',
  \ 'Staged'    : '✚',
  \ 'Untracked' : '✭',
  \ 'Renamed'   : '➜',
  \ 'Unmerged'  : '═',
  \ 'Ignored'   : '☒',
  \ 'Deleted'   : '✖',
  \ 'Unknown'   : '?'
  \ })
'''

[[plugins]]
repo ="kristijanhusak/defx-icons"

[[plugins]]
repo = 'Shougo/defx.nvim'
depends = ['defx-git', 'defx-icons']
hook_add = '''
call defx#custom#column('icon', {
      \ 'directory_icon': '▸',
      \ 'opened_icon': '▾',
      \ 'root_icon': ' ',
      \ })

call defx#custom#column('filename', {
      \ 'min_width': 40,
      \ 'max_width': 40,
      \ })

call defx#custom#column('mark', {
      \ 'readonly_icon': '✗',
      \ 'selected_icon': '✓',
      \ })

call defx#custom#option('_', {
      \ 'columns': 'indent:git:icons:filename',
      \ 'show_ignored_files': 1,
      \ })

nnoremap <silent>fi :<C-u>Defx -new `expand('%:p:h')` -search=`expand('%:p')`<CR>
autocmd FileType defx call s:defx_my_settings()
  function! s:defx_my_settings() abort
    " Define mappings
    nnoremap <silent><buffer><expr> <CR> defx#do_action('open')
    nnoremap <silent><buffer><expr> c defx#do_action('copy')
    nnoremap <silent><buffer><expr> m defx#do_action('move')
    nnoremap <silent><buffer><expr> p defx#do_action('paste')
    nnoremap <silent><buffer><expr> l defx#do_action('open')
    nnoremap <silent><buffer><expr> E defx#do_action('open', 'vsplit')
    nnoremap <silent><buffer><expr> P defx#do_action('open', 'pedit')
    nnoremap <silent><buffer><expr> o defx#do_action('open_or_close_tree')
    nnoremap <silent><buffer><expr> K defx#do_action('new_directory')
    nnoremap <silent><buffer><expr> N defx#do_action('new_file')
    nnoremap <silent><buffer><expr> M defx#do_action('new_multiple_files')
    nnoremap <silent><buffer><expr> C defx#do_action('toggle_columns', 'mark:indent:icon:filename:type:size:time')
    nnoremap <silent><buffer><expr> S defx#do_action('toggle_sort', 'time')
    nnoremap <silent><buffer><expr> d defx#do_action('remove')
    nnoremap <silent><buffer><expr> r defx#do_action('rename')
    nnoremap <silent><buffer><expr> ! defx#do_action('execute_command')
    nnoremap <silent><buffer><expr> x defx#do_action('execute_system')
    nnoremap <silent><buffer><expr> yy defx#do_action('yank_path')
    nnoremap <silent><buffer><expr> . defx#do_action('toggle_ignored_files')
    nnoremap <silent><buffer><expr> ; defx#do_action('repeat')
    nnoremap <silent><buffer><expr> h defx#do_action('cd', ['..'])
    nnoremap <silent><buffer><expr> ~ defx#do_action('cd')
    nnoremap <silent><buffer><expr> q defx#do_action('quit')
    nnoremap <silent><buffer><expr> <Space> defx#do_action('toggle_select') . 'j'
    nnoremap <silent><buffer><expr> * defx#do_action('toggle_select_all')
    nnoremap <silent><buffer><expr> j line('.') == line('$') ? 'gg' : 'j'
    nnoremap <silent><buffer><expr> k line('.') == 1 ? 'G' : 'k'
    nnoremap <silent><buffer><expr> <C-l> defx#do_action('redraw')
    nnoremap <silent><buffer><expr> <C-g> defx#do_action('print')
    nnoremap <silent><buffer><expr> cd defx#do_action('change_vim_cwd')
  endfunction
'''

mappingsは下記をコピペしました。

https://github.com/Shougo/defx.nvim/blob/master/doc/defx.txt

defxいれてみての感想

vimfilerと遜色なく使えてすんなり移行できそうです。
vimfiler自体を私は熟知していた訳ではないので正確な比較ではないですが、「EXAMPLES」のマッピングだけの機能で「おおおっ」てなりました。vimfilerでできたのかは私は知らない。

前に触った時はツリーを同時に2ペインで開いた時に独立して動いたような記憶があったのですが私が良く理解してないだけでしょう。
また良く読んでみます。

追記:ありました「-new」ですね。使いやすっ。

追記:開くたびに一番上にカーソル戻るので「-resume」のがいいですね。
多分両方付けれないので基本は「-resume」つけた方が以前の場所から再開できて使いやすいです。
毎回「-new」欲しい場面な訳ではないので。

ただ、いつもファイラー経由ならいいですが、直打ちで「:e$MYVIMRC」とかで開いたとして再度立ち上げるとvimrcの階層からではないですね。
それをしたいなら「-listed」みたいです。

3つとも同時に発動したい。
新しく、再開、バッファでって日本語おかしくなりますね。

最終的にQAにあったものに「-new」を付けたコマンドをオススメします。

nnoremap <silent>fi :<C-u>Defx -new `expand('%:p:h')` -search=`expand('%:p')`<CR>

良くある左にツリー表示したい場合もQAに書いてくれてます。

ファイラーについて

話がdefxからそれるのですが、せっかくなのでファイラーについて、

vimで常時左に当たり前のようにツリー表示させている方に、
経験談踏まえてなのですが、もし今までに試したことがなければ、
非表示にしてペイン毎(スプリット毎?)に開く使い方してみてください。

めちゃ楽で早いので。(好みによる)

・画面が広く使える
・目線が左右にいかなくて楽
・ツリー左にあると縦分割したときに跨ぐのが手間
・どの画面で開くか選択するのが手間
・毎回そのファイルの階層を起点にして開くので移動しやすい
・常に表示させてても常に見ないし見れない
・開けばみれる
・分割がhtml,css,jsと分けて編集する際にそれぞれその階層で開くので、階層をいったりきたりしなくてすむケースも多々ある

ツリー表示されてるエディタが多いですが、他は他、vimはvim、カスタマイズできるけれども真似しなくていいところもあるかも。

実際表示させてない人も多いと思いますので、試してない方は是非。
あくまでも人それぞれなので何が正解でもないです。
それで使いやすくなれば儲けもんです。

icon

icon表示ができる

https://github.com/kristijanhusak/defx-icons

Git

NERDTreeでできたgit表示ができる

https://github.com/kristijanhusak/defx-git

関連記事

tmux(ティーマックス)はご存知ですか?terminal(ターミナル)で開発をする場合にこのtmuxを導入すると、かなり作業効率がアップします。例えば、・いくつもターミナルを立ち上げてログを流したていたり・1つの作業中に別の案件が入って[…]