vscode 格式化配置

最近新安装了 vscode,对它进行一次全新的配置,之前都是随便配了能用就行。

主要使用 ESLint + Premitter + Vetur + koroFileHeader。
最终效果:
新建文件:自动添加文件信息(auther,createTime,lastUpdateTime 等);对函数一键注释信息。
保存时自动格式化:去除分号;自动缩进;函数名后 括号前后自动加空格等。

一开始安装了 beautify 和 vetur 进行格式化,但发现格式化的效果不尽如人意,对 vue template 中的代码效果不好。后面采用上面的前三个结合。

koroFileHeader 是对文件或函数头进行注释,具体文档 kotoFileHeader

1 安装插件

在 vscode 左侧 extensions 中,搜索以上插件。


Extensions.png

2 打开配置选项

打开 vscode setting.json。vscode 左下角 设置图标 -> settings -> 右上角 open settins(JSON) 图标。


open setting.png

3 配置 setting.json

以下是我的配置项:

{
    // 代码文件头部注释
    "fileheader.customMade": {
        "Descripttion": "",
        "Version": "1.0",
        "Author": "pj",
        "Date": "Do not edit",
        "LastEditors": "pj",
        "LastEditTime": "Do not edit"
    },
    // 函数注释
    "fileheader.cursorMode": {
        "description": "",
        "param": "",
        "return": ""
    },
    "fileheader.configObj": {
        "createFileTime": true,
        "language": {
            "languagetest": {
                "head": "/$$",
                "middle": " $ @",
                "end": " $/",
                "functionSymbol": {
                    "head": "/** ",
                    "middle": " * @",
                    "end": " */"
                },
                "functionParams": "js"
            }
        },
        "autoAdd": true,
        "autoAddLine": 100,
        "autoAlready": true,
        "annotationStr": {
            "head": "/*",
            "middle": " * @",
            "end": " */",
            "use": false
        },
        "headInsertLine": {
            "php": 2,
            "sh": 2
        },
        "beforeAnnotation": {
            "文件后缀": "该文件后缀的头部注释之前添加某些内容"
        },
        "afterAnnotation": {
            "文件后缀": "该文件后缀的头部注释之后添加某些内容"
        },
        "specialOptions": {
            "特殊字段": "自定义比如LastEditTime/LastEditors"
        },
        "switch": {
            "newlineAddAnnotation": true
        },
        "supportAutoLanguage": [],
        "prohibitAutoAdd": ["json"],
        "folderBlacklist": ["node_modules", "文件夹禁止自动添加头部注释"],
        "prohibitItemAutoAdd": [
            "项目的全称, 整个项目禁止自动添加头部注释, 可以使用快捷键添加"
        ],
        "moveCursor": true,
        "dateFormat": "YYYY-MM-DD HH:mm:ss",
        "atSymbol": ["@", "@"],
        "atSymbolObj": {
            "文件后缀": ["头部注释@符号", "函数注释@符号"]
        },
        "colon": [": ", ": "],
        "colonObj": {
            "文件后缀": ["头部注释冒号", "函数注释冒号"]
        },
        "filePathColon": "路径分隔符替换",
        "showErrorMessage": false,
        "writeLog": false,
        "wideSame": false,
        "wideNum": 13,
        "functionWideNum": 0,
        "CheckFileChange": false,
        "createHeader": true,
        "useWorker": false,
        "designAddHead": false,
        "headDesignName": "random",
        "headDesign": false,
        "cursorModeInternalAll": {},
        "openFunctionParamsCheck": true,
        "functionParamsShape": ["{", "}"],
        "functionBlankSpaceAll": {},
        "functionTypeSymbol": "*",
        "typeParamOrder": "type param",
        "customHasHeadEnd": {},
        "throttleTime": 60000
    },

    // 代码格式化
    // vscode默认启用了根据文件类型自动设置tabsize的选项
    "editor.detectIndentation": false,
    // 重新设定tabsize
    "editor.tabSize": 4,
    "vetur.format.options.tabSize": 4,
    // #每次保存的时候自动格式化
    "editor.formatOnSave": true,

    // 添加 vue 支持
    "eslint.validate": ["javascript", "html", "vue"],
    //  去掉代码结尾的分号
    "prettier.semi": false,
    "prettier.tabWidth": 4,
    //  使用单引号替代双引号
    "prettier.singleQuote": true,

    //  让函数(名)和后面的括号之间加个空格
    "javascript.format.insertSpaceBeforeFunctionParenthesis": true,
    //  这个按用户自身习惯选择
    "vetur.format.defaultFormatter.html": "js-beautify-html",
    // "vetur.format.defaultFormatter.html": "prettier",
    "vetur.format.defaultFormatterOptions": {
        // vue组件中html代码格式化样式
        "js-beautify-html": {
            // 对属性进行换行。
            // - auto: 仅在超出行长度时才对属性进行换行。
            // - force: 对除第一个属性外的其他每个属性进行换行。
            // - force-aligned: 对除第一个属性外的其他每个属性进行换行,并保持对齐。
            // - force-expand-multiline: 对每个属性进行换行。
            // - aligned-multiple: 当超出折行长度时,将属性进行垂直对齐。
            "wrap_attributes": "auto"
        },
        "prettier": {
            "semi": false,
            "singleQuote": true
        }
    },
    "vetur.validation.template": false,
    // 每次保存的时候将代码按eslint格式进行修复
    "editor.codeActionsOnSave": {
        "source.fixAll.eslint": true
    },
    "[javascript]": {
        "editor.defaultFormatter": "vscode.typescript-language-features"
    },
    // 代码是否按屏幕宽度换行
    "editor.wordWrap": "on",
    "[jsonc]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
    },
    "[vue]": {
        "editor.defaultFormatter": "octref.vetur"
    }
}

fileHeader 是按照相关文档配置,不使用的话可以忽略。

4 配置过程中遇到的点

  1. tabSize 习惯用4个空格,但把所有能搜到 tabSize 的值改为4,并且设置 "editor.tabSize": 4
    和 "vetur.format.options.tabSize": 4 之后,格式化出来还是2个空格。

原因:prettier 中 tabWidth 默认是2。
解决方法:配置 "prettier.tabWidth": 4 。且适配 vue 文件的话(如去掉分号,使用单引号),需要在 vetur.format.defaultFormatterOptions 中单独配置 prettier 相关属性。详见配置。

"prettier.tabWidth": 4,
  1. 使用 eslint 后,代码中有声明未使用的变量,会报错,又不想挨着删除(嫌麻烦),选择不让他报错。

配置方法:package.json 中配置

"eslintConfig": {
    "rules": {
        "no-unused-vars": "off"
    }
  },
  1. vue 中 html 格式化,总是固定第二个属性开始换行对齐,且有的标签错位,不好看。像现在这样配置 js-beautiful-html 不管用。

原因:之前安装了 beautify ,选择了默认使用 beautify 格式化 vue 文件,js-beautiful-html 是 vetur 中的配置选项。
解决方法:将 vue 默认格式化插件改为 vetur。

"[vue]": {
        "editor.defaultFormatter": "octref.vetur"
},

注:prettier 插件会优先使用项目根目录下的 editorconfig 配置文件,如果没有 editorConfig 文件,会在根目录下找 .prettierrc 文件,并使用该文件中的配置。找不到 editorConfig 和 。prettierrc 文件,才会使用 setting.json 中的配置。如果有 setting.json 中配置不生效的情况,看看是否有前面两个文件。可在 setting 中配置不使用 editorConfig 的配置。settings -> 搜索 editorConfig -> Prettier: Use Edit Config,置为 false。

快捷键格式化 vue 文件的时候,会提示有两个格式化插件,让选一个,应选择 vetur,才能与 setting.json 文件中的配置相适用(主要是 js-beautify-html)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容