Vim 的 HTML 模式由文件名或内容自动触发,确认方式为 :set ft? 显示 filetype=html;未生效常见原因包括无后缀、缺少 DOCTYPE 或 html 标签、.vimrc 中禁用了 filetype;缩进和补全需 filetype 确认为 html 后才加载对应脚本。

Vim 的 html 模式不是靠手动启用的,它由文件名或内容自动触发 —— 你打开 .html 或 .htm 文件,Vim 就默认进 HTML 模式了。
怎么确认当前是不是 HTML 模式
别猜,直接查::set ft? 回车后如果显示 filetype=html,就对了。如果显示 filetype=plaintext 或空,说明没生效。常见原因有三个:
- 文件没后缀,比如你用
vim index而不是vim index.html - 文件开头没写
<!DOCTYPE html>或<html>,某些旧版 Vim(尤其没开detect)会跳过自动识别 - 你的
.vimrc里写了filetype off或覆盖了filetype plugin on
HTML 自动缩进和标签补全为什么没反应
缩进依赖 indent/html.vim,补全依赖 ftplugin/html.vim,两者都属于 Vim 内置功能,但默认只在 filetype 确认为 html 后加载。如果缩进乱(比如按 Enter 后光标没对齐到下一行标签内),检查:
-
:set indentexpr?应该返回类似GetHtmlIndent();如果不是,运行:filetype indent on - 输入
<di后按Ctrl+N没出<div>?那是补全没开 —— 确保:filetype plugin on已执行,且没被noautochdir类配置干扰 - 别指望
<input type="text">输入完引号自动闭合:Vim 原生 HTML 模式不带“智能双引号配对”,那是delimitMate或auto-pairs插件干的事
为什么 <script> 里 JavaScript 语法高亮失效
Vim 默认 HTML 模式支持嵌入式语法高亮,但需要两个条件同时满足:
立即学习“前端免费学习笔记(深入)”;
-
:set syntax?必须是syntax=on - 你的 Vim 编译时得含
+syntax(绝大多数现代发行版都有)
如果 <script> 里全是白色文字,大概率是 syn sync fromstart 没触发 —— 手动执行 :syntax sync fromstart 试试。更稳妥的做法是在 .vimrc 加一行:autocmd FileType html setlocal syntax=html,避免某些缓冲区缓存了旧语法状态。
自定义 HTML 模板或快捷键老是不生效
很多人把模板写进 ~/.vim/ftplugin/html.vim,结果新建文件时没加载。问题在于:Vim 只对已知 filetype 的文件才加载 ftplugin,而 :e new.html 是空文件,filetype 可能还没判定完成。解决办法只有两个:
- 先保存再编辑:
:w | e!强制重读,触发 filetype 识别 - 用
autocmd BufNewFile *.html 0put ='<!DOCTYPE html><html><head><title></title></head><body></body></html>' | normal! j0这类命令预填内容(注意单引号包裹、0put在首行插入)
别碰 ~/.vim/templates/ —— Vim 原生不读这个路径,那是第三方插件的约定。











