Vim中Twig文件HTML缩进异常,求可行解决方案
解决Twig文件中HTML内容的缩进问题
以下是几个针对性的解决方案,你可以逐一尝试:
自定义Vim缩进规则
在你的.vimrc或者~/.vim/ftplugin/twig.vim文件中添加自定义缩进函数,同时处理Twig块和HTML标签的缩进逻辑:autocmd FileType twig setlocal indentexpr=TwigIndent(v:lnum) function! TwigIndent(lnum) let line = getline(a:lnum) let prev_line = getline(a:lnum - 1) let indent = indent(a:lnum - 1) " 处理HTML开启标签的缩进 if prev_line =~# '<\w\+[^>]*>$' && prev_line !~# '<\/\w\+>' && prev_line !~# '<\w\+[^>]*\/>' let indent += &shiftwidth " 处理HTML闭合标签的缩进 elseif line =~# '^\s*<\/\w\+>' let indent -= &shiftwidth endif " 处理Twig block的缩进 if prev_line =~# '{%\s*block\s.*%}' let indent += &shiftwidth elseif line =~# '{%\s*endblock\s*%}' let indent -= &shiftwidth endif return indent endfunction保存后重启Vim,或者执行
:source %加载配置,之后自动缩进和手动缩进(==命令)都会生效。使用Neoformat + twig-beautify
- 全局安装twig-beautify:
npm install -g twig-beautify - 在Vim中安装Neoformat插件(比如通过Vundle/Plug)
- 在
.vimrc中添加配置:autocmd FileType twig setlocal formatprg=twig-beautify let g:neoformat_enabled_twig = ['twigbeautify']
之后执行
:Neoformat命令就能一键格式化Twig文件,它能识别Twig语法并正确缩进内部的HTML标签。- 全局安装twig-beautify:
修正Prettier插件配置
如果你坚持用Prettier,确保本地项目依赖安装正确,并配置.prettierrc文件:- 项目内安装依赖:
npm install prettier @supersoniks/prettier-plugin-twig-melody --save-dev - 根目录创建
.prettierrc:{ "plugins": ["@supersoniks/prettier-plugin-twig-melody"], "tabWidth": 4, "useTabs": false, "twigMelody": { "indentWith": " ", "preserveComments": true } } - 配置ALE插件(如果用的话):
let g:ale_fixers = { \ 'twig': ['prettier'], \ } let g:ale_prettier_options = '--plugin=@supersoniks/prettier-plugin-twig-melody'
这样ALE调用Prettier时会正确加载Twig插件,处理缩进问题。
- 项目内安装依赖:
临时用VS Code辅助格式化
如果以上Vim方案都不生效,可以临时用VS Code过渡:- 安装Twig Language 2和Prettier插件
- 在settings.json中添加:
"[twig]": { "editor.defaultFormatter": "esbenp.prettier-vscode", "prettier.documentSelectors": ["**/*.twig"] }
打开Twig文件按
Ctrl+Shift+I格式化后,再回到Vim使用即可。
内容的提问来源于stack exchange,提问作者kevgiraultdev
相关产品推荐
相关产品推荐

