尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

LazyVim 如何用 :LazyFormatInfo 查看当前缓冲区生效的格式化器并控制自动格式化开关?

LazyVim 如何用 :LazyFormatInfo 查看当前缓冲区生效的格式化器并控制自动格式化开关? LazyVim 如何用 :LazyFormatInfo 查看当前缓冲区生效的格式化器并控制自动格式化开关【免费下载链接】LazyVimNeovim config for the lazy项目地址: https://gitcode.com/GitHub_Trending/la/LazyVim打开 LazyVim 后保存文件时代码会被自动格式化但缓冲区里到底有哪些格式化器在起作用、自动格式化当前是开还是关很多时候并不直观。:LazyFormatInfo就是 LazyVim 提供的检查入口它针对当前缓冲区列出全局/缓冲区两级自动格式化状态、每个已注册的格式化器及其实际解析到的源formatter sources并标出哪个是生效中的active项。配合leaderuf/leaderuF两个开关或vim.g.autoformat/vim.b.autoformat两个变量你可以全局或按缓冲区地控制自动格式化。前提是你的 Neovim 已经在用 LazyVim 配置运行并且当前打开的缓冲区有对应的格式化源否则信息面板会直接提示没有可用格式化器。在目标缓冲区运行 :LazyFormatInfo切换到你要检查的文件后直接执行:LazyFormatInfo该命令在 format.lua 中注册描述为 Show info about the formatters for the current buffer。输出是一个 Snacks 信息浮层标题为LazyFormat (enabled)或LazyFormat (disabled)取决于当前缓冲区自动格式化是否生效。内容分两部分Status 区两行复选框分别是global和buffer两级状态。buffer一行的取值有三种inherit未设置缓冲区局部值跟随全局、enabled、disabled。格式化器区每个解析到至少一个源的格式化器单独列出形如# conform.nvim ***(active)***其下每个解析到的源各占一行带[x]复选框非激活的格式化器不带(active)标记。如果当前缓冲区没有任何格式化源面板会显示***No formatters available for this buffer.***。另外注意一个细节状态行是[x]还是[ ]由M.enabled()判断而浮层本身用LazyVim.info启用时或LazyVim.warn禁用时弹出即自动格式化被禁用时提示会以警告样式呈现。理解 global 与 buffer 两级开关的优先级format.lua 中的M.enabled(buf)定义了判断逻辑若当前缓冲区设置了vim.b[buf].autoformat非 nil以它为准否则看全局vim.g.autoformat未设置nil时默认视为启用。LazyVim 在 options.lua 中默认设置了vim.g.autoformat true。也就是说:LazyFormatInfo里buffer: inherit时实际状态由全局值决定一旦你为某个缓冲区设置过vim.b.autoformat该缓冲区就与全局值解耦。控制自动格式化开关临时切换leaderuf与leaderuFkeymaps.lua 中定义了两个 Snacks toggleLazyVim 的 leader 是空格leaderuf Auto Format (Global) —— 切换 vim.g.autoformat leaderuF Auto Format (Buffer) —— 切换 vim.b.autoformat两者都通过M.enable(enable, buf)实现见 format.lua缓冲区切换时只写vim.b.autoformat全局切换时写vim.g.autoformat并把所有vim.b.autoformat重置为 nil让缓冲区回到继承状态每次切换后会自动再调一次M.info()即切完开关会立刻弹出更新后的:LazyFormatInfo面板无需手动再查。持久化配置在配置中固定开关NEWS.md 中给出的写法是按作用域设置变量vim.g.autoformat false -- globally vim.b.autoformat false -- buffer-local把它写进你自己的配置例如config/options.lua后重启或重新 source 即生效。需要恢复时把对应值改回true或删除即可。自动格式化何时真正执行M.setup()注册了一条BufWritePreautocmdaugroup 名LazyFormat保存文件前对当前缓冲区执行M.format({ buf event.buf })。M.format的逻辑是未加force且M.enabled(buf)为 false 时直接返回不做任何格式化——这就是开关生效的位置否则依次执行所有active的格式化器单个格式化器报错会捕获并提示Formatter name failed没有任何 active 格式化器、且是以force方式触发时提示No formatter available标题LazyVim。手动格式化用:LazyFormat命令它以force true调用M.format即不受 autoformat 开关影响始终格式化当前选区或整个缓冲区。验证自动格式化是否生效的完整链路:LazyFormatInfo确认buffer行为enabled或inherit且global为enabled修改文件后写入:w观察BufWritePre触发的格式化结果切到leaderuf/leaderuF后再次:LazyFormatInfo确认状态行变化与预期一致若想确认开关确实拦住了自动格式化可在禁用状态下保存文件文件应保持未格式化状态。面板里会列出哪些格式化器# name段落的来源是M.resolve(buf)遍历已注册的LazyFormatter。LazyVim 内置注册了conform.nvimformatting.luapriority 100、primary true源列表取自require(conform).list_formatters(buf)。它是 LazyVim 默认格式化器且内置了formatters_by_ftformatters_by_ft { lua { stylua }, fish { fish_indent }, sh { shfmt }, }所以在 lua、fish、sh 缓冲区里:LazyFormatInfo的 conform.nvim 段下应能看到对应源名。LSP formatterlsp/init.lua 中LazyVim.format.register(LazyVim.lsp.formatter())同样是primary源取决于当前可用的 LSP 服务器。关于激活规则NEWS.md格式化器分primary同一时间只有一个可激活如 conform、none-ls、LSP与secondary多个可同时激活如 eslintLazyVim 根据当前可用源和优先级自动选择 primary。因此 conform.nvim 显示(active)时其他 primary 格式化器即使有源也不会执行只会在面板中列出。验证与常见限制看不到期望的格式化器先确认对应工具已安装conform 依赖 mason.nvim由它管理安装仍无源则面板会明确显示No formatters available for this buffer.此时保存也不会触发格式化:LazyFormat会给出No formatter available警告。不要给 conform.nvim 设置format_on_save/format_after_saveLazyVim 的M.setup会主动清空这两个选项并提示 Dont setopts.keyforconform.nvim. LazyVim will use the conform formatter automatically即保存时格式化统一由BufWritePreautocmd 驱动。同样opts.format已废弃应改用opts.default_format_opts。不要替换 conform.nvim 的plugin.configLazyVim 会直接报错提示这会破坏 LazyVim 的格式化流程。none-ls 用户none-ls.nvim不再默认安装若想继续用它需启用lazyvim.plugins.extras.lsp.none-lsextra否则 health.lua 相关的健康检查M.health()会警告conform.nvim与nvim-lint已是默认none-ls 需该 extra 才能正确参与格式化。切换全局开关的副作用如前所述全局切换会把vim.b.autoformat全部清空若你依赖缓冲区级别的独立开关切换全局值后需重新设置。【免费下载链接】LazyVimNeovim config for the lazy项目地址: https://gitcode.com/GitHub_Trending/la/LazyVim创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表