Disable the press-and-hold accent menu on Mac
Hold the letter e on a Mac and instead of seeing eeeee, you get a floating popup: é è ê ë ě … This accent picker is useful if you type in French or Portuguese. If you write code, navigate in Vim, or play games with keyboard movement, it's the most frustrating default on the system. Here's how to turn it off.
Why this blocks key repeat
macOS uses the hold gesture to decide whether you want an accented variant or a repeated character. As long as ApplePressAndHoldEnabled is true, holding any eligible key freezes after the first character and waits for you to pick an accent or press a number. Key repeat never fires. The Key Repeat settings you've tuned in System Settings have no effect on those keys — the accent system intercepts the hold event first.
This affects most vowels and a handful of consonants (n, c, s, and a few others). Letters without accent variants (like k or d) repeat normally regardless.
There's no GUI for this
Unlike key repeat rate or function key behavior, Apple doesn't expose ApplePressAndHoldEnabled anywhere in System Settings. Terminal is the only way — which is why so many Vim users and developers are surprised when their repeat settings appear to work for some keys but not others.
Disable it system-wide
Open Terminal (Applications → Utilities) and run:
# disable the accent picker — keys will repeat instead
defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false
Log out and back in (or restart) for the change to apply everywhere. Some apps — especially Electron apps and native text editors — will pick it up immediately after a quit-and-reopen without a full logout.
Mainspring turns this exact setting — and 90+ others macOS buries in Terminal — into a single labelled toggle. Flip Disable press-and-hold accent menu on, and flip it back just as fast. No commands to memorize, nothing permanent.
Try Mainspring free →Signed & notarized by Apple · 1-day free trial · $29 once
Undo it — restore the accent picker
If you need the accents back:
# re-enable the accent picker
defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool true
Or delete the key entirely to let macOS fall back to the system default (which is true):
# remove the override — macOS default (accent picker on) applies
defaults delete NSGlobalDomain ApplePressAndHoldEnabled
Log out and back in after either command.
Disable it for one app only
You can scope the setting to a specific application using its bundle identifier instead of NSGlobalDomain. This is useful if you want repeating keys in VS Code but accents everywhere else, for example.
# disable accent picker in VS Code only
defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false
# disable in Xcode only
defaults write com.apple.dt.Xcode ApplePressAndHoldEnabled -bool false
# disable in a specific terminal emulator (iTerm2)
defaults write com.googlecode.iterm2 ApplePressAndHoldEnabled -bool false
Replace the bundle identifier with the app you want to target. To find a bundle ID, run:
# find bundle ID from app name — example: "Safari"
osascript -e 'id of app "Safari"'
Per-app settings take precedence over the global setting — so if you've disabled it globally but want one specific app to still show accents, set that app's value to true.
Why Vim users hit this first
In Vim and Neovim, movement in normal mode relies on holding j or k to scroll through a file, or h/l to move across a line. Holding j doesn't trigger the accent menu (no accented j variants exist), so movement down works fine. But Vim users who hold e to move to the end of the next word, or b in some configurations, hit the picker immediately. The fix is the same regardless of which app exposed the problem.
Games that use WASD or arrow keys usually don't trigger the accent menu either, since w, a, s, and d have no accented variants in the default English keyboard layout. But games that use e for interact (very common) will stall on the first held press.
Check your current setting
# prints true (accent picker on) or false (key repeat on)
defaults read NSGlobalDomain ApplePressAndHoldEnabled 2>/dev/null || echo "not set (default: true)"