Могу ли я добавить фрагменты, отфильтрованные по имени файла?

Я хочу добавить пару фрагментов для использования при создании модульных тестов javascript/typcript, но я не нахожу способа установить глобальную область действия фрагмента на *.spec.ts или же *.spec.js

Это возможно? В документации говорится, что область действия основана на идентификаторе языка, но я просто вижу способ добавить еще одно расширение для каждого языка.

0 ответов

Вы можете сделать это для фрагментов. В вашем keybindings.json:

{
    "key": "shift+alt+2",
    "command": "editor.action.insertSnippet",

    "when": "resourceFilename =~ /\\.spec\\.[tj]s$/",

    // with the snippet text directly in the keybinding   

    "args": {
      "snippet": "console.log($1)$0"
    }
},

или это связывание клавиш:

{
  "key": "shift+alt+2",
  "command": "editor.action.insertSnippet",
  "when": "resourceFilename =~ /\\.spec\\.[tj]s$/",
  "args": {
    "name": "unit tests"
  }
}

с этим фрагментом в файле фрагмента:

"unit tests": {
    //  "prefix": "",  // not used here

    "body": [
      "console.log($1)$0",
    ],

Ключом к ограничению области действия фрагмента является when пункт:

"when": "resourceFilename =~ /\\.spec\\.[tj]s$/",

который в качестве регулярного выражения будет искать имя файла, заканчивающееся на .spec.ts или же .spec.js (обратите внимание, что вам нужно двойные побеги до периода). Так что используйте resourceFileName и построить регулярное выражение, которое выглядит в конце этого.

Теперь выбранная вами связка клавиш будет работать в *.spec.ts или же *.spec.js только файл

Смотрите предложение when, действующее как регулярное выражение, в документации по привязкам клавиш:

ключ-значение, когда оператор оператора

Существует оператор пары ключ-значение для when статьи. Выражение key =~ value рассматривает правую часть как регулярное выражение для сопоставления с левой стороной. Например, чтобы добавить элементы контекстного меню для всех файлов Docker, можно использовать:

"when": "resourceFilename =~ /docker/"

Я нашел это благодаря этой проблеме: имя ресурса с двумя точками не работает

Другие вопросы по тегам