Nuten

Neovim

Neovim 組み込みの vim.lsp か、プラグインの conform.nvim, coc.nvim のいずれかで設定できます。どの方法も PATH 上の nuten を呼び出すので、先に nuten の インストール が必要です。PATH にない nuten を使う場合は、cmd や command にそのパスを書いてください。

Neovim が filetype nu と判定するのは .nu だけです。.nuon も整形したい場合は、次の設定で filetype nu を割り当てます。

vim.filetype.add({ extension = { nuon = "nu" } })

vim.lsp

nuten lsp を言語サーバーとして登録し、保存時に整形します。Neovim 0.11 以降が必要です。

vim.lsp.config("nuten", {
  cmd = { "nuten", "lsp" },
  filetypes = { "nu" },
  on_attach = function(client, bufnr)
    vim.api.nvim_create_autocmd("BufWritePre", {
      group = vim.api.nvim_create_augroup("nuten-format-" .. bufnr, {}),
      buffer = bufnr,
      callback = function()
        vim.lsp.buf.format({ bufnr = bufnr, id = client.id })
      end,
    })
  end,
})
vim.lsp.enable("nuten")

lsp-format.nvim を使っている場合は、保存時の整形を lsp-format.nvim の on_attach に任せられます。

require("lsp-format").setup()
vim.lsp.config("nuten", {
  cmd = { "nuten", "lsp" },
  filetypes = { "nu" },
  on_attach = require("lsp-format").on_attach,
})
vim.lsp.enable("nuten")

Nix

{
  filetype.extension.nuon = "nu";
  lsp.servers.nuten = {
    enable = true;
    config = {
      cmd = [ "nuten" "lsp" ];
      filetypes = [ "nu" ];
    };
  };
  plugins.lsp-format = {
    enable = true;
    lspServersToEnable = [ "nuten" ];
  };
}
{
  vim.filetype.extension.nuon = "nu";
  vim.lsp = {
    enable = true;
    formatOnSave = true;
    servers.nuten = {
      cmd = [ "nuten" "lsp" ];
      filetypes = [ "nu" ];
    };
  };
}

conform.nvim

conform.nvim のフォーマッタとして登録します。言語サーバーは使わず、バッファの内容を標準入力で nuten format に渡して整形します。

require("conform").setup({
  formatters = {
    nuten = {
      command = "nuten",
      args = { "format", "--stdin-filepath", "$FILENAME", "-" },
    },
  },
  formatters_by_ft = { nu = { "nuten" } },
  format_on_save = { timeout_ms = 500 },
})

--stdin-filepath でバッファのパスも渡しているので、Nuten はそのパスを基準に設定ファイルを探します。

Nix

{
  filetype.extension.nuon = "nu";
  plugins.conform-nvim = {
    enable = true;
    settings = {
      formatters.nuten = {
        command = "nuten";
        args = [ "format" "--stdin-filepath" "$FILENAME" "-" ];
      };
      formatters_by_ft.nu = [ "nuten" ];
      format_on_save.timeout_ms = 500;
    };
  };
}
{
  vim.filetype.extension.nuon = "nu";
  vim.formatter.conform-nvim = {
    enable = true;
    setupOpts = {
      formatters.nuten = {
        command = "nuten";
        args = [ "format" "--stdin-filepath" "$FILENAME" "-" ];
      };
      formatters_by_ft.nu = [ "nuten" ];
      format_on_save.timeout_ms = 500;
    };
  };
}

coc.nvim

coc.nvim の coc-settings.json に nuten lsp を言語サーバーとして登録し、保存時に整形します。Neovim 0.8 以降と Node.js が必要です。

{
  "languageserver": {
    "nuten": {
      "command": "nuten",
      "args": ["lsp"],
      "filetypes": ["nu"]
    }
  },
  "[nu]": {
    "coc.preferences.formatOnSave": true
  }
}

Nix

home-manager では、programs.neovim.coc.settings に coc-settings.json の内容を書きます。home-manager には filetype を割り当てるオプションがないので、.nuon の filetype は Lua で割り当ててください。

{
  programs.neovim = {
    enable = true;
    coc = {
      enable = true;
      settings = {
        languageserver.nuten = {
          command = "nuten";
          args = [ "lsp" ];
          filetypes = [ "nu" ];
        };
        "[nu]"."coc.preferences.formatOnSave" = true;
      };
    };
  };
}

Last updated: