에이전트가 한창 파일을 고치는 중이었습니다. 화면에 뜬 로그를 복사하려고 Ctrl+C를 눌렀습니다. 복사는 안 됐고, 대신 하던 작업이 멈췄습니다.
CLI 에이전트를 두 개 이상 쓰고 계신다면 이런 일을 겪어보셨을 겁니다. 그래서 단축키 표를 찾아 외웁니다. 그런데 표를 봐도 또 헷갈립니다. 표가 부족해서가 아니라, 표가 답하지 않는 질문이 따로 있기 때문입니다 — “이 키는 누가 처리하는가.”
결론부터 말씀드리면: 조작은 두 개의 층에서 갈립니다
잠깐 크롬을 떠올려 보세요. 크롬 창이 있고, 그 안에 웹사이트가 열려 있습니다.
여기서 Ctrl+T를 누르면 새 탭이 열립니다. 새 탭을 열어준 것은 크롬이지, 보고 있던 웹사이트가 아닙니다. 반대로 사이트 안의 버튼을 누르면 그건 웹사이트가 처리합니다. 화면은 하나인데 주인이 둘인 셈입니다.
터미널도 똑같습니다. 터미널 창이 크롬이고, Claude Code나 Codex는 그 안에 열어둔 웹사이트입니다.
키를 누르면 바깥 층이 먼저 봅니다. 자기가 쓰는 키면 자기가 처리하고, 아니면 안쪽으로 넘깁니다. 그래서 같은 키라도 그때그때 다른 일이 벌어집니다.
| 무엇 | 누가 처리하나 | 도구를 바꾸면 |
|---|---|---|
| 복사 · 붙여넣기 · 드래그 선택 · 스크롤 · 탭 · 화면 분할 | 터미널 앱 (크롬 자리) | 안 바뀐다 |
| 줄바꿈 · 전송 · 중단 · 슬래시 명령 · 파일 참조 | CLI 에이전트 (웹사이트 자리) | 여기서 갈린다 |
이 구분 하나로 정리되는 게 있습니다. “Claude Code에서 복사는 어떻게 하지?”는 질문 자체가 성립하지 않습니다. Claude Code는 복사에 관여하지 않습니다. 답은 쓰고 계신 터미널 앱 쪽에 있고, 그 답은 Codex를 쓸 때도 똑같습니다.
반대로 줄바꿈이 안 되는 문제를 터미널 설정에서 찾으면 대부분 시간을 버립니다. 그건 에이전트가 가져가는 키입니다.
Ctrl+C — 같은 키, 여섯 가지 경우입니다
제일 자주 누르는 키이고, 그래서 사고도 여기서 제일 많이 납니다. 글 첫머리의 그 일도 이 키였습니다. 겹치는 층이 많아서 그렇습니다.
| 처리 주체 | 상황 | 결과 |
|---|---|---|
| 터미널 앱 | 마우스로 선택한 영역이 있을 때 | 복사 |
| Claude Code | 무언가 실행 중일 때 | 중단 |
| Claude Code | 유휴 상태에서 한 번 | 입력창 비우기 |
| Claude Code | 유휴 상태에서 한 번 더 | 종료 |
| Codex CLI | 무언가 실행 중일 때 | 중단 |
| Codex CLI | 유휴 상태에서 한 번 | 바로 종료 (확인 없음) |
Claude Code 공식 문서의 표현은 이렇습니다. “Interrupts a running operation. If nothing is running, the first press clears the prompt input and a second press exits Claude Code.” Codex 문서는 “Press Ctrl+C or run /exit to close the session”이라고만 말합니다.
먼저 Claude Code 쪽. 자주 도는 설명 하나를 짚고 넘어가겠습니다. “Ctrl+C는 취소일 뿐 Claude Code를 종료하지 않는다”는 설명이 한국어 자료에 꽤 있는데, 공식 문서 기준으로는 유휴 상태에서 두 번 누르면 종료됩니다. 실행 중일 때만 맞는 이야기입니다.
그리고 Codex에서 갈립니다. 같은 유휴 상태에서 Claude Code는 입력창만 비우고 한 번 더 눌러야 종료되지만, Codex는 그 한 번으로 끝납니다. 물어보지도 않습니다. 두 도구를 오가며 쓰다가 세션이 갑자기 사라진다면 대개 이 차이입니다.
이 항목은 곧 바뀔 가능성이 높습니다. Codex 소스에는 “ctrl + c again to quit”이라는 확인 문구와 그것을 그리는 코드가 이미 들어 있습니다. 다만
DOUBLE_PRESS_QUIT_SHORTCUT_ENABLED라는 상수가false라서 지금은 켜져 있지 않습니다 (codex-cli 0.146.1 기준). 이 값이 뒤집히는 순간 Codex도 두 번 눌러야 종료되고, 위 표의 마지막 줄은 틀린 정보가 됩니다.
그래서 실용적인 결론은 단순합니다. 복사는 Ctrl+Shift+C로 습관을 들이시면 이 사고가 나지 않습니다 — 선택 영역이 없을 때 Ctrl+C가 다른 일을 하는 경로를 아예 안 밟기 때문입니다. (터미널 앱마다 지원 여부가 다르니 쓰는 앱의 설정에서 한 번 확인해 두시는 게 좋습니다. 이건 에이전트가 아니라 터미널 앱의 영역입니다.)
줄바꿈 — 가장 유명한 차이인데, 사실 정답은 하나입니다
저는 Codex에서 Shift+Enter를 눌렀다가 줄바꿈이 아니라 그대로 전송돼버린 적이 있습니다. 반쯤 쓰다 만 문장이 그냥 날아갔습니다.
널리 퍼진 설명은 “Claude Code는 \ 치고 Enter, Codex는 Ctrl+J”입니다. 두 도구의 가장 큰 차이처럼 소개되곤 합니다.
그런데 Ctrl+J는 양쪽 다 됩니다. Claude Code 공식 문서의 multiline input 표에 Ctrl+J가 “Works in any terminal without configuration”으로 올라와 있습니다. 설정도 필요 없습니다.
정리하면 이렇습니다.
Ctrl+J— Claude Code, Codex 모두 가능합니다. 터미널 종류를 타지 않습니다. 하나만 외우신다면 이것입니다Shift+Enter— Claude Code 기준으로 iTerm2, WezTerm, Ghostty, Kitty, Warp, Apple Terminal, Windows Terminal에서는 설정 없이 됩니다/terminal-setup— VS Code, Cursor, Devin Desktop, Alacritty, Zed에서Shift+Enter를 쓰고 싶으실 때 한 번 실행하면 됩니다
세 번째 줄이 중요합니다. Windows Terminal을 쓰신다면 /terminal-setup은 애초에 필요 없습니다. “일단 /terminal-setup부터 실행하라”고 안내하는 글이 많은데, 터미널에 따라서는 안 해도 되는 절차입니다.
Esc Esc는 조건부로 동작합니다
“Esc를 두 번 누르면 되감기 메뉴”라고 알려져 있는데, 조건이 붙습니다. Claude Code 문서 기준으로 입력창에 글자가 있으면 그 입력을 지우고, 입력창이 비어 있을 때만 되감기 메뉴가 열립니다.
“어떨 땐 메뉴가 뜨고 어떨 땐 안 뜬다”의 정체가 이것입니다. 메뉴를 열고 싶으시면 입력창을 먼저 비우면 됩니다.
이 글의 표도 곧 낡습니다 — 그게 요점입니다
실제 사례가 있습니다. 2026년 4월 말부터 5월 초까지 열흘 사이, Codex 저장소에 Shift+Enter를 언급한 이슈가 19건 올라왔습니다. 그중 #20580은 중복으로 닫혔고(#20501·#20555가 같은 문제였습니다), TUI 키 처리를 손보는 PR #20798이 5월 4일 머지되면서 정리됐습니다. 앞에서 말한 제 경험도 이 종류의 문제입니다.
즉 단축키 표는 유통기한이 있는 정보입니다. 반면 “복사는 터미널 앱, 줄바꿈은 에이전트”라는 층 구분은 버전이 올라가도 그대로입니다. 외울 것과 그때그때 확인할 것을 나누면 이렇게 됩니다.
| 외운다 | 그때그때 확인한다 |
|---|---|
| 조작이 두 층에서 갈린다는 것 | 개별 단축키 |
Ctrl+J = 줄바꿈 (양쪽 공통) | 도구별 슬래시 명령 |
복사는 Ctrl+Shift+C | 터미널 앱 바인딩 |
확인하는 방법도 도구가 알려줍니다. Claude Code는 /help, Codex는 /keymap입니다. /keymap은 현재 바인딩을 보여줄 뿐 아니라 바꿀 수도 있습니다. 이 두 명령은 표가 낡아도 계속 맞습니다.
부록: 확인된 대비표
2026-08-06 기준입니다. 공식 문서 또는 해당 버전의 소스로 제가 직접 확인한 항목만 담았습니다.
| 하고 싶은 것 | Claude Code | Codex CLI |
|---|---|---|
| 줄바꿈 | Ctrl+J (모든 터미널) | Ctrl+J |
| 줄바꿈 (터미널이 지원하면) | Shift+Enter | — |
| 진행 중 작업 중단 | Esc, Ctrl+C | Esc, Ctrl+C |
| 이전 메시지 수정 | Esc Esc (입력창이 비었을 때) | Esc Esc |
| 일하는 중 다음 메시지 넣기 | 그냥 입력 | Tab (대기열) |
| 종료 | /exit, Ctrl+D, 유휴 시 Ctrl+C 두 번 | /exit, 유휴 시 Ctrl+C 한 번 |
| 현재 단축키 확인 | /help | /keymap |
확인 조건: Claude Code 2.1.223, codex-cli 0.146.1, Windows Terminal 1.24.11911.0, Windows 11 (2026-08-06 확인). 버전은 claude --version, codex --version으로 직접 확인했습니다. 동작은 각 사의 공식 문서를 근거로 했고, 문서가 답하지 않는 것(Codex의 Ctrl+C)은 설치본과 같은 릴리스 태그의 소스를 직접 읽었습니다.
출처
- Claude Code 공식 문서 — Interactive mode
- Codex CLI 공식 문서 — Developer commands
- Codex TUI 키 처리 수정 — openai/codex PR #20798
- 이슈 19건 집계 — openai/codex 이슈 검색 (제목·본문·댓글에서
Shift+Enter를 언급한 이슈 기준) - Codex의
Ctrl+C동작과 비활성 상수 — bottom_pane/mod.rs @ rust-v0.146.1 · chatwidget/interaction.rs @ rust-v0.146.1
다음 업데이트 기준: Claude Code 또는 codex-cli의 마이너 버전이 올라가면 위 표를 다시 확인합니다. 특히 DOUBLE_PRESS_QUIT_SHORTCUT_ENABLED가 true로 바뀌면 Ctrl+C 표가 곧바로 틀린 정보가 됩니다.