求助:Vim/Neovim中Markdown文件拼写检查失效,文本文件正常
解决Neovim Markdown文件拼写检查失效问题
问题原因
Neovim针对不同文件类型会加载对应语法配置,部分文件类型(如Markdown、Python)的默认配置中,要么通过局部spell设置限制了检查范围,要么通过spelloptions参数指定仅对特定区域(如注释)启用拼写检查,导致普通文本未被检查。
解决方案
1. 为Markdown文件自动开启拼写检查
在Neovim配置文件(如~/.config/nvim/init.vim或~/.config/nvim/init.lua)中添加自动命令,确保打开Markdown文件时强制启用拼写检查:
Vimscript 配置
autocmd FileType markdown setlocal spell spelllang=en
Lua 配置
vim.api.nvim_create_autocmd("FileType", { pattern = "markdown", callback = function() vim.opt_local.spell = true vim.opt_local.spelllang = "en" end, })
2. 调整spelloptions扩大检查范围
如果默认仅对注释区域检查,可添加plainbuffer选项让拼写检查覆盖整个缓冲区:
Vimscript 配置
autocmd FileType markdown setlocal spell spelllang=en spelloptions+=plainbuffer
Lua 配置
vim.api.nvim_create_autocmd("FileType", { pattern = "markdown", callback = function() vim.opt_local.spell = true vim.opt_local.spelllang = "en" vim.opt_local.spelloptions:append("plainbuffer") end, })
你可以在Markdown文件中执行:set spelloptions?查看当前配置,若返回包含noplainbuffer,则必须添加上述配置。
3. 验证语法组的拼写检查标记
普通Markdown文本应属于markdownText类语法组,这类组默认会被拼写检查。执行以下命令查看光标所在位置的语法组:
:echo synIDattr(synID(line('.'), col('.'), 1), 'name')
若返回非文本类组,可尝试更新Neovim内置Markdown语法插件,或安装第三方插件(如preservim/vim-markdown)修复语法识别问题。
4. Python文件的拼写检查配置(额外说明)
Python文件默认仅对注释和字符串启用拼写检查(避免干扰代码关键字、变量名),若需保持此逻辑,可添加以下配置确保生效:
Vimscript 配置
autocmd FileType python setlocal spell spelllang=en spelloptions+=comments,strings
Lua 配置
vim.api.nvim_create_autocmd("FileType", { pattern = "python", callback = function() vim.opt_local.spell = true vim.opt_local.spelllang = "en" vim.opt_local.spelloptions:append({"comments", "strings"}) end, })
验证步骤
- 打开/创建Markdown文件:
$ nvim test.md - 输入内容:
Hello, the book is **oTn** the **tablw**. - 配置会自动启用拼写检查,无需手动执行
:set spell - 错误单词
oTn和tablw应被正确高亮
内容的提问来源于stack exchange,提问作者Gustavo Basso
相关产品推荐
相关产品推荐

