Почему в VSCode подсветка синтаксиса часто перестаёт работать и как её быстро восстановить?

В последнее время в VSCode часто пропадает подсветка синтаксиса в файлах, где более пяти строк кода. <br/> <br/> Я в основном пишу shell-скрипты и C++ на macOS. <br/> <br/> В одном из последних файлов код скрипта был такой: <br/> <br/> Но примерно за 15 строк до конца файла подсветка становится однотонной и перестаёт работать. При этом в Sublime Text и на GitHub подсветка отображается корректно. Это можно увидеть в моём issue, например — <a href="http://github.com/microsoft/vscode/issues/326547" rel="nofollow">github.com/microsoft/vscode/issues/326547</a> <br/> <br/> Почему это происходит и как это можно исправить?
  • 20 июля 2026 г. 14:01
Ответы на вопрос 1
Коротко — это чаще всего не «случайный глюк VSCode», а проблема с токенизатором (TextMate‑грамматикой) или с расширением, которое эту грамматику даёт. Когда грамматика встречает правило/регулярное выражение, которое падает или застревает в особом состоянии, VSCode может перестать токенизировать (разбивать на токены/скоупы) последующие строки и показать их однотонно. Такое поведение видно только в VSCode, потому что другие редакторы используют другие грамматики/движки.

Что делать быстро (быстрые способы восстановления)
- Reload Window — Cmd+Shift+P → «Developer: Reload Window». Часто сразу восстанавливает подсветку.
- Переоткрыть файл (закрыть → открыть) или переключить язык файла в строке состояния (правый нижний угол) на другой и обратно.
- Отключить все расширения (Cmd+Shift+P → «Extensions: Disable All Installed Extensions») или запустить VSCode без расширений (если у вас доступна команда code, то: code --disable-extensions), чтобы проверить, связано ли это с каким‑то расширением.
- Временное решение: выбрать другой синтаксис (например «Bash» вместо «Shell Script») — иногда другая грамматика проблем не содержит.

Как выяснить причину (диагностика)
1. Посмотрите в консоль разработчика: Cmd+Shift+P → «Developer: Toggle Developer Tools» → Console. Если токенизация падает, там обычно появляются ошибки/исключения с указанием грамматики или регулярного выражения.
2. Откройте Output → Log (Extension Host) — там тоже могут быть ошибки.
3. Используйте Cmd+Shift+P → «Developer: Inspect Editor Tokens and Scopes» — можно увидеть, где токенизация перестаёт работать и какие правила применяются.
4. Поочерёдно выключайте расширения (особенно те, которые дают грамматики для shell/C++), чтобы найти виновника.

Долгосрочные решения
- Обновите VSCode и установленные расширения — многие такие баги фиксили в новых версиях.
- Если виновата конкретная грамматика/расширение — откройте issue у его автора и приложите минимальный пример файла + логи из Developer Tools/Extension Host. Это поможет автору найти и исправить ошибку (обычно проблема — некорректное регулярное выражение в TextMate‑грамматике).
- В крайнем случае можно заменить расширение на другое, дающее ту же подсветку, либо временно отключить семантическую подсветку (если она участвует): "editor.semanticHighlighting.enabled": false.

Почему это случается только в определённых файлах/местах
- Грамматика — это набор правил; конкретная последовательность символов (например, сложный here‑doc, вложенные шаблоны, редкая комбинация символов) может активировать проблемное правило. Поэтому файл может выглядеть нормально в других редакторах, но «сломать» грамматику VSCode именно в этом месте.

Если хотите, могу:
- Подсказать конкретные шаги по сбору логов,
- Помочь найти виновное расширение, если пришлёте имя расширений/пример фрагмента файла,
- Подсказать, какие настройки временно включить/выключить на macOS.
Похожие вопросы