软件技巧

VSCode怎么自定义Emmet语法?

publish-date 2024-11-20
update-date 2024-11-21
# VSCode

我的需求

输入a,我希望出来的是:

<a href="" title="" rel="noopener noreferrer"></a>

而不是默认的:

<a href=""></a>

方法步骤

  1. 去你喜欢的路径下新建一个snippets.json
  2. 在里面写上你的自定义语法(怎么写?
  3. 打开VSCode→设置→输入emm搜索
  4. 在Emmet: Extensions Path下填入你的路径(怎么填?
  5. 重新打开或加载VSCode即可

常见问题

“为什么我用不了?”

说是常见问题,其实全部都是我亲身经历的问题……

由于不懂代码,网上也完全搜不到线索,真的超级绝望的……

我用最笨的办法排查了好久才找到怎么解决,还好结果值得!

特此记录,以助来者。

是路径格式的问题吗?

D:\software\VSCode\snippets.json为什么不行?

D:/software/VSCode/snippets.json也不行→不是Windows反斜杠的锅

D:/software/VSCode→行了,是路径不能带上文件本体的原因

D:\software\VSCode→也行的,斜杠正反不敏感

是json里面写错了吗?

我完全照着官方示例,照葫芦画瓢写的我的版本啊,为什么不行?

{
  "html": {
    "snippets": {
      "a": "<a href="" title="" rel="noopener noreferrer"></a>",
    }
  }
}

试了几种版本,集齐了VSCode的两种报错:

(喂!谁想集这个啊!(╯‵□′)╯︵┻━┻)

Found error CommaExpected while parsing the file
Found error PropertyNameExpected while parsing the file

最后找到真相的我泪流了出来,国粹飞了出来……

  1. 在JSON中,对象的最后一个键值对后面不能有逗号
  2. 在JSON中,字符串本身包含的双引号需要用反斜杠转义

虽然没写过JSON,但我写过CSS啊,句末加分号不是最佳实践吗?
怎么轮到这个JSON,反倒变成不能加了呢?
还能咋办,宠着咯!

转义双引号又是什么意思?

跟在html里把尖括号<写成&lt;一个意思:
别让电脑误会我要开始写标签了!其实我只是想写个<而已。

在JSON里双引号"也同样地已经承担包裹字符串的任务了:
你不想让它误会,就得写成\"的形式才行。

说了这么多废话,还不快把正确示例交出来!

我的示例

{
  "html": {
    "snippets": {
      "a": "<a href=\"\" title=\"\" rel=\"noopener noreferrer\"></a>",
      "t": "<?php get_template_part('back-btn'); ?>",
      "b":"<div><a href=\"<?php echo esc_url(home_url('/')); ?>\" class=\"banner\" title=\"Back to Home\">KazeLife</a></div>"
    }
  }
}

官方示例

{
  "html": {
    "snippets": {
      "ull": "ul>li[id=${1} class=${2}]*2{ Will work with html, pug, haml and slim }",
      "oll": "<ol><li id=${1} class=${2}> Will only work in html </ol>",
      "ran": "{ Wrap plain text in curly braces }"
    }
  },
  "css": {
    "snippets": {
      "cb": "color: black",
      "bsd": "border: 1px solid ${1:red}",
      "ls": "list-style: ${1}"
    }
  }
}

VSCode详细的官方说明点这里,我看不懂就不解读了。