Как заставить VS Code относиться к другим расширениям файлов как к определенному языку?


333

Или есть способ переключить язык текущего файла, чтобы использовать функцию выделения синтаксиса?

Например, *.jsxфактически использует JavaScript, но VS Code его не распознает.

Ответы:


501

В Visual Studio Code вы можете добавить постоянные ассоциации файлов для выделения языка в вашем settings.jsonфайле следующим образом:

// Place your settings in this file to overwrite the default settings
{
  "some_setting": custom_value,
  ...

  "files.associations": {
    "*.thor": "ruby",
    "*.jsx": "javascript",
    "Jenkinsfile*": "groovy"
  }
}

Вы можете использовать Ctrl+ Shift+, pа затем набрать settings JSON. Выберите « Настройки»: откройте «Настройки» (JSON), чтобы открыть свой settings.json.

Впервые эта Files: Associationsфункция была представлена ​​в Visual Studio Code версии 1.0 (март 2016 года). Проверьте доступные шаблоны в примечаниях к выпуску и строки известных языков в документации.


6
Значение для ассоциации должно быть идентификатором языка / плагина, а не именем. Например, плагин VBScript, который я установил, идентификатор vbs. "* .vms": "vbs" заставляет пользовательское расширение правильно связываться.
Мэтт Меррилл

Просто столкнулся с подобной проблемой. Если добавление сопоставления файлов, похоже, не работает, убедитесь, что у вас нет .editorconfigзакрытого файла или выровняйте конфигурации между VSCode и .editorconfig, последний будет иметь приоритет
RecuencoJones

Вы также можете поместить эти настройки в конкретный ${projectdir}/.vscode/settings.jsonфайл проекта .
Джейсон

108

Удерживая нажатой клавишу Ctrl + Shift + P (или cmd на Mac), выберите «Изменить режим языка», и вот оно.

Но я до сих пор не могу найти способ сделать VS Code распознанными файлами с определенным расширением, как у определенного языка


3
Похоже, есть ярлык непосредственно к Change Language Mode; Alt+K, M
Стаффорд Уильямс

Cmd+K, Mдля Mac.
GreeKatrina

Это очень возможно. Смотрите мой ответ ниже: stackoverflow.com/a/51228725/3307796
JoelAZ

69

Самый простой способ, который я нашел для глобальной ассоциации, - это просто нажать ctrl + km (или ctrl + shift + p и набрать «change language mode») с файлом типа, который вы ассоциируете, открытым.

Первым выбором будет «Настроить сопоставление файлов для« x »» (независимо от типа файла - см. Прикрепленное изображение). При выборе этого параметра сопоставление типов файлов будет постоянным.

введите описание изображения здесь

Возможно, это изменилось (вероятно, изменилось) с момента первоначального вопроса и принятого ответа (и я не знаю, когда оно изменилось), но это намного проще, чем шаги ручного редактирования в принятых и некоторых других ответах, и в целом избегает суетиться с идентификаторами, которые могут быть не очевидны.


2
Спасибо - это сработало для меня. При редактировании settings.jsonфайла вручную не было понятно, каким должен был быть идентификатор расширения, но этот метод сортировал его!
ccbunney

1
Добро пожаловать @ccbunney, рад, что это помогает. Это была точно такая же проблема, как и у меня - и я так и не понял, какой идентификатор расширения мне нужен, смеется. Во всяком случае, я был очень рад найти это решение для себя, и это здорово, что он помогает другим людям! : D
JoelAZ

33

например:

// .vscode/settings.json in workspace

{
  "files.associations": {
    "*Container.js": "javascriptreact",
    "**/components/*/*.js": "javascriptreact",
    "**/config/routes.js": "javascriptreact"
  }
}

1
Ницца. Это удобно, если у вас одинаковое расширение, но разные языковые парсеры в зависимости от пути. Например, у вас может быть yml для обработки конвейеров Concourse в одной папке и файлов Ansible в другой.
Кристиан Маслен

Я бы проголосовал за это дважды, если бы мог. Попытка сохранить синтаксис для моих компоновок и партиалов Nanoc с расширением .html решила эту проблему: "**/layouts/**/*.html": "erb"- стоит отметить, что раскрывающийся список VSCode «языковой режим» отображает фактическое имя подсветки синтаксиса в скобках, напримерRuby ERB (erb)
Dave Everitt


12

Это, например, сделает файлы, оканчивающиеся на .variablesи .overridesобрабатываемые, как любой другой файл LESS. С точки зрения раскраски кода, с точки зрения (авто) форматирования. Определите в пользовательских настройках или настройках проекта, как вам нравится.

(Семантический интерфейс использует эти странные расширения, если вам интересно)



8

Следующие шаги на https://code.visualstudio.com/docs/customization/colorizer#_common-questions хорошо сработали для меня:

Чтобы расширить существующий колоризатор, вы должны создать простой package.json в новой папке в .vscode / extensions и предоставить атрибут extensionDependencies, указывающий настройку, к которой вы хотите добавить. В приведенном ниже примере расширение .mmd добавлено в раскраситель уценки. Обратите внимание, что не только имя extensionDependency должно соответствовать настройке, но и идентификатор языка должен совпадать с идентификатором языка, который вы расширяете.

{
    "name": "MyMarkdown",
    "version": "0.0.1",
    "engines": {
        "vscode": "0.10.x"
    },
    "publisher": "none",
    "extensionDependencies": [
        "markdown"
    ],
    "contributes": {
        "languages": [{
            "id": "markdown",
            "aliases": ["mmd"],
            "extensions": [".mmd"]
        }]
    }
}

5

Я использовал другой подход для решения почти такой же проблемы, в моем случае я сделал новое расширение, которое добавляет поддержку подсветки синтаксиса PHP для специфичных для Drupal файлов (таких как .module и .inc): https: // github. ком / mastazi / VS-код-друпал

Как вы можете видеть в коде, я создал новое расширение, а не модифицировал существующее расширение PHP. Очевидно, я объявляю зависимость от расширения PHP в расширении Drupal.

Преимущество такого подхода состоит в том, что при обновлении расширения PHP моя пользовательская поддержка Drupal не теряется в процессе обновления.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.