n1ro°
RU

Ошибки и коды · Инструкция

В VS Code клавиша Tab перемещает фокус вместо отступа

Когда Tab внезапно перестаёт вставлять отступ и начинает перескакивать по элементам интерфейса, обычно включён режим.

Редакция N1RO · Проверено

Короткий ответ

Нажмите Ctrl+M на Windows/Linux (на macOS используйте соответствующую команду Toggle Tab Key Moves Focus через Command Palette) и убедитесь, что индикатор `Tab moves focus` исчез. Постоянное поведение регулируется `editor.tabFocusMode`.

Что такое Tab trapping и почему режим включается случайно

В обычном редакторе VS Code Tab вставляет символ табуляции или набор пробелов согласно настройкам indentation. Для пользователей клавиатурной навигации и screen reader нужен противоположный режим: Tab должен выходить из редактора и переходить к следующему доступному элементу интерфейса. VS Code называет это tab trapping / Tab Key Moves Focus и позволяет быстро переключать режим. На Windows и Linux комбинация Ctrl+M легко нажимается случайно, особенно если пользователь работает с другими shortcut-командами. После этого кажется, что «Tab сломался»: в коде курсор не двигается вправо, а фокус уходит в панели, список Problems, терминал или кнопки. В строке состояния при активном режиме появляется соответствующий индикатор. Поэтому первая проверка — не keybindings.json и не переустановка расширений, а состояние Tab Key Moves Focus. Это поведение также существует в Integrated Terminal и может проявляться там отдельно в контексте focus navigation.

Совет: Если Tab начал вести себя иначе внезапно во всех языках, проверьте режим фокуса до настроек formatter и indentation.

Как вернуть Tab для ввода отступа

  1. Щёлкните внутри обычного редактируемого файла и посмотрите строку состояния: при активном режиме может отображаться `Tab moves focus`.
  2. Откройте Command Palette и выполните Toggle Tab Key Moves Focus. На Windows/Linux стандартное переключение связано с Ctrl+M.
  3. Нажмите Tab в начале строки. Если теперь появляется отступ, причина устранена и менять keybindings не требуется.
  4. Если режим снова включается при каждом запуске, найдите `editor.tabFocusMode` в Settings и проверьте его значение и scope. Workspace-настройка может отличаться от User Settings.
  5. Если Tab не вставляет ожидаемое число пробелов, это уже отдельная тема indentation: проверьте Spaces/Tab Size, `editor.insertSpaces` и auto-detection.
  6. Если проблема возникает только в одном widget, terminal или расширении, выясните, кому принадлежит focus. Расширение может перехватывать собственные клавиатурные команды, хотя глобальный режим редактора выключен.

Предупреждение: Не удаляйте пользовательские keybindings до проверки Tab Key Moves Focus: можно потерять полезные shortcut-настройки и не устранить причину.

Похожий симптом — разные причины

  • Tab уходит на кнопку/панель. Tab Key Moves Focus. Toggle Tab Key Moves Focus / индикатор
  • Tab остаётся в коде, но отступ 2 вместо 4. Indentation auto-detection/tabSize. Spaces/Tab Size в status bar
  • Tab выбирает IntelliSense suggestion. Фокус в suggestion widget. Esc закрывает список; повторить Tab
  • Tab не работает только в одном расширении. Keybinding/context расширения. Keyboard Shortcuts Troubleshooting

Почему режим существует и когда его лучше оставить включённым

Для клавиатурной доступности стандартное поведение текстового редактора создаёт ловушку: Tab вставляет символ и не позволяет перейти к соседней панели. Tab Key Moves Focus решает эту проблему, поэтому совет «просто навсегда выключить» подходит не всем. Если вы используете screen reader или предпочитаете полностью клавиатурную навигацию интерфейса, режим может быть полезен постоянно, а отступ можно выполнять другими командами. В обычной разработке чаще удобнее оставить tab focus выключенным и включать его временно через toggle, когда нужно пройти интерфейс Tab-клавишей. Главное — понимать, что это глобальное состояние редактора, а не настройка конкретного языка. Если команда случайно конфликтует с привычным shortcut, переназначьте Toggle Tab Key Moves Focus в Keyboard Shortcuts, но сохраните доступ к самой функции. Так вы устраните случайные переключения без ухудшения доступности.

Важно: Если Ctrl+M нужен вам для другой команды, переназначьте именно shortcut переключателя, а не отключайте accessibility-функцию через хаки.

Что проверять, если Toggle не помог

Убедитесь, что фокус действительно находится в text editor, а файл не открыт в read-only preview или специализированном custom editor. Документация отмечает, что read-only files ведут себя с Tab trapping особым образом. Закройте всплывающий список IntelliSense клавишей Esc и повторите тест: когда focus находится в suggestion widget, Tab может принимать выбранное предложение, а не создавать indentation. Затем откройте Keyboard Shortcuts и найдите bindings для Tab, чтобы увидеть context `when` и возможные команды расширений. Если проблема появилась после установки keymap/Vim/Emacs-расширения, временно отключите его только для workspace и проверьте базовое поведение. Наконец, протестируйте новый Empty Profile без пользовательских keybindings. Такой порядок отличает системный tab focus mode от переопределённой клавиши и не требует сбрасывать весь профиль VS Code.

Совет: Read-only/custom editors могут обрабатывать Tab иначе, поэтому проверяйте на обычном редактируемом текстовом файле.

Если режим включается снова

Повторное появление Tab Key Moves Focus обычно стоит диагностировать как отдельное событие, а не менять размер табуляции. Проверьте, не нажимается ли Ctrl+M случайно и нет ли пользовательского keybinding на ту же команду. Затем временно запустите чистый профиль без keymap-расширений и сравните поведение. Если в чистом профиле Tab стабилен, возвращайте переназначения по одному. Для пользователей клавиатурной навигации важно не просто «выключить мешающий режим», а сохранить доступный способ перемещать фокус по интерфейсу, поэтому итоговая настройка должна учитывать реальный сценарий работы.

Проверка результата

  • Индикатор Tab moves focus выключен, если нужен обычный ввод.
  • Tab создаёт отступ в редактируемом текстовом файле.
  • Размер отступа проверен отдельно через Spaces/Tab Size.
  • Suggestion widget закрыт при тесте чистого поведения Tab.
  • Нет конфликтующего keybinding/keymap-расширения.

Что учитывать

В обычном редакторе VS Code Tab вставляет символ табуляции или набор пробелов согласно настройкам indentation. Для пользователей клавиатурной навигации и screen reader нужен противоположный режим: Tab должен выходить из редактора и переходить к следующему доступному элементу интерфейса. VS Code называет это tab trapping / Tab Key Moves Focus и позволяет быстро переключать режим. На Windows и Linux комбинация Ctrl+M легко нажимается случайно, особенно если пользователь работает с другими…

Источники и проверка

Фактическая часть сверена по первичным источникам (в т.ч. Accessibility). Пример и формулировки — редакция N1RO на 2026-09-20.