Conform.nvim API完全指南:format、list_formatters等核心函数详解

张开发
2026/4/7 7:01:43 15 分钟阅读

分享文章

Conform.nvim API完全指南:format、list_formatters等核心函数详解
Conform.nvim API完全指南format、list_formatters等核心函数详解【免费下载链接】conform.nvimLightweight yet powerful formatter plugin for Neovim项目地址: https://gitcode.com/gh_mirrors/co/conform.nvimConform.nvim是Neovim生态系统中一款轻量级但功能强大的代码格式化插件它通过智能的差异计算和LSP集成为开发者提供了无缝的代码格式化体验。本文将深入解析conform.nvim的核心API函数帮助你掌握这个强大的格式化工具。 为什么选择Conform.nvim在开始深入API之前让我们先了解conform.nvim的核心优势。与其他格式化插件不同conform.nvim使用vim.diff计算最小化差异然后通过LSP的apply_text_edits()应用更改这种方式能够保护扩展标记和折叠- 不会破坏已有的扩展标记和折叠结构修复行为不当的LSP格式化器- 将LSP的完整缓冲区替换转换为适当的片段更改支持所有格式化器的范围格式化- 即使底层格式化器不支持范围格式化conform也能实现格式化嵌入式代码块- 支持Markdown等文件中的代码块格式化 核心API函数详解setup(opts) - 初始化配置setup()函数是conform.nvim的入口点用于配置插件的基本行为require(conform).setup({ formatters_by_ft { lua { stylua }, python { isort, black }, javascript { prettierd, prettier, stop_after_first true }, }, format_on_save { timeout_ms 500, lsp_format fallback, }, default_format_opts { lsp_format fallback, }, })关键配置选项formatters_by_ft: 按文件类型映射格式化器format_on_save: 保存时自动格式化的配置default_format_opts: 默认的格式化选项log_level: 日志级别设置format(opts, callback) - 核心格式化函数format()函数是conform.nvim最核心的API负责执行实际的格式化操作-- 同步格式化当前缓冲区 conform.format({ lsp_format fallback }) -- 异步格式化当前缓冲区不阻塞UI conform.format({ async true }, function(err, did_edit) -- 格式化完成后调用 end) -- 使用特定格式化器格式化当前缓冲区 conform.format({ formatters { ruff_fix } }) -- 格式化指定范围 conform.format({ range { start { 10, 0 }, [end] { 20, 0 } } })参数详解timeout_ms: 格式化超时时间毫秒bufnr: 要格式化的缓冲区句柄默认为0即当前缓冲区async: 是否异步执行默认为falsedry_run: 是否仅模拟运行而不应用更改lsp_format: LSP格式化策略range: 指定格式化范围list_formatters(bufnr) - 获取可用格式化器这个函数返回指定缓冲区的所有可用格式化器信息local formatters conform.list_formatters() for _, formatter in ipairs(formatters) do print(formatter.name, formatter.available, formatter.command) end返回值说明每个格式化器信息包含name: 格式化器名称command: 执行的命令available: 是否可用available_msg: 可用性消息cwd: 工作目录list_formatters_to_run(bufnr) - 获取实际运行的格式化器这个函数更智能它会考虑stop_after_first、LSP回退逻辑等因素返回实际会运行的格式化器local formatters, will_use_lsp conform.list_formatters_to_run()返回值说明第一个返回值格式化器信息数组第二个返回值布尔值表示是否会使用LSP格式化器list_all_formatters() - 列出所有配置的格式化器这个函数返回所有文件类型配置的格式化器信息按名称排序local all_formatters conform.list_all_formatters()get_formatter_info(formatter, bufnr) - 获取格式化器详细信息获取特定格式化器的详细信息包括其可用性状态local info conform.get_formatter_info(stylua) print(info.available) -- 检查stylua是否可用 LSP格式化策略详解conform.nvim提供了灵活的LSP集成策略通过lsp_format参数控制never: 从不使用LSP格式化默认fallback: 当没有其他格式化器可用时使用LSPprefer: 优先使用LSP格式化仅当可用时first: 先运行LSP格式化然后运行其他格式化器last: 先运行其他格式化器最后运行LSP格式化 高级用法示例自定义格式化器配置你可以在lua/conform/formatters/目录下查看所有内置格式化器的配置也可以自定义require(conform).formatters.shfmt { append_args { -i, 2 }, -- 最终参数将是: { -filename, $FILENAME, -i, 2 } }条件格式化器配置使用函数动态决定使用哪个格式化器require(conform).setup({ formatters_by_ft { python function(bufnr) if require(conform).get_formatter_info(ruff_format, bufnr).available then return { ruff_format } else return { isort, black } end end, }, })魔法字符串支持conform.nvim支持在参数中使用魔法字符串$FILENAME: 文件的绝对路径$DIRNAME: 文件所在目录的绝对路径$RELATIVE_FILEPATH: 文件的相对路径$EXTENSION: 文件扩展名如.py 文件类型配置策略conform.nvim支持灵活的文件类型映射策略formatters_by_ft { -- 基本文件类型映射 lua { stylua }, -- 运行多个格式化器按顺序 python { isort, black }, -- 使用通配符匹配所有文件类型 [*] { codespell }, -- 为没有配置的文件类型设置默认格式化器 [_] { trim_whitespace }, -- 复合文件类型支持 [markdown.vimwiki] { markdownfmt }, }️ 调试与故障排除conform.nvim提供了强大的调试工具查看日志: 使用:ConformInfo查看日志文件位置检查格式化器状态: 使用conform.get_formatter_info()检查特定格式化器的可用性测试格式化器: 直接调用conform.format()进行测试 实际应用场景场景1保存时自动格式化vim.api.nvim_create_autocmd(BufWritePre, { pattern *, callback function(args) require(conform).format({ bufnr args.buf }) end, })场景2创建自定义格式化命令vim.api.nvim_create_user_command(FormatSelection, function() require(conform).format({ range { start vim.fn.getpos(), [end] vim.fn.getpos() } }) end, {})场景3动态格式化器选择local function get_formatters_for_project(bufnr) local filename vim.api.nvim_buf_get_name(bufnr) if filename:match(my_special_project) then return { special_formatter } end return nil -- 使用默认配置 end 性能优化技巧使用异步格式化: 对于大型文件使用async true避免UI阻塞设置合理的超时: 根据格式化器的响应时间调整timeout_ms选择性启用LSP: 只在必要时使用LSP格式化利用缓存: conform.nvim会自动缓存格式化器可用性检查 源码结构分析conform.nvim的源码结构清晰主要模块包括lua/conform/init.lua: 主模块包含所有API函数lua/conform/runner.lua: 格式化器运行器lua/conform/lsp_format.lua: LSP格式化集成lua/conform/formatters/: 400内置格式化器配置 总结conform.nvim通过其简洁而强大的API为Neovim用户提供了业界领先的代码格式化体验。无论是简单的保存时格式化还是复杂的多格式化器流水线conform.nvim都能优雅地处理。通过深入理解其API函数你可以充分发挥这个工具的潜力打造出符合个人或团队需求的完美格式化工作流。记住良好的代码格式化不仅能提高代码质量还能显著提升开发效率。conform.nvim正是这样一个能够帮助你实现这一目标的强大工具✨【免费下载链接】conform.nvimLightweight yet powerful formatter plugin for Neovim项目地址: https://gitcode.com/gh_mirrors/co/conform.nvim创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

更多文章