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
よりもサクサク動くように感じました。