Oil.nvimからvim-fernを開くのがちょっと便利だった

はじめに

今日は​完全に​「小ネタ枠」です。
普段は​ Oil.nvim を​メインファイラーと​して​使っているのですが、​最近​ちょっとした​発見が​あったので​書き残して​おきます。

Oil.nvim は​「バッファと​して​ディレクトリを​開く」と​いう​設計が​すばらしく、​リネームや​削除を​含めた​多くの​操作が​通常の​バッファ編集の​延長のように​扱えます。
もは​や標準機能では?と​錯覚する​ほど​Vim的な​自然さが​あって、​とても​気に入っています。

とは​いえ、​プロジェクトを​cloneした​直後だったり、​巨大な​リポジトリを​ざっくり把握したい​ときには、​ツリー型ファイラーが​恋しくなります。
​そのような​ときに​登場する​サブファイラーが​vim-fernです。

そして、​最近ふと​思いました。
​「Oil.nvimで​見ている​ディレクトリの​位置から、​vim-fernを​開けたら​便利なんじゃないか?」

実際に​やってみた​ところ、​快適度が​少し​あがったので​共有です。

設定例

Oil.nvim の​バッファ上で​ <Leader>o を​押すと、​その​位置の​パスを​基準に​ vim-fern を​開く​設定です。

123456789101112131415161718192021
vim.api.nvim_create_autocmd('FileType', {
  pattern = 'oil',
  callback = function(args)
    vim.keyma.set('n',
      '<Leader>o',
      function()
        local entry = oil.get_cursor_entry()
        local current_dir = oil.get_current_dir(args.buf) or vim.fn.getcwd()

        if entry then
          -- -reveal で​カーソル位置の​エントリに​フォーカス
          local reveal_path = current_dir .. entry.name
          vim.cmd(string.format('Fern %s -reveal=%s',
            vim.fn.fnameescape(current_dir),
            vim.fn.fnameescape(reveal_path)))
        else
          vim.cmd(string.format('Fern %s', vim.fn.fnameescape(current_dir)))
        end
      end, { buffer = args.buf })
  end,
})

おわりに

Oil.nvim -> vim-fern は​うまく​いったけど、​vim-fern -> Oil.nvimが​うまく​いきせんでした。
悔しい。