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,一经查实,立即删除!

相关文章

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

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

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

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

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 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来…

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、刘晓坤群体智能算法是一类受生物群体智能行为的启发而发展出来的算法,社会性动物例如蚂蚁、蜜蜂、鱼等,个体的简…

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

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

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

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

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

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

java 执行机制_Java类的执行机制

在完成将class文件信息加载到JVM并产生Class对象后,就可执行Class对象的静态方法或实例化对象进行调用了。在源码编译阶段将源码编译为JVM字节码,JVM字节码是一种中间代码的方式,要由JVM在运行期对其进行解释并执行,这种方式成为字…

论如何入门地使用vscode

微软大法好啊 这货更像是个gedit 以下内容只适合Oiers使用 本文档只适合新手引导的阶段使用 下载 这个是链接 可见这东西是和Emacs一样跨系统的 不知道为什么下载速度贼快 配置 还记得我们用Emacs的时候配置那叫一个可怕 虽然使用vscode也要配置 不过我们在配置它的时候就比Ema…

springboot jpa 创建数据库以及rabbitMQ分模块扫描问题

在使用jpa过程中,如果没有在配置中加入自动创建实体对于的sql,则需要提前创建建表语句 spring.jpa.properties.hibernate.show_sqltrue spring.jpa.properties.hibernate.format_sqltrue spring.jpa.hibernate.ddl-autoupdate 建表语句需要注意的点:需要…

cpp_06_缺省构造_拷贝构造_拷贝赋值_初始化表

1 构造函数 1.1 构造函数可重载&#xff1a; 构造函数可以通过形参表的差别化形成重载关系 重载关系的构造函数&#xff0c;通过构造函数的实参类型进行匹配 使用缺省参数可以减少构造函数重载的数量 // consover.cpp 构造函数的重载 #include <iostream> using name…

mysql sumif条件求和_sumif与sumifs条件求和函数详解,小白到大神的必经之路

在日常工作中我们经常需要根据某些条件进行求和&#xff0c;今天就给大家介绍下&#xff0c;Excel中的条件求和函数sumif和sumifsSumif函数第一个参数&#xff1a;Range&#xff1a;条件区域&#xff0c;用于条件判断的单元格区域。第二个参数&#xff1a;Criteria&#xff1a;…

Thread.join(), CountDownLatch、CyclicBarrier和 Semaphore区别,联系及应用

在java 1.5中&#xff0c;提供了一些非常有用的辅助类来帮助我们进行并发编程&#xff0c;比如CountDownLatch&#xff0c;CyclicBarrier和Semaphore&#xff0c;今天我们就来学习一下这三个辅助类的用法&#xff0c; 由于Thread.join()也和这三个类有类似用法&#xff0c;我也…

string转short java_[Java基础]之 数据类型转换

数据类型转换存在的意义数据类型转换&#xff0c;在实际的应用开发中&#xff0c;常常会对不同类型的数字类型进行计算&#xff0c;所以就用到了数据转换。一方面&#xff0c;使用算术计算符对数字进行运算时&#xff0c;系统在适当的时候回进行自动转换&#xff1b;另一放方面…

IDEA建立Spring MVC Hello World 详细入门教程

引子&#xff0c;其实从.NET转Java已经有几个月时间了&#xff0c;项目也做了不少&#xff0c;但是很多配置都是根据公司模板或者网上教程比忽略画瓢&#xff0c;对其中最简单的配置和设置并不完全理解&#xff0c;依旧是小白用户。最近项目不忙&#xff0c;重新梳理了一下Spri…

2048小游戏代码解析 C语言版

2048小游戏&#xff0c;也算是风靡一时的益智游戏。其背后实现的逻辑比较简单&#xff0c;代码量不算多&#xff0c;而且趣味性强&#xff0c;适合作为有语言基础的童鞋来加强编程训练。本篇分析2048小游戏的C语言实现代码。 前言 游戏截图&#xff1a; 游戏实现原理&#xff1…