Neovimでバッファみたいにファイル操作できるoil.nvimの使い方
Neovimのファイルエクスプローラーのプラグインoil.nvimを紹介します。
oil.nvimとは
oil.nvimはちょっと変わったファイルエクスプローラーです。ファイル一覧のバッファを編集することで「作成・削除・リネーム・移動」ができます。
ファイル名を変えたりディレクトリを移動すると、LSP経由でimportのパスも置換してくれます。
インストール
READMEを参考に、各自のパッケージマネージャーでインストールします。
stevearc/oil.nvim{ 'stevearc/oil.nvim', ---@module 'oil' ---@type oil.SetupOpts opts = {}, -- Optional dependencies dependencies = { { "echasnovski/mini.icons", opts = {} } }, -- dependencies = { "nvim-tree/nvim-web-devicons" }, -- use if prefer nvim-web-devicons}アイコンを表示させたい人はmini.iconsかnvim-web-deviconsのどちらかを入れておきましょう。
※この記事ではnvim-web-deviconsの方を入れています。
最低限の設定
setupを呼び出すだけで最低限の設定は終了です。カスタマイズは後で説明します。
require("oil").setup()使い方
oil.nvimのファイルエクスプローラーを開く方法はいくつかあります。
:Oil:Oil <path>で指定したディレクトリを開ける:Oil --floatだとfloating windowで開ける
:e <path>- この挙動は設定でオフにできる
- APIの呼び出し
require("oil").open(dir)require("oil").open_float(dir)
ファイル操作
ファイルエクスプローラーを開いたら、あとはバッファを編集して保存するだけです。
次の動画はリネームの例です。history.jsというファイルをhoge.jsに変更しています。
バッファを保存すると、適用するファイル操作の確認画面が出ます。
同様にファイルの作成・削除・移動ができます。
キーマップ
ファイルの行でEnterを押すと、そのファイルを開きます。
ディレクトリの行でEnterを押すと、ファイルの一覧がそのディレクトリに切り替わります。
-を押すと親ディレクトリに切り替わります。
ここらへんの操作感はnetrwに近いです。
Ctrl+cで閉じます。
次の手順でファイルを別階層のディレクトリに移動できます。
- 行を切り取る(
ddなど) - ディレクトリを切り替える(Enterや-)
- 貼り付け(
pなど)
Ctrl+pでプレビューもできます。
キーマップはデフォルトでいくつか定義されており、変更も可能です。詳しくは:h oil-actionsで確認してください。
LSP
LSPのファイルリネームにも対応しています。
たとえばTypeScriptでsrc/foo.tsをsrc/bar.tsにリネームすると、importのパスも変更されます。
import { baz } from "./foo"import { baz } from "./bar"次の動画が実際の例です。
リネーム後にLSPで編集されたファイルは、バッファとして開きます。
※LSPを立ち上げずにリネームすると、この機能は動きません。
カスタマイズ
ここからは筆者のカスタマイズを紹介します。
フルパスで開かれるのを防ぐ
ファイルの行でEnterを入力すると、そのファイルがフルパスで開かれるようです。
これを相対パスに変更するには次のように書きます(参考)。
vim.api.nvim_create_augroup("OilRelPathFix", {})vim.api.nvim_create_autocmd("BufLeave", { group = "OilRelPathFix", pattern = "oil:///*", callback = function() vim.cmd("cd .") end,})2種類のキーマップを設定
まずは:Oilをそのまま実行するキーマップを設定しました。
vim.keymap.set("n", "<Space>go", function() require("oil").open()end, { desc = "Oil current buffer's directory" })上記は、「今開いているバッファのディレクトリ」が開きます。
これに対して、カレントディレクトリを開くキーマップも設定しました。
vim.keymap.set("n", "<Space>gO", function() require("oil").open(".")end, { desc = "Oil ." })以上、oil.nvimの紹介でした。import文の書き換えをやってくれるので重宝しています。
ファイルツリーではない点に注意です。
初めてmmvを知った時に近い感動を覚えました。