VS Code // macOS

Keyboard
Overrides

Stop VS Code from capturing function keys and other shortcuts
meant for your operating system.

01 // The Problem

VS Code intercepts before macOS

VS Code registers keyboard shortcuts at the application layer — before macOS sees them. When you press F3, VS Code fires Find Next. Your OS shortcut never runs.

The fix is simple: add explicit unbind entries to VS Code's keybindings.json using the "-" prefix convention. VS Code stops handling the key; the event falls through to the OS.

02 // How to Unbind

The unbind convention

VS Code's keybindings file supports a minus-prefix command syntax. Setting a key to a command prefixed with "-" removes the default binding entirely.

01

Open the file

CMD+SHIFT+P → "Open Keyboard Shortcuts (JSON)"
or edit directly at the path below

02

Add unbind entries

Each entry has a "key" and a "command" prefixed with "-"

03

Save — takes effect immediately

No restart needed. VS Code reloads keybindings on file save.

File location on macOS:

~/Library/Application Support/Code/User/keybindings.json
03 // The Config

All F-keys unbound

The complete keybindings.json that releases F1–F19 back to macOS, including common Shift+Fx pairs.

// ~/Library/Application Support/Code/User/keybindings.json
[
  // Unbind all F-keys so macOS OS-level shortcuts are not captured
  { "key": "f1",        "command": "-workbench.action.showCommands" },
  { "key": "f2",        "command": "-editor.action.rename" },
  { "key": "f3",        "command": "-editor.action.nextMatchFindAction" },
  { "key": "shift+f3",  "command": "-editor.action.previousMatchFindAction" },
  { "key": "f4",        "command": "-editor.action.marker.nextInFiles" },
  { "key": "shift+f4",  "command": "-editor.action.marker.prevInFiles" },
  { "key": "f5",        "command": "-workbench.action.debug.continue" },
  { "key": "shift+f5",  "command": "-workbench.action.debug.stop" },
  { "key": "f6",        "command": "-workbench.action.debug.pause" },
  { "key": "f7",        "command": "-editor.action.inlineSuggest.commitNextWord" },
  { "key": "f8",        "command": "-editor.action.marker.next" },
  { "key": "shift+f8",  "command": "-editor.action.marker.prev" },
  { "key": "f9",        "command": "-editor.debug.action.toggleBreakpoint" },
  { "key": "f10",       "command": "-workbench.action.debug.stepOver" },
  { "key": "shift+f10", "command": "-editor.action.showContextMenu" },
  { "key": "f11",       "command": "-workbench.action.toggleFullScreen" },
  { "key": "shift+f11", "command": "-workbench.action.debug.stepOut" },
  { "key": "f12",       "command": "-editor.action.revealDefinition" },
  { "key": "shift+f12", "command": "-editor.action.goToReferences" },
  { "key": "f13",       "command": "-" },
  { "key": "f14",       "command": "-" },
  { "key": "f15",       "command": "-" },
  { "key": "f16",       "command": "-" },
  { "key": "f17",       "command": "-" },
  { "key": "f18",       "command": "-" },
  { "key": "f19",       "command": "-" }
]
04 // Reference

Default bindings removed

What VS Code was doing with each key before the unbind.

Key VS Code Default Action Now
F1Show Command Palettepasses to OS
F2Rename Symbolpasses to OS
F3Find Next Matchpasses to OS
Shift+F3Find Previous Matchpasses to OS
F4Next Error/Warning in Filespasses to OS
Shift+F4Previous Error/Warning in Filespasses to OS
F5Start / Continue Debuggingpasses to OS
Shift+F5Stop Debuggingpasses to OS
F6Pause Debuggingpasses to OS
F7Inline Suggest Commit Next Wordpasses to OS
F8Next Error/Warning in Editorpasses to OS
Shift+F8Previous Error/Warning in Editorpasses to OS
F9Toggle Breakpointpasses to OS
F10Step Over (Debug)passes to OS
Shift+F10Show Context Menupasses to OS
F11Toggle Full Screenpasses to OS
Shift+F11Step Out (Debug)passes to OS
F12Go to Definitionpasses to OS
Shift+F12Go to Referencespasses to OS
F13–F19Unbound (safety unbind)passes to OS

Your keyboard, your rules.

vscode.w-b.dev

Daniel Brasileiro