neovim配置formatters

最近再搞vue3,使用了element plus admin这个模版库,没想到一直报错
后来经过排查发现是这个模板库使用了prettier这位lint的配置项,简单来说就是如果不符合他的格式就会报错,
而我的neovim是使用的volar这个lsp作为格式化话的后端,想要保存自动安装prettier的格式格式化,需要额外加一些配置

本来是想打算用null-ls,因为更符合哲学的,其实就是将一些formatter作为neovim原生的lspinject进去
不过这个项目目前停更了,而且我也只是想保存的时候格式化就行了,所以就选择了另一个插件formatter.nvim

安装

安装prettier

mason中找到prettier安装就行
不过这个地方比较有意思,mason其实是安装了prettier的,按时我在终端中缺无法使用,后来发现mason安装的工具其实是在~/.local/share/nvim/mason/bin/里面,然后在放到neovim内置的环境变量中是,在neovim的命令模式执行:!env就可以看到

安装formatter.nvim

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"mhartington/formatter.nvim",
name = "formatter",
event = "BufEnter",
enabled = true,
# 这个配置一定要写到config选项中,不然会报错
config = function(LazyPlugin,opts)
local opts = {
logging = true,
log_level = vim.log.levels.WARN,
filetype = {
vue = {
require("formatter.filetypes.vue").prettier(),
_
}
}
}
require("formatter").setup(opts)
end
}

这里需要注意的点是

  1. formatter并没用给默认的格式化配置,所以没中文件都要配置
  2. 配置想要写到lazyvimconfig选项中,不然会提示找不到formatter.filetypes.vue

保存自动格式化

1
vim.api.nvim_create_autocmd({"BufWritePost"},{pattern = {"*"},command = "FormatWrite"})

原理

formatter.nvim相当于一个接口,然后自己配置格式化命令,当执行格式化命令时,会调用你配置的格式化命令,如果不配置就是使用默认的,想上面的vue执行格式化的时候其实就是在执行默认的格式化,约等于下面的伪代码:

1
prettier --stdin-filepath %
Author

finger

Posted on

2023-11-01

Updated on

2025-06-11

Licensed under

Comments