__aki_nikki__

分子分光学の研究をしている大学院生の日記です

NovimにファイラーFernを導入した

NeovimにファイラーFernを導入した

筆者はnvimでファイラーとして古くから使われているNERDTreeを使っていました。 しかし、XやZennなどでFernがおすすめされていて気になったため使ってみることにしました。

実装はVimScriptですのでVim,Neovim両方で使うことが可能です!

インストール

筆者はパッケージマネージャーとしてLazy.nvimを使用しているので、まず~/.config/nvim/lua/plugins.luaに以下を書き込みます。

-- filer
filer = {
    "lambdalisue/fern.vim",
}

return {
    --- 他のプラグイン 
    filer
}

ここまで設定すればとりあえず使えるようになります。とりあえず今いるディレクトリの内容を表示するにはコマンド

:Fern .

を実行し、左側に表示するにはオプション-drawerを付けて

:Fern . -drawer

と実行します。

いい感じに表示するには

:Fern . -reveal=% -drawer -toggle -width=25

とオプションをたくさん付けて実行する。

ここで、-reveal=%は現在focusしているバッファの内容と共に現在のディレクトリを開くという意味で、 -toggleはもう一回同じコマンドを実行することでフィアラーを閉じることを意味で -width=<width>は左側に表示されるwindowの幅を<width>に設定するという意味です。

設定

.gitignoreのような'.'から始まる隠しファイルが見えないのは困るので、まず

-- show hidden file
vim.cmd[[let g:fern#default_hidden=1]]

を設定して隠しファイルがファイラーから見えるようにします。

長いコマンド:Fern . -reveal=% -drawer -toggle -width=25<CR>を毎回入力するのは流石に面倒なので何かショートカットのコマンドを定義することを考えます。

最初はvim.cmd[["<vim command>"]]でコマンドを定義していましたが、せっかくLuaで設定ファイルを書いているのでLuaでコマンドを定義することにしました。

筆者はNERDTreeを使用していた時に:Ntで現在いるディレクトリについて左側にファイラーが開くように設定していたので、それをついで以下のようにコマンドを実装しました。

-- toggle Fern by :Nt 
vim.api.nvim_create_user_command(
'Nt',
function ()
    vim.cmd(":Fern . -reveal=% -drawer -toggle -width=25<CR>")
end,
{nargs = 0}
)

また現在のディレクトリではなく特定のディレクトリを指定して開くコマンドも欲しいため別にNttコマンドして実装しました。 このコマンドでは:Ntt <dir>で\<dir>の内容を左側に開くことができます。

-- open directory <dir> by :Ntt <dir> 
vim.api.nvim_create_user_command(
'Ntt',
function (opts)
    local  dir = opts.args
    vim.cmd(":Fern " .. dir .. " -reveal=% -drawer -toggle -width=25<CR>")
end,
{nargs = 1}
)

ここで、コマンドを実装に使っているNeovimのAPIの関数vim.api.nvim_create_user_command()ですが、第一引数はコマンド名を意味する文字列で必ず大文字から始める必要があります、第二引数はコマンド実行時に実行される関数で、処理はこの関数内に実装します。第三引数は第二引数の関数に渡される引数の数を渡します。

使ってみての感想

半年ほどNERDTreeを、それより前は標準のファイラーを使っていたいためディレクトリ階層の移動やファイルを開くなどのキーバインドが違って最初は慣れませんでしたが、すぐに慣れました。 使用した感覚ではNERDTreeよりもサクサク動くように感じました。