Claude Code Terminal Setup Guide
Theme, multi-line input, notifications, paste limits, and vim mode across the terminals that matter.
How your terminal is configured decides how much time you actually save with Claude Code. The defaults run fine. They also leave a lot on the floor. Bad line break handling traps you inside one-line prompts. Missing notifications send you to the kitchen for coffee that gets cold while Claude waits. And if you have ever dropped a 200-line snippet and watched it come back half-eaten, the problem is already familiar.
Below is every setting worth touching. Theme matching, multi-line input, alerts, long paste handling, vim mode, and the quirks of the terminals real developers reach for.
Theme Matching
Your terminal owns its own colors. Claude Code cannot change that, and it does not try to. What it can do is line up its internal palette with whatever scheme your terminal is running on.
Inside Claude Code, run /config and pick the theme option. Syntax highlighting, status markers, and UI chrome all shift to sit cleanly on top of a light or dark background.
The same /config flow lets you set a custom status line. That strip sits at the bottom of the terminal and shows whatever context you want on hand. Model, working directory, git branch. No extra commands to check them.
One catch. If you flip between light and dark during the day, run /config again after each flip. The theme change does not get picked up on its own.
Multi-Line Input Methods
One-line prompts box you in. Anything with real detail, any code, any multi-step ask, reads better across several lines. Four paths get you there inside Claude Code.
Method 1: Backslash + Enter (Works Everywhere)
Type a \ and then press Enter. That drops you onto a new line. Every terminal on every operating system honors this, which makes it the fallback when nothing else has been set up.
It looks clunky. It also never fails. Lean on it when you are SSH'd into a box or poking around a terminal you do not control.
Method 2: Shift+Enter (Native Support)
Four terminals handle Shift+Enter right out of the box with zero setup:
- iTerm2
- WezTerm
- Ghostty
- Kitty
Running one of these means the key combo already works. Nothing to turn on. It feels the most natural of the four options because every chat window and text editor you use already behaves the same way.
Method 3: /terminal-setup (Auto-Configuration)
When a terminal does not know about Shift+Enter on its own, Claude Code can wire it up for you. Type /terminal-setup from inside Claude Code and the binding gets configured automatically.
The command knows how to handle:
- VS Code integrated terminal
- Alacritty
- Zed
- Warp
Worth knowing. The /terminal-setup command does not show up at all if you are already on a terminal with native support (iTerm2, WezTerm, Ghostty, Kitty). It only surfaces when there is a configuration job to do.
Restart your terminal once /terminal-setup finishes. The binding takes effect on the next launch.
Method 4: Option+Enter (Mac)
macOS offers Option+Enter as another line break key. Turning it on is a one-time tweak, and which menu you tweak depends on which terminal you use.
For Mac Terminal.app:
- Open Settings, then Profiles, then Keyboard
- Check "Use Option as Meta Key"
For iTerm2 and VS Code terminal:
- Open Settings, then Profiles, then Keys
- Under General, set Left/Right Option key to "Esc+"
Option+Enter pays off most if Option is already part of your modifier muscle memory. The upside is that Shift stays free for selecting text.
Notifications
A hard Claude Code task can sit for minutes. Without alerts, you either stare at the screen or walk off and forget to come back. Good notifications kill both problems.
iTerm2 System Notifications
iTerm2 ships with native macOS banners for long-running tasks:
- Open iTerm2 Preferences
- Navigate to Profiles, then Terminal
- Enable "Silence bell"
- Under Filter Alerts, enable "Send escape sequence-generated alerts"
- Set your preferred notification delay
Once that is on, macOS pops a banner whenever Claude finishes a slow job. The alerts fire even when iTerm2 is minimized or you have jumped to another app.
Worth noting. This path is iTerm2 only. The stock macOS Terminal.app does not offer it.
Custom Notification Hooks
For fancier alert logic, Claude Code takes custom notification hooks. You write your own code path that runs on a given event. Post to Slack. Ring a chime. Fire a webhook.
The hooks live inside the broader Claude Code hooks system. Wire them up to fire on task completion, on errors, or on any output pattern you care about.
Large Input Handling
Dropping a long code block or a giant spec straight into Claude Code ends badly. The paste buffer in most terminals has a ceiling, and hitting it turns your text into truncated mush.
Three rules for heavy input:
1. Don't paste straight in. Once you get past roughly 100 lines, save it to a file first. Then point Claude Code at that file and tell it to read.
2. Watch VS Code's terminal. The integrated terminal inside VS Code chops long pastes more aggressively than most. If VS Code is your main home, the file route is not optional. It is the only way anything past a short prompt gets through intact.
3. Split the ask. Rather than dropping an entire spec, carve it into chunks. Hand Claude Code one piece, check the output, then move on to the next.
Vim Mode
If your fingers already run on hjkl, Claude Code has you covered. There is a built-in vim mode that wires up a subset of the normal vim bindings inside the input area.
Turning Vim Mode On
Two ways to flip it:
- Type
/vimin Claude Code to flip vim mode on right away - Open
/configand switch vim mode on in settings (this one sticks across sessions)
Once on, you start out in NORMAL mode. The usual mode indicator shows up in the input area so you always know which mode you are sitting in.
Keybinding Reference
Mode Switching:
| Key | Action |
|---|---|
Esc | Switch to NORMAL mode |
i | Insert before cursor |
I | Insert at beginning of line |
a | Insert after cursor |
A | Insert at end of line |
o | Open new line below |
O | Open new line above |
Navigation:
| Key | Action |
|---|---|
h / j / k / l | Left / Down / Up / Right |
w | Jump to next word start |
e | Jump to next word end |
b | Jump to previous word start |
0 | Jump to line start |
$ | Jump to line end |
^ | Jump to first non-blank character |
gg | Jump to first line |
G | Jump to last line |
f<char> | Find next char on line |
F<char> | Find previous char on line |
t<char> | Move to before next char |
T<char> | Move to after previous char |
; | Repeat last f/F/t/T forward |
, | Repeat last f/F/t/T backward |
Editing:
| Key | Action |
|---|---|
x | Delete character under cursor |
dw | Delete to next word |
de | Delete to end of word |
db | Delete to beginning of word |
dd | Delete entire line |
D | Delete to end of line |
cw | Change to next word |
ce | Change to end of word |
cb | Change to beginning of word |
cc | Change entire line |
C | Change to end of line |
. | Repeat last edit command |
Yank and Paste:
| Key | Action |
|---|---|
yy / Y | Yank (copy) entire line |
yw | Yank to next word |
ye | Yank to end of word |
yb | Yank to beginning of word |
p | Paste after cursor |
P | Paste before cursor |
Text Objects (use with d, c, or y):
| Key | Selects |
|---|---|
iw / aw | Inner / around word |
iW / aW | Inner / around WORD |
i" / a" | Inner / around double quotes |
i' / a' | Inner / around single quotes |
i( / a( | Inner / around parentheses |
i[ / a[ | Inner / around brackets |
i{ / a{ | Inner / around braces |
Line Operations:
| Key | Action |
|---|---|
>> | Indent line |
<< | Outdent line |
J | Join current line with next |
When Vim Mode Pays Off
Vim mode earns its keep on long, multi-line prompts. When you are handing Claude Code a detailed brief with file paths, code snippets, and multi-step demands, vim-style jumps and edits shave off real minutes.
When to Skip It
Not already a vim user? Skip it. Claude Code's input box is not worth climbing that curve for on its own.
Terminal-Specific Tips
VS Code Integrated Terminal
- Run
/terminal-setupto wire up Shift+Enter for multi-line input - Watch the paste truncation on long inputs. Go file-based for anything past 100 lines
- The terminal shares resources with the editor. Lots of active extensions can make Claude Code feel sluggish
- Wire up Option+Enter by setting the Option key to "Esc+" in terminal settings
iTerm2
- Shift+Enter works natively. Nothing to set up
- Turn on system alerts through Profiles, then Terminal, then "Silence bell" for task completion banners
- Set the Option key to "Esc+" under Profiles, then Keys to get Option+Enter working
- The built-in tmux integration plays nicely with parallel Claude Code sessions
Warp
- Run
/terminal-setupto wire up Shift+Enter - Warp's block-based input can sometimes trip Claude Code's prompt detection. Flip to classic input mode if you hit trouble
Alacritty
- Run
/terminal-setupto wire up Shift+Enter - The GPU-accelerated rendering makes Alacritty one of the fastest terminals for Claude Code output
Ghostty
- Shift+Enter works natively
- Ghostty is still young but already plays well with Claude Code. Native macOS rendering and quick launches make it a solid pick for dedicated sessions
Kitty
- Shift+Enter works natively
- GPU rendering keeps Kitty smooth even on long Claude Code output
- A built-in multiplexer runs parallel sessions without needing tmux
Putting It All Together
A terminal that is properly set up for Claude Code has five pieces in place:
- Theme matched through
/configso highlighting reads well - Multi-line input routed through Shift+Enter or Option+Enter, whichever you prefer
- Notifications turned on so finished tasks get your attention
- Large input plan picked. File-based workflows for anything heavier than a short prompt
- Vim mode turned on if vim is already in your fingers
Get those five right. The terminal stops getting in your way and starts acting like the cockpit it should have been.
Stop configuring. Start building.
Claude Code Configuration
Set up Claude Code once so every session knows your stack, rules, and workflows. Three files, one hierarchy, done.
Claude Code Sandboxing
Turn on OS-enforced boundaries around Claude's bash tool. Covers Seatbelt on macOS, bubblewrap on Linux and WSL2, plus network proxy config.