Customize
Change keybindings
Map actions, action sequences, chords, and plugin commands without changing how keys behave in other modes.
Find the current binding first
Press F1 for keyboard help in the current context, or Space ? for the command palette. Both surfaces show effective bindings after your overrides are applied.
Map an action
[keys.normal]
"Ctrl-s" = "Save"
"u" = "Undo"
[keys.insert]
"Ctrl-s" = "Save"Each mode has its own table. A Normal-mode mapping doesn't change what the same key types in Insert mode.
Use sequences, chords, and plugin commands
[keys.normal]
"a" = [{ EnterMode = "Insert" }, "MoveRight"]
"g" = { "d" = "GoToDefinition" }
"Ctrl-j" = { PluginCommand = "BufferPicker" }Normal-mode bindings are inherited by Visual modes unless you add an explicit binding under [keys.visual]. Red rejects ambiguous plugin leader mappings instead of silently discarding one.
Control prefix hints
[key_hints]
enabled = true
delay_ms = 250Pause after a configured prefix such as Space, Ctrl-w, or g to see the available continuations.
Diagnose terminal shortcuts
red keysThe diagnostic shows how the current terminal reports key combinations without opening a document or starting Codex. Use Ctrl+J as the portable newline in Agent composers when a terminal doesn't distinguish modified Enter keys.