Conform.nvimの保存時フォーマットをスキップする方法

by
カテゴリ:
タグ:

Conform.nvimは、Neovimのフォーマッタープラグインです。

extmarkやfoldを保持してくれたり、指定範囲のフォーマットができたりと、便利ポイントが多いです。

設定も簡単で、たとえば以下のようにすると、ファイルを保存したら自動的にLSPによるフォーマットが実行されます。

require("conform").setup({
  default_format_opts = {
    lsp_format = "fallback",
    timeout_ms = 500,
  },
  format_on_save = true,
})

でも、保存時にフォーマットをスキップしたいこともありますよね。

などなど。

こんなときは、format_on_saveに関数を指定してやるといいです。

たとえば、vim.v.cmdbangを使うと、:w!で保存したときにフォーマットをスキップできます。これで、:wでエラーが出たときは:w!すればいいですね。

また、関数の第一引数にバッファ番号をとれるので、ファイル名や内容に応じてフォーマットをスキップすることもできます。これでlockファイルのフォーマットもスキップできますね。

require("conform").setup({
  default_format_opts = {
    lsp_format = "fallback",
    timeout_ms = 500,
  },
  format_on_save = function(buf)
    -- `:w!`で保存したときはフォーマットをスキップ
    if vim.v.cmdbang == 1 then
      return nil
    end

    local name = vim.api.nvim_buf_get_name(buf)
    local basename = vim.fs.basename(name)

    -- lockファイルはフォーマットをスキップ
    if basename:match("%.lock$") or basename:match("%plock%p") then
      -- do not format lock files
      return nil
    end

    -- その他のファイルはsetup時の設定でフォーマット
    return {}
  end,
})

ENJOY!!