VSCode 自定义代码格式和语言自动缩进(Django-Template 缩进)

Posted

技术标签:

【中文标题】VSCode 自定义代码格式和语言自动缩进(Django-Template 缩进)【英文标题】:VSCode custom code formatting and auto indention for language(Django-Template indention) 【发布时间】:2021-03-26 22:32:08 【问题描述】:

我进行了大量搜索以找到创建或覆盖现有的 vscode 扩展来为 django-template 做缩进的方法,但没有任何内容,也没有成功创建。 仍然使用此设置的最佳答案:

"files.associations": 
    "**/*.html": "html",
    "**/templates/**/*.html": "django-html",

"[django-html]": 
    "editor.defaultFormatter": "HookyQR.beautify",


"beautify.language": 
    "html": ["django-html"]
,

还有这个扩展:Dajngo (Baptiste Darthenay) & beautify。但是 django-template 语言没有缩进,只有 HTML 标签会被缩进。我试图覆盖 Djagno 扩展使其成为可能,是的,它会插入一些缩进,但在保存代码后,Beautify 会自动格式化代码并删除该缩进,所以结果总是这样:

<ul class="navbar-nav nav-flex-icons % if LANGUAGE_BIDI % mr-auto % endif %">
    % get_available_languages as languages %
    % for lang_code, lang_name in languages %
    % if lang_code != LANGUAGE_CODE %
    % language lang_code %
    <li class="nav-item">
      <a class="nav-link lang-setter" data-lang-code=" lang_code ">
         lang_code|language_name_local 
      </a>
    </li>
    % endlanguage %
    % endif %
    % endfor %
</ul>

丑陋的模板。 我还提供了所需的缩进规则,但我找不到一种方法来为 VSCode 代码格式化程序(如 beautify 或 prettier)强制执行此规则。

  "indentationRules": 
      "increaseIndentPattern": "((\\<)(body|address|blockquote|dd|div|dl|dt|tr|tbody|thead|fieldset|form|frame|frameset|h1|h2|h3|h4|h5|h6|iframe|noframes|object|ol|p|ul|applet|center|dir|a|menu|pre|table|button|a|abbr|acronym|area|b|base|basefont|bdo|big|br|button|caption|cite|code|col|colgroup|del|dfn|em|font|head|html|i|img|input|ins|isindex|kbd|label|legend|li|link|map|meta|noscript|optgroup|option|param|q|s|samp|script|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|var))|(\\\\%)\\s*(autoescape|block|blocktrans|blocktranslate|comment|for|empty|if|elif|else|ifchanged|ifequal|ifnotequal|from|low|regroup|ssi|spaceless|templatetag|widthratio|with|verbatim|thumbnail)",
      "decreaseIndentPattern": "((\\<\\/)(.*)*(\\>))|((\\\\%)\\s*(empty|elif|else|end(autoescape|block|blocktrans|blocktranslate|comment|for|if|ifchanged|ifequal|ifnotequal|spaceless|with|verbatim|thumbnail)))"
      

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,我发现这个有用的项目https://github.com/Riverside-Healthcare/djlint

要在 vscode 中安装它(我建议在虚拟环境中安装它):

pip install djlint

一旦完成。我使用扩展 run on save 并在 settings.json 中添加类似的配置

"emeraldwalk.runonsave": 
    "commands": [
        
            "match": "\\.html$",
            "isAsync": true,
            "cmd": "./path/to/venv/bin/djlint $file --reformat --quiet" 
        
    ]    

【讨论】:

以上是关于VSCode 自定义代码格式和语言自动缩进(Django-Template 缩进)的主要内容,如果未能解决你的问题,请参考以下文章

关于VSCode如何缩进两个空格

VS Code 不能解决 SQL 的自动缩进问题

以编程方式格式化和缩进从 Java 自动生成的源代码

vscode 代码缩进为4个空格

vscode 代码缩进为4个空格

vscode 代码缩进为4个空格