
Cmd+, — открыть настройки. Работает в любом приложении macOS. Safari, Finder, Chrome, Terminal — везде. Кроме VS Code, если у вас русская раскладка.
Проблема: VS Code обрабатывает этот шорткат по символу (запятая), а не по физической клавише. На русской раскладке та же клавиша выдаёт Б. VS Code получает Cmd+Б, пожимает плечами — и ничего не делает.
Решение — одна строка в keybindings.json:
{ "key": "cmd+[Comma]", "command": "workbench.action.openSettings" }
Квадратные скобки — это привязка по физическому коду клавиши (scan code). Работает на любой раскладке.
ДИСКЛЕЙМЕР.
В статье ничего не рекламирую, никаких ссылок не оставляю.
Сама статья написана Claude Code.
Но проблема была у меня, у человека, и я лично дожимал Клода чтоб он не свернул в сторону, а всё таки нашёл решение.Он божится, что подробного описания проблемы и решения в интернете не нашёл, поэтому я решил задокументировать с ним нашу сессию и выложить сюда. Чтобы ваши-наши агенты смогли быстрее нагуглить решение проблемы.
Предыстория: новый Mac, новый мир
Я недавно купил свой первый MacBook. Всё в macOS было в новинку: жесты, Dock, Spotlight, эти бесконечные Cmd вместо Ctrl. Я ставил VS Code, ковырял настройки, пытался обжиться.
В терминале VS Code у меня был запущен Claude Code (который и написал эту статью!). Мы работали над исследовательским проектом, запустили локальный веб-сервер на порту 8899. Кликнул по ссылке в терминале — она открылась не в Chrome, а во встроенном Simple Browser VS Code. Мелочь, но раздражает.
Спросил Claude: «Как сделать, чтобы ссылка открывалась в Chrome?»
Claude ответил: «Нажми Cmd+,, открой Settings, найди настройку Remote > Ports > Open Browser Kind, поменяй на external».
Я нажал Cmd+,.
Ничего не произошло.
Расследование: 12 шагов к одной запятой
Шаг 1. Может, фокус не на VS Code?
Первая гипотеза Claude: Cmd+, — системный шорткат macOS, он открывает настройки активного приложения. Если фокус улетел в другое окно — откроются настройки чего-то другого.
Я кликнул на вкладку файла в VS Code, снова нажал Cmd+,. Ноль реакции.
Шаг 2. А другие шорткаты работают?
Cmd+Shift+P — Command Palette. Нажал — сработало. Значит VS Code шорткаты получает. Проблема где-то в конкретной комбинации Cmd+,.
Шаг 3. Может, привязка слетела?
Открыли Keyboard Shortcuts VS Code. Нашли workbench.action.openSettings — привязан к ⌘,, источник System. Всё на месте. Конфликтов нет, переопределений нет.
Тут Claude начал предлагать: «Может, просто откроем настройки через Command Palette? Cmd+Shift+P → Open Settings — и всё». Я отказался. Мне нужно было понять, почему базовый шорткат macOS не работает в самом популярном редакторе. Если Cmd+, сломан — это не проблема одного раза, это проблема на каждый день.
Шаг 4. Может, что-то перехватывает?
Пошли по классике: внешние приложения, которые могут хватать глобальные шорткаты. Проверили процессы — ни Karabiner, ни Raycast, ни Alfred, ни BetterTouchTool. Чистая система — я же говорю, Mac свежий.
Шаг 5. LaunchAgents?
Проверили ~/Library/LaunchAgents/. Google-обновлялки и Handy для диктовки голосом (ставим в первую очередь, даже до IDE). Ничего подозрительного.
Шаг 6. Системные хоткеи macOS?
Проверили через defaults read com.apple.symbolichotkeys. Нашли привязку на keyCode 43 (клавиша запятая), но с модификаторами Cmd+Option+Control — совсем другая комбинация. Не конфликт.
Шаг 7. Maccy?
Я вспомнил, что также поставил Maccy — менеджер буфера обмена. Может, он? Проверили его настройки — хоткей Cmd+Shift+C. Не виноват.
На этом этапе Claude опять предложил всё бросить: «Давай просто назначим другой шорткат на открытие настроек?» Нет. Мне нужна причина. Cmd+, — это стандарт macOS. Если он не работает, значит что-то фундаментально не так, и обходной путь только замаскирует проблему.
Шаг 8. Расширения VS Code?
У меня стояло ровно одно расширение — anthropic.claude-code. Маловероятный подозреваемый, но проверили. Не он.
Шаг 9. Record Keys — перелом
В окне Keyboard Shortcuts есть режим Record Keys — иконка клавиатуры справа от поиска. Включаешь его, жмёшь комбинацию — VS Code показывает, что он «услышал» и какие команды на это назначены.
Включил Record Keys. Нажал Cmd+,. В строке поиска появилось:
"cmd+[Comma]"
А в таблице результатов — пусто. Ноль команд.
Стоп. VS Code видит нажатие. Но не находит привязки. При этом мы точно видели, что openSettings привязан к ⌘,. Как это возможно?
Шаг 10. keybindings.json?
Может, кто-то отключил привязку через пользовательский конфиг? Проверили — файла keybindings.json вообще не существует. Переопределений нет.
Шаг 11. Точно ли VS Code?
На всякий случай убедились, что это не Cursor и не VSCodium. Нет, честный /Applications/Visual Studio Code.app.
Шаг 12. Раскладка!
Все версии исчерпаны. Осталось одно. Я вдруг подумал: Cmd+Shift+P работает, Cmd+, — нет. В чём разница?
P — буква. На русской раскладке та же клавиша выдаёт З, но для Cmd+буква macOS автоматически подставляет символ по английской раскладке. Поэтому Cmd+P работает всегда.
, — не буква. На русской раскладке эта клавиша выдаёт Б. И для небуквенных символов автоматического маппинга нет.
Переключил раскладку на английскую. Нажал Cmd+,. Настройки открылись.
Корневая причина
VS Code обрабатывает шорткаты двумя способами:
По символу — cmd+, означает «Cmd + символ запятая». Если раскладка выдаёт другой символ — не сработает.
По физическому коду клавиши — cmd+[Comma] означает «Cmd + физическая клавиша, которая на US-раскладке выдаёт запятую». Работает независимо от раскладки.
Стандартная привязка VS Code — первый способ (по символу). Вот что происходит при нажатии Cmd+, на русской раскладке:
Нажимаю физическую клавишу
,/БmacOS передаёт VS Code символ
Б(активна русская раскладка)VS Code получает
Cmd+БИщет команду на
Cmd+Б— не находитНичего не происходит
Почему в других приложениях работает?
macOS на системном уровне обрабатывает Cmd+, как команду меню «Preferences». Нативные приложения (Safari, Finder, Chrome) получают этот шорткат через системный механизм, который работает по физической клавише.
VS Code — Electron-приложение (Chrome + Node.js). Electron обрабатывает шорткаты через свой механизм, который оперирует символами. Отсюда проблема — и она касается всех Electron-приложений, не только VS Code.
Решение
Создаём файл ~/Library/Application Support/Code/User/keybindings.json:
[ { "key": "cmd+[Comma]", "command": "workbench.action.openSettings" } ]
[Comma] в квадратных скобках — привязка по scan code. Теперь Cmd+, открывает настройки на любой раскладке.
Масштаб проблемы
Это затрагивает все небуквенные шорткаты VS Code при использовании не-латинской раскладки. Полный фикс:
[ { "key": "cmd+[Comma]", "command": "workbench.action.openSettings" }, { "key": "cmd+[Period]", "command": "editor.action.quickFix", "when": "editorHasCodeActionsProvider && editorTextFocus" }, { "key": "cmd+[Slash]", "command": "editor.action.commentLine", "when": "editorTextFocus" }, { "key": "cmd+[BracketLeft]", "command": "editor.action.outdentLines", "when": "editorTextFocus" }, { "key": "cmd+[BracketRight]", "command": "editor.action.indentLines", "when": "editorTextFocus" }, { "key": "cmd+[Backslash]", "command": "workbench.action.splitEditor" } ]
Cmd+. (Quick Fix), Cmd+/ (комментирование), Cmd+[/] (отступы), Cmd+\ (разделение редактора) — все они ломаются по той же причине и чинятся тем же способом.
Что я вынес из этой истории
Про работу с AI-ассистентом. Claude Code — отличный инструмент для расследований вроде этого. Он быстро генерирует и проверяет гипотезы: процессы, LaunchAgents, системные хоткеи, расширения. Но у него есть характерная слабость — он слишком быстро пытается свернуть на обходной путь. «Давай откроем через Command Palette», «давай назначим другой шорткат». Это разумная стратегия, если тебе просто надо открыть настройки прямо сейчас. Но если ты хочешь понять причину — приходится дожимать. Не соглашаться на workaround, возвращать в русло расследования. AI предлагает быстрый путь — пользователь решает, нужна ли глубина.
Про «новичковый» взгляд. Я пришёл на Mac впервые. У меня не было привычки «ну да, на русской раскладке шорткаты глючат, это нормально, все знают». Я не знал, что это «нормально». Поэтому не смирился и начал копать. Иногда незнание контекста — преимущество: не знаешь, что «так и должно быть», и находишь то, что другие перестали замечать.
Бонус: исходная задача
Вся эта история началась не ради шорткатов. Мне просто нужно было, чтобы ссылки из терминала VS Code открывались в Chrome, а не во встроенном Simple Browser.
Настройка называется remote.forwardedPorts.openBrowserKind. Да, слово «Remote» в названии сбивает с толку — но она работает и для локальных серверов. VS Code использует один механизм port forwarding для всего.
В settings.json добавляется одна строка:
"remote.forwardedPorts.openBrowserKind": "external"
Две проблемы, два однострочных решения, час расследования.
