Вернуться назад

Prettier

Prettier – это внешняя CLI-утилита.

# Ставим локально:
npm install --save-dev prettier

# или:
pnpm add -D prettier

Проверим:

npx prettier --version

Установим conform.nvim:

-- ~/.config/nvim/lua/plugins/conform.lua

return {
  "stevearc/conform.nvim",
  opts = {
    formatters_by_ft = {
      javascript = { "prettier" },
      typescript = { "prettier" },
      javascriptreact = { "prettier" },
      typescriptreact = { "prettier" },
      vue = { "prettier" },
      html = { "prettier" },
      css = { "prettier" },
      json = { "prettier" },
      yaml = { "prettier" },
      markdown = { "prettier" },
    }, 
  },
}

Проверяем:

:checkhealth conform

Так как prettier установлен локально, то :checkhealth conform сработает только в папке с проектом.

ГПТ посоветовал ещё и вот такой кусок кода для того, чтобы Neovim увидел локальный prettier. Но у меня и без этого работает.

-- ~/.config/nvim/lua/plugins/conform.lua

return {
  "stevearc/conform.nvim",
  opts = {
    formatters_by_ft = {
      javascript = { "prettier" },
      typescript = { "prettier" },
      javascriptreact = { "prettier" },
      typescriptreact = { "prettier" },
      vue = { "prettier" },
      html = { "prettier" },
      css = { "prettier" },
      json = { "prettier" },
      yaml = { "prettier" },
      markdown = { "prettier" },
    },
    formatters = {
        prettier = {
            command = "npx",
	    args = { "prettier", "--stdin-filepath", "$FILENAME" },
	    stdin = true,
	},
    },
  },
}

Если всё в порядке, выполним:

:ConformInfo

Отформатировать код:

:lua require("conform").format()

Как добавить команду :Format и горячие клавиши для форматирования? Для этого добавим config в conform.lua:

-- ~/.config/nvim/lua/plugins/conform.lua
return {
  "stevearc/conform.nvim",
  opts = {
    formatters_by_ft = {
      javascript = { "prettier" },
      typescript = { "prettier" },
      javascriptreact = { "prettier" },
      typescriptreact = { "prettier" },
      vue = { "prettier" },
      html = { "prettier" },
      css = { "prettier" },
      json = { "prettier" },
      yaml = { "prettier" },
      markdown = { "prettier" },
    },
  },
  config = function(_, opts)
    require("conform").setup(opts)

    -- Добавляем команду :Format
    vim.api.nvim_create_user_command("Format", function()
      require("conform").format()
    end, {})
    
    -- Добавляем <leader>f
    vim.keymap.set({ "n", "v" }, "f", function()
      require("conform").format()
    end, { desc = "Format file or selection" })
  end
}