vscode html 格式化_详解VSCode 格式化不符合预期的问题

8e61decc87892bd3ef8f205d2a8f5f23.png

一句话总结

不同格式化程序执行时长不一样,导致文件格式好后和预期不符。

请务必保持校验(Lint)规则和格式化(Format)规则一致,不然格式化后还是不符合预期是非常讨厌的。

本篇主要讲解怎么调教VSCode的保存时格式化程序。

适用人员

本文用于解决各类格式化冲突问题,如何使用 vscode自带格式化/ESLint/TSLint/Prettier 不在本文讨论范围之内。

看完本文你将收获:

  1. 为什么格式化后依然报错?
  2. 为什么有时候会格式化两次?

现状

多数VSCode使用者安装了冲突的格式化插件,但却不知道如何设置。

一个编辑器里对某个类型的文件有多个Formatter(格式化执行者),是一定会打架的。

常见格式程序执行时长(自测

prettier > default > eslint

意味着 通常情况下 prettier 最后执行完毕。代码样式就由prettier决定了(所以其他程序格式化好后,再prettier格式化可能会闪烁)。

格式化的类型及设置

Shift + Option + F : 手动执行格式化程序。

不同平台执行快捷键不一,见:

How do you format code in Visual Studio Code (VSCode)​stackoverflow.com
9fe2c9933a619d4cbe980675b43c635e.png

若有多个格式化程序,可能会让你选用哪个进行格式化。

8a6e372f2e29a5fdaa23409738aaee82.png

Save时格式化

下面的json型设置需要写到setting.json里,详情请看:

Visual Studio Code User and Workspace Settings​code.visualstudio.com
24e6df12f9f43190eb3383a61464c6f4.png
// 保存时使用VSCode 自身格式化程序格式化
"editor.formatOnSave": true,
// 保存时用eslint格式化
"editor.codeActionsOnSave": {"source.fixAll.eslint": true
}
// 两者会在格式化js时冲突,所以需要关闭默认js格式化程序 
"javascript.format.enable": false

有哪些格式化程序和插件?

一、VSCode自带格式化程序

以js为例

// 代表默认格式js程序是否开启,默认开启。用eslint格式化js时需要设置为false
// 既然用ESLint进行格式校验,一定也用ESLint来格式化是最能匹配的
"javascript.format.enable": true 

只有一些普适型的格式化规则,够正常适用。

无任何其他格式化插件时执行此格式化程序。

二、ESlint

按照eslint的规则进行格式化,格式化之后eslint还报错不是eslint的原因,是后面又有其他格式化程序格式化成了其他格式。

eslint.validate 无须设置,基本没有意义。

eslint-plugin-vue 可以管到vue文件的html部分。

三、vetur

VSCode 商店里的 Vue 插件。用于在 Vue 单文件中展示不同语言,有格式化、展示、高亮等能力。

安装即默认开启格式化。

// 关闭vetur内的js格式化程序 
"vetur.format.defaultFormatter.js": "none",

vetur 内置了 prettier 和 eslint 的能力。实测prettier的执行慢于eslint。所以会出现Vue文件中js格式化后eslint还报错的情况。

prettier: For css/scss/less/js/ts. prettier-eslint: For js. Run prettier and eslint --fix. prettyhtml: For html. stylus-supremacy: For stylus. vscode-typescript: For js/ts. The same js/ts formatter for VS Code.

四、prettier

格式化界的钢铁直男,他有一套自己的格式化规则。

安装即默认开启保存格式化,手动格式化也会触发prettier。 例如若安装了 prettier,vscode 里的所有右下角有 prettier 的均有 prettier 托管格式化,默认程序似乎就不起作用了。

即使不安装 vetur,prettier 也会格式化 vue 文件

总结

格式化由 VSCode 执行,但可能执行者可能是很多种,这是导致格式化‘不好用’的根源所在。

VSCode 本身有个格式化程序

eslint 可以执行格式化 js

prettier 可以执行格式化 js html css 等

vetur 可以执行格式化 vue 单文件中的各类语言

例如: pretter里的indent 缩进默认为 2,可通过"prettier.tabWidth": 4 修改

VSCode如何判断应该使用哪种格式化工具?

文件后缀识别。
不同的文件在 VSCode 里被识别成不同的语言格式,展示在编辑器下方的状态栏里,这非常关键。

所以vue文件通常会被vetur格式化而不是其他的。

prettier 和 eslint 同时格式化

prettier 和 eslint 的 "source.fixAll.eslint": true 若同时存在,会格式化两次(能肉眼可见),最后会以 prettier 的为准。

prettier-eslint

未尝试过,不敢妄断。

按照官方文档是用eslint的规则进行格式化。 使用prettier的格式化能力,使用eslint的格式化规则(eslint的格式化有时候不好用)。

推荐设置

本人设置,仅供参考

以下配置切勿照搬,需要理解原理。如果你有eslint的格式化项目也有tslint的格式化项目,需要对每个项目进行特殊配置。

插件安装

dbaeumer.vscode-eslint(用于eslint报错和格式化)

octref.vetur(用于vue文件识别)

mikebovenlander.formate(vscode没有自动格式化css的程序,用于格式化css和less等)

    // 以下程序用于格式化Vue项目,其他项目可以根据原理一通百通。// 设置保存时格式化。只用于用于格式化css/less程序"editor.formatOnSave": true,// 关闭js/ts的默认format,统一用eslint进行格式化(tslint已经不维护了,所以转eslint吧)"javascript.format.enable": false,"typescript.format.enable": false,// 关闭vetur的js/ts/html的formatter。html用eslint-plugin-vue格式化。// js/ts程序用eslint,防止vetur中的prettier与eslint格式化冲突"vetur.format.defaultFormatter.html": "none","vetur.format.defaultFormatter.js": "none","vetur.format.defaultFormatter.ts": "none",// 开启eslint自动修复js/ts功能"editor.codeActionsOnSave": {"source.fixAll.eslint": true},

说明:在开启了VSCode的默认格式化程序后,Vetur对Vue文件进行识别,格式化时采用prettier格式化Less等类型。但由于关闭了js/ts/html的格式化,所以只用Vetur和Vscode配合格式化CSS程序,TS/JS由ESLint格式化,template由eslint-plugin-vue格式化。

设置后的文件执行的格式化程序

  1. html。相当于利用默认格式化程序
  2. JS/TS。用eslint的save format即可。但是需要删掉默认的vscode的设置
  3. 纯css/less文件。VSCode没有格式化样式的格式化程序,可以用插件 mikebovenlander.formate进行格式化
  4. vue 文件。关闭vetur部分formatter。 js 直接使用eslint和eslint-plugin-vue格式化 。less使用其自带的prettier格式化 。html使用 eslint-plugin-vue 格式化。

若帮到了你,请点赞 哦~

本文涉及的语言

JavaScript Less Typescript Vue HTML 等

英文关键字

Prettier not working in VSCode

Eslint format not working in VSCode

Vetur format not working in VSCode

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

反斜杠转义mysql java_mysql数据库中的反斜杠”\“怎么使用Java进行转义

mysql数据库中的反斜杠”\“怎么使用Java进行转义发布时间:2020-11-24 15:15:12来源:亿速云阅读:88作者:Leah这期内容当中小编将会给大家带来有关mysql数据库中的反斜杠”\“怎么使用Java进行转义,文章内容丰富且以专业…

C#总结(四)调用C++动态库

由于公司很多底层的SDK,都是C开发,上层的应用软件却是C# Winform程序。在实际工作的过程中,就经常碰到了C# 程序调用C 动态库的问题。最近一直在和C 打交道,C# 怎么调用C 类库函数。也遇到了一些问题,所以就来总结总结…

mysql外码内码定义_中文编码杂谈(转) - CodeAxe的个人页面 - OSCHINA - 中文开源技术交流社区...

编码问题的例子在windows自带的notepad(记事本)程序中输入“联通”两个字,保存后再次打开,会发现“联通”不见了,代之以“��ͨ”的乱码。这是windows平台上典型的中文编码问题。即文件保存的时候是按照ANSI编码(其实就…

洛谷1417烹调方案——动态规划:价值受时间影响

题目:https://www.luogu.org/problemnew/show/P1417 与01背包的不同在于价值受时间影响。 对第i个物品的遍历有一个先后顺序,在01背包里顺序不影响,但此时顺序会影响。 所以可以考虑对遍历的顺序排序。因为排序时会把每一个都和其余所有比较一…

python re.split_python re模块re.split将字符串分割后返回列表

re.splitsplit 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:re.split(pattern, string[, maxsplit0, flags0])参数:参数描述pattern匹配的正则表达式string要匹配的字符串。maxsplit分隔次数,maxsplit1 分隔一…

python自动化控制设备有限公司_华为 Python网络自动化

哈喽,大家好!我是艺博东 ,是一个思科出身、专注于华为的网工;好了,话不多说,我们直接进入正题。光棍二十年,不知道情人节是什么鬼东西。还是好好学技术吧!努力、奋斗吧!为…

vue组件 Prop传递数据

组件实例的作用域是孤立的。这意味着不能(也不应该)在子组件的模板内直接引用父组件的数据。要让子组件使用父组件的数据,我们需要通过子组件的props选项。 prop 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来…

Study之2 Glance相关操作-devstack

1,Glance的image是存储在backend中,backend配置在: /etc/glance/glance-api.conf。2, devstack默认:image 存放在控制节点本地目录 /opt/stack/data/glance/images/ 中。 3,查看目前已经存在的image。 source devstack…

python视图函数是什么意思_Flask初学者:视图函数

视图函数返回html模板:使用“from flask import render_template”,在函数中传入相对于文件夹“templates”html模板路径名称字符串即可,flask会自动到项目根目录的“templates”文件夹(创建flask项目时,pycharm会自动创建两个空文…

kendo Grid json解析的问题

新建立了一个 页面,在grid中使用了dropdownlist,总是显示companyId is not defined ,以前这个问题解决过了,忘记记录了额,现在不知道怎么办了 下面的这个解决方法是错误的razor语法中的renderScript移动到scrip前面去解…

人工蜂群算法python_教程 | 用人工蜂群算法求解k-分区聚类问题

原标题:教程 | 用人工蜂群算法求解k-分区聚类问题选自towarddatascience作者:Pedro Buarque参与:Pedro、刘晓坤群体智能算法是一类受生物群体智能行为的启发而发展出来的算法,社会性动物例如蚂蚁、蜜蜂、鱼等,个体的简…

不定方程求解

题目链接:http://noi.openjudge.cn/ch0201/7650/总时间限制: 1000ms 内存限制: 65536kB描述给定正整数a,b,c。求不定方程 axbyc 关于未知数x和y的所有非负整数解组数。 输入一行,包含三个正整数a,b,c&#…

依赖注入底层反射原理_PHP基于反射机制实现自动依赖注入的方法详解_php技巧...

这篇文章主要介绍了PHP基于反射机制实现自动依赖注入的方法,结合实例形式分析了php使用反射实现自动依赖注入的步骤、原理与相关操作技巧,本文实例讲述了PHP基于反射机制实现自动依赖注入的方法。分享给大家供大家参考,我们一起来看看本篇文章吧!依赖注入…

Java学习(二)

Java中的基本类型数据(char、bool、byte、short、int、long、float、double)长度: 1 System.out.println(Byte.SIZE/8);2 System.out.println(Short.SIZE/8);3 System.out.println(Integer.SIZE/8);4 System…

java遍历树_Java实现遍历N级树形目录结构

最近挺忙,一直在做项目,然后有个树形目录结构需要返回给前端,这里给大家说一下实现的思路。具体达到的效果类似:一级目录A:二级目录A:三级目录:四级目录:文件.txt二级目录B&#xff…

【Linux】【Services】【SaaS】Docker+kubernetes(11. 构建复杂的高可用网络)

1. 简介 flannel在实战阶段貌似不能胜任在灾难恢复时候异地的网络,打算用openvswith试试转载于:https://www.cnblogs.com/demonzk/p/8404103.html

java输出变量_Java笔记1: 输入输出与变量常量

输入方法nextLine以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。可以获得空白的一串字符。import java.util.Scanner;public class Hello {public static void main(String[] args) {Scanner in new Scanner(System.in);// 从键盘接收数据System.o…

python_fullstack基础(十八)-并发编程

并发编程 一、进程 1、理论背景 ①操作系统背景 手工操作—穿孔卡片 原理:用户独占计算机,CPU等待手工操作,资源利用和CPU利用效率极低批处理—磁带处理、批处理系统 原理:主机与输入机之间增加磁带存储设备,使得计算机…

httplib java_httplib发布调用错误

我正在尝试自动化几个http请求,其中,我有以下从网络捕获的POST调用数据:方法:POST请求标头:POST /cgi-bin/auto_dispatch.cgi HTTP / 1.1主机:10.226.45.6连接:keep-alive内容长度:2…

20165218 学习基础和C语言基础调查

个人技能及阅读心得 个人技能之绘画绘画是我从很小便开始接触的,从最初的简笔画到国画、素描、水粉,大约也学了七八年。但是到了高中之后,就逐渐放下了。 记得当初学素描时,老师的一句话让我记忆犹新,她说,…