1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

自分好みのVim環境を作っていく(第1回 Defx編)

Posted at

初めに

記事中にはdein.vimによるプラグイン管理が含まれていますが,
当方dein.vimの使用は初心者のため書き方等ご容赦をください.
また,vim script及び設定にはそこまで詳しくないので悪しからず.

Defxとは

Defxとはdeinの作者であり,暗黒美夢王であるShougoさん(様?)作のファイルブラウザ.
他のファイルブラウザとの違いはそのカスタマイズ性?だと思っている.
デフォルトというか設定しないとファイルの選択とか何もできない.

完成物

初めに完成状態のDefxを
image.png
今のところの拘りはFloating window そしてプレビュー画面.
(実はまだこの環境作ってから本格的に開発してない)

インストール

deinのプラグインはtomlで管理.また,defxの設定はdefx.rc.vimにするとする.

dein.toml
[[plugins]]
repo = 'Shougo/defx.nvim'
depends = ['defx-git', 'defx-icons', 'vim-choosewin']
hook_add = '''
source ~/.config/nvim/plugins/defx.rc.vim
'''

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

[[plugins]]
repo = 'kristijanhusak/defx-git'

[[plugins]]
repo = 't9md/vim-choosewin'
hook_add = '''
let g:choosewin_overlay_enabled = 1
let g:choosewin_overlay_clear_multibyte = 1
'''

defx以外のプラグインは依存するカスタムを行っているからです.
defx以外のプラグインの依存プラグインは省略.

  • defx-icons
    • 名前からわかるかもしれないが,filetypeに応じてアイコンを変えてくれるプラグイン
  • defx-git
    • Defx上でファイルごとにgitの状態を教えてくれるプラグイン
  • vim-choosewin
    • ファイルのOpen時やwindow操作を直感的にしてくれるプラグイン
    • 今回はFloating windowにした場合の問題点克服用に導入 できる人なら入れなくていいと思う

設定

前述したとおり今回のポイントはFloating windowとpreview

floating windowにする

call defx#custom#optionでDefx起動時のwindowの設定が可能.
g:floatin_win_{width, height}\_percentはinit.vimにてfloating windowを使用するときの全体の定数として設定,1以下の小数)
設定を細かく見ていく.
'split': 'floating' windowをfloatingに.
'vertical_preview', 'floating_preview' previewをfloating window上で分割表示して
その他位置サイズ設定.
defxリポジトリ内のhelpファイル?には'_'でなく'-'で記載されていたので苦戦...

defx.rc.vim
" Defx config
nnoremap <silent>ff :<C-u>Defx -listed -columns=mark:indent:git:icons:filename:type<CR>

call defx#custom#option('_', {
      \ 'split': 'floating',
      \ 'vertical_preview': v:true,
      \ 'floating_preview': v:true,
      \ 'preview_width': float2nr(&columns * g:floating_win_width_percent / 2),
      \ 'preview_height': float2nr(&lines * g:floating_win_height_percent),
      \ 'wincol': float2nr((&columns - (&columns * g:floating_win_width_percent)) / 2),
      \ 'winrow': float2nr((&lines - (&lines * g:floating_win_height_percent)) / 2),
      \ 'winwidth': float2nr(&columns * g:floating_win_width_percent / 2),
      \ 'winheight': float2nr(&lines * g:floating_win_height_percent),
      \ })

↑だけでfloating window化は達成!

floating windowにしたことによる問題...

  • floating windowを使用し,ファイルを開こうとするとそのままfloating window上で開こうとしてしまう.
  • floating windowが開いたままになってしまう.

この2つの問題が発生.
1つ目は通常のopenであるとdefxと同じバッファ,つまりfloating window上に開こうとするのだ.
floating window上で開く問題に対し,今回はvim-choosevimプラグインを使用した.
この時,<CR>はディレクトリを開く動作も兼任していることがポイントとなる.
三項演算子を用いて該当ファイルがディレクトリであった場合,通常のopen操作(下位ディレクトリへ移動)を
ファイルであった場合,choosewinを使用してファイルを開く様になっている.
2つ目はファイルをsplitで開く場合,floating windowが残り続けてしまう問題である.
正直原因はわかっていないが何はともあれmulti actionにてquitを追加することで回避した.

preview画面

preview画面の設定はfloating windowとともに完了したはずであった...
いや完了はしているのだが求めていたものと違っていた.
それは公式のバインドだとPを押さないとプレビューが表示されないことである.
理想はファイル選択時に常にプレビューされていることだ.
そこでDefxの公式リマップjkに追記を施す.
追記したのは. defx#do_action('preview')である.
これはj,kを押した際にPを押したのと同じようにPreviewを表示させる機能を追加している.

defx.rc.vim
autocmd FileType defx call s:defx_my_settings()
function! s:defx_my_settings() abort
  " Define mappings
  nnoremap <silent><buffer><expr> <CR>
        \ defx#is_directory() ?
        \ defx#do_action('open') :
        \ defx#do_action('multi', [['open', 'choose'], 'quit']) 
  nnoremap <silent><buffer><expr> E
        \ defx#do_action('multi', [['open', 'vsplit'], 'quit'])
  nnoremap <silent><buffer><expr> j
        \ line('.') == line('$') ? 'gg' : 'j' . defx#do_action('preview')
  nnoremap <silent><buffer><expr> k
        \ line('.') == 1 ? 'G' : 'k' . defx#do_action('preview')
endfunction

image.png
↑choosewinを使用している時の様子, この状態でaを押すと後ろの全画面に表示される.

あとがき

長々と纏まりのない文章を読んでいただきありがとうございます
今後defxそしてvim script自体への理解度が深まったらより良いDefxを目指そうかなと思います

最後にこのdefxのconfigを含めたdotfilesのgitリポジトリを載せておきます.
dotfiles - github

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?