Neovim 里 Go 注释 gq 失效?两行配置让格式化恢复
2026/8/29 16:06:19 网站建设 项目流程

Neovim 里 Go 注释 gq 失效?两行配置让格式化恢复

【免费下载链接】neovimVim-fork focused on extensibility and usability项目地址: https://gitcode.com/GitHub_Trending/ne/neovim

在 Neovim 里编辑 Go 文件,选中一段注释按 gq 想重排文字,光标一闪,注释原样不动。Vim 里明明好用的习惯,到了 Neovim 上 Go 注释就成了死区。

① 直接清空 formatprg

最省事的办法:把 Go 文件类型插件里的 formatprg(外部格式化程序选项,gq 执行时调用它)清空,gq 就回到编辑器内置的文本格式化逻辑。在 init.lua 或 init.vim 里加一行:

vim.cmd('autocmd FileType go setlocal formatprg=')

执行后你再选中注释按 gq,文字会按 textwidth 自动换行、重排,命令不再是空转。

② 为什么会这样

Go 文件插件历史上把 formatprg 指向 gofmt,但 gofmt 只管代码结构、不碰注释里的文字。因为 gq 优先交给这个外部程序处理,所以注释段传过去被原样吐回,按了等于没按。再加上 Go 插件默认setlocal formatoptions-=t,把 t(自动按行宽换行)从格式化行为里摘掉了,所以 gq 干脆无米下锅。其实就一句话:程序没换,是活儿被派给了不会干的人。

③ 换用 gw 加 after 覆盖

如果你不想动全局配置,分三步走:

  1. 在 Go 注释里改用 gw(把选区当段落重新排版的命令,和 gq 的区别是它强制按 textwidth 换行):
gw

选中文本后按 gw,注释立即按 79 列宽重排。 2. 在配置目录建 after/ftplugin/go.vim 文件,这是专门覆盖文件类型插件的钩子目录。 3. 文件里写一行清空指令:

set formatprg=

保存后 gq 恢复默认行为,已有缓冲区需:edit重载一次。

④ 容易踩的坑

  • ⚠️ 全局清空 formatprg 会连累其他文件类型,上面 autocmd 写法只作用于 Go,别图省事直接set global formatprg=
  • ⚠️ after/ftplugin 只在打开新文件时生效,改完不重载缓冲区,你会误以为没配成功。
  • ⚠️ 清空 formatprg 不等于获得保存时自动格式化,那是 null-ls 或 LSP 的活,两件事别混。

⑤ 延伸一下

想搞清楚 t 这类开关各自管什么,直接查:help formatoptions:help gw里也写明了 gw 和 gq 的行为差异。想要保存即 gofmt 的体验,看 LSP 配置文档 配合vim.lsp.config的 on_save 钩子,比 formatprg 更靠谱。

先跑一遍 ① 里的 autocmd,今天 gq 就能干活了。

【免费下载链接】neovimVim-fork focused on extensibility and usability项目地址: https://gitcode.com/GitHub_Trending/ne/neovim

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询