Option + Arrow keys no longer work in the integrated terminal

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Option + Arrow keys no longer work in the integrated terminal; instead, it prints “A” or “B” or “C” or “D” for up, down, left, right arrows, respectively, in ZSH. In bash, it’s “;3A” “;3B” “;3C” “;3D”.

No changes were made on my side, I just updated the IDE.

In the settings, there are existing bindings like “cursorWordLeft” when “textInputFocus” for each key

Similar issue: ⌥ + arrow no longer works

Steps to Reproduce

  1. Open integrated terminal
  2. Write something like “Hello World”
  3. Try to move the cursor one word back by pressing “Option + Left Arrow”
  4. It does not work, instead it prints “;3D” in bash or “D” in zsh.

Expected Behavior

Option + Arrow left(right) must move the caret one word back(forward)

Operating System

MacOS

Version Information

Version: 3.3.30 (Universal)
VSCode Version: 1.105.1
Commit: 3dc559280adc5f931ade8e25c7b85393842acf30
Date: 2026-05-09T18:28:42.332Z
Layout: editor
Build Type: Stable
Release Track: Default
Electron: 39.8.1
Chromium: 142.0.7444.265
Node.js: 22.22.1
V8: 14.2.231.22-electron.0
OS: Darwin arm64 25.4.0

Does this stop you from using Cursor

No - Cursor works, but with this issue

Hey, this is a known regression in 3.3.x. In one of the recent updates, the default Kitty keyboard protocol setting changed in the terminal. Because of that, Option+Arrow and Option+Delete send CSI u instead of ESC b and ESC f, which zsh, bash, and readline expect for word-wise navigation.

Workaround, add this to settings.json:

"terminal.integrated.enableKittyKeyboardProtocol": false

After that, Option+Left and Option+Right should move the cursor by words again. The issue is being tracked, but I can’t share an exact ETA for a fix yet.

I tried this and it’s not working for me.
I tried reloading the window as well and opening a new terminal. Nothing worked.

Let me know if I can do something else. Thank you.

Same issue here

Noticed that on bash this didn’t happen so here’s whats working for me

Define the bindings in ~/.zshrc

bindkey '^[[1;3C' forward-word
bindkey '^[[1;3D' backward-word

Reload / Open new shell and you should be good

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

In the cursor integrated terminal when using the shortcut “option + arrow(left, right)” instead of jumping from one word to the next it writes the letters “D” and “C”, “option + arrow(up, down)” write “A” and “B”.

Similar happens when “shift + arrow”.

This only happens in the cursor terminal, the shortcut works as expected in the code area, and all other editors like vscode or regular terminal. Confirmed the same behaviour with 3 different colleagues.

Steps to Reproduce

Open cursor, open terminal inside of cursor, type in some words, try to jump from word to word using “option + arrow(left, right)”

Expected Behavior

The shortcut “option + arrow(left, right)” should jump from one word to the next depending on the direction.

Operating System

MacOS

Version Information

Version: 3.3.30
VSCode Version: 1.105.1
Commit: 3dc559280adc5f931ade8e25c7b85393842acf30
Date: 2026-05-09T18:28:42.332Z
Layout: editor
Build Type: Stable
Release Track: Default
Electron: 39.8.1
Chromium: 142.0.7444.265
Node.js: 22.22.1
V8: 14.2.231.22-electron.0
OS: Darwin arm64 24.2.0

Does this stop you from using Cursor

No - Cursor works, but with this issue

enableKittyKeyboardProtocol does not resolve the issue for me. Still the same behaviour in bash and zsh. I did try creating a new terminal as well as restarting the IDE itself

Same issue as OP.

I tried setting
"terminal.integrated.enableKittyKeyboardProtocol": false
in my settings.json , reloaded my window, with no luck - the issue still happens

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Option+left or right arrow used to skip to the beginning of the string in either direction in terminal, but now it produces a string itself.

Steps to Reproduce

Open Cursor IDE, open terminal, type a few strings and press Option+Left arrow

Expected Behavior

Option + left arrow should skip to the beginning of the string to the left of the cursor

Screenshots / Screen Recordings

Operating System

MacOS

Version Information

Version: 3.3.30
VSCode Version: 1.105.1
Commit: 3dc559280adc5f931ade8e25c7b85393842acf30
Date: 2026-05-09T18:28:42.332Z
Layout: editor
Build Type: Stable
Release Track: Default
Electron: 39.8.1
Chromium: 142.0.7444.265
Node.js: 22.22.1
V8: 14.2.231.22-electron.0
OS: Darwin arm64 23.6.0

Does this stop you from using Cursor

No - Cursor works, but with this issue

Update the keyboard shortcuts json via cmd+shift+p or ctrl+shift+p search for the keyboard shortcut json one and then open it. after that add below array objects in available array.


[
  {
    "key": "alt+right",
    "command": "workbench.action.terminal.sendSequence",
    "args": { "text": "\u001bf" },
    "when": "terminalFocus",
  },
  {
    "key": "alt+left",
    "command": "workbench.action.terminal.sendSequence",
    "args": { "text": "\u001bb" },
    "when": "terminalFocus",
  },
]

Hey, thanks for letting us know the setting didn’t help. It looks like for some users enableKittyKeyboardProtocol: false doesn’t reset even after Reload Window.

The most reliable workaround for now is to add this to keybindings.json Cmd+Shift+P > Preferences: Open Keyboard Shortcuts (JSON):

[
  {
    "key": "alt+right",
    "command": "workbench.action.terminal.sendSequence",
    "args": { "text": "\u001bf" },
    "when": "terminalFocus"
  },
  {
    "key": "alt+left",
    "command": "workbench.action.terminal.sendSequence",
    "args": { "text": "\u001bb" },
    "when": "terminalFocus"
  }
]

This sends ESC f and ESC b straight to the shell, which is what zsh, bash, and readline expect for word-wise navigation, and it bypasses kitty keyboard. It works in both bash and zsh, with no need to edit .zshrc.

Thanks to @Rutvik_Nabhoya for this option and @fjvalente for an alternative using bindkey. We’re still tracking the issue, but I can’t share an ETA for a fix yet. We’ll post an update here once we have one.

not sure how this started happening but whenever i use the integrated terminal and try to jump to the previous word using alt/option + left arrow, the character ‘D’ is written instead. when i use macos terminal.app, the keyboard combination works as expected (jumps to previous word). here’s a demo:

here are the global keyboard bindings (keybindings.json):

// Place your key bindings in this file to override the defaults
[
    {
        "key": "cmd+i",
        "command": "composerMode.agent"
    },
    {
        "key": "alt+cmd+[",
        "command": "editor.fold",
        "when": "editorTextFocus"
    },
    {
        "key": "cmd+k cmd+0",
        "command": "editor.foldAll",
        "when": "editorTextFocus && foldingEnabled"
    },
    {
        "key": "cmd+r cmd+0",
        "command": "-editor.foldAll",
        "when": "editorTextFocus && foldingEnabled"
    },
    {
        "key": "cmd+k cmd+j",
        "command": "editor.unfoldAll",
        "when": "editorTextFocus && foldingEnabled"
    },
    {
        "key": "cmd+r cmd+j",
        "command": "-editor.unfoldAll",
        "when": "editorTextFocus && foldingEnabled"
    },
    {
        "key": "ctrl+w",
        "command": "-workbench.action.switchWindow"
    },
    {
        "key": "ctrl+shift+/",
        "command": "workbench.action.toggleMaximizedPanel"
    }
]

here’s the cursor about info:

“”"
Version: 3.4.17 (Universal)
VSCode Version: 1.105.1
Commit: 93e603f703cd553a6bb3644711a3379bbbb31180
Date: 2026-05-13T21:39:55.724Z
Layout: editor
Build Type: Stable
Release Track: Default
Electron: 39.8.1
Chromium: 142.0.7444.265
Node.js: 22.22.1
V8: 14.2.231.22-electron.0
OS: Darwin arm64 25.5.0
“”"

Can we please revert this back to the original/standard behaviour? The Option+Left/Right Arrows are jumping across words in all MacOS applications. Very annoying that this stopped working CursorAi Terminal window. It affects both integrated zsh and bash. Also, it’s fine in the source code editor window.

Hey, got the feedback about going back to the old behavior, I’ll pass it to the team. The issue is tracked, I can’t share an ETA for a fix yet.

For now, the most reliable workaround is keybindings.json, see post #16 Option + Arrow keys no longer work in the integrated terminal - #16 by deanrie above. It sends ESC f and ESC b directly to the shell, bypasses the kitty keyboard protocol, and works in both zsh and bash without any .zshrc changes.

Setting "terminal.integrated.enableKittyKeyboardProtocol": false doesn’t get applied for some users even after Reload Window, so keybindings are the more reliable option. Once there’s an update on the fix, I’ll reply in the thread.

I’m seeing the same issue as well, even after trying several approaches such as enableKittyKeyboardProtocol .
Version: 3.4.20
VSCode Version: 1.105.1
Commit: 0cf8b06883f54e26bb4f0fb8647c9500ccb43310
Date: 2026-05-15T02:26:10.351Z
Layout: editor
Build Type: Stable
Release Track: Default
Electron: 39.8.1
Chromium: 142.0.7444.265
Node.js: 22.22.1
V8: 14.2.231.22-electron.0
OS: Darwin arm64 24.6.0

I think this is the quickest and simplest approach.

Hey, glad bindkey worked. It’s a solid option for zsh, but if a user is on bash or wants one solution for both shells, they should use keybindings.json from post #16 Option + Arrow keys no longer work in the integrated terminal - #16 by deanrie. It sends ESC f and ESC b straight to the shell, so there’s no need to touch .zshrc.

We’re still tracking the issue, and I can’t share an ETA for a fix yet.

Hey everyone,
The Option+Arrow keys not working in the integrated terminal was fixed in a recent Cursor update. Updating to the latest version should resolve this — let me know if you still hit it.

All good now, thank you.