IDE별 터미널 히스토리 분리
꼬여버린 터미널 히스토리, 범인은 ‘공유’
맥북에서 여러 개의 IDE를 띄워놓고 작업하다 보면 짜증 나는 순간이 있다. A 프로젝트(VS Code)에서 방금 입력한 복잡한 명령어를 B 프로젝트(Cursor)에서 다시 쓰려고 위쪽 화살표(↑)를 눌렀는데, 전혀 엉뚱한 명령어가 튀어나올 때다.
원인을 찾아보니 간단했다. 모든 IDE의 터미널이 같은 히스토리 파일(~/.zsh_history)을 공유하고 있었기 때문이다. 해결책은 명확하다. 각 IDE별로 독립된 히스토리 파일을 만들어 주는 것.
왜 ‘TERM_PROGRAM’만으로는 부족할까?
처음에는 echo $TERM_PROGRAM으로 분기 처리를 하려고 했다. 하지만 문제가 있었다. 내가 쓰는 VS Code, Cursor, Antigravity 모두 이 환경 변수값이 vscode로 동일하게 떴다. 뿌리가 같다 보니 겉모습만 봐서는 구분이 안 되는 셈이다.
그래서 각 IDE가 가진 고유의 식별 코드(환경 변수나 Bundle Identifier)를 활용해 히스토리를 강제로 찢어놓는 스크립트를 짰다. Gemini 3.1의 도움을 받아 완성한 이 스크립트를 ~/.zsh_rc 맨 끝에 붙여넣어 해결했다.
해결 방법: ~/.zshrc 설정
아래 스크립트는 IDE별로 전용 디렉토리에 히스토리를 따로 저장하도록 유도한다. (VSCode, Cursor, Antigravity, Iterm2, Apple Terminal 각기 따로 저장)
# ------------------------------------------------------------------------------
# IDE별 ZSH 히스토리 분리 설정 (Cursor, Antigravity, VSCode)
# ------------------------------------------------------------------------------
# 1. 히스토리 저장 디렉토리 생성
[[ -d "$HOME/.zsh_history.d" ]] || mkdir -p "$HOME/.zsh_history.d"
# 2. 프로그램 식별 및 HISTFILE 경로 설정
if [[ "$TERM_PROGRAM" == "vscode" ]]; then
if [[ -n "$CURSOR_TRACE_ID" ]]; then
# Cursor 식별
HISTFILE="$HOME/.zsh_history.d/cursor.zsh_history"
elif [[ "$__CFBundleIdentifier" == "com.google.antigravity" || -n "$ANTIGRAVITY_CLI_ALIAS" ]]; then
# Antigravity 식별
HISTFILE="$HOME/.zsh_history.d/antigravity.zsh_history"
elif [[ "$__CFBundleIdentifier" == "com.microsoft.VSCode" ]]; then
# 순정 VSCode 식별
HISTFILE="$HOME/.zsh_history.d/vscode.zsh_history"
else
HISTFILE="$HOME/.zsh_history.d/vscode_other.zsh_history"
fi
else
# 일반 터미널 세분화
if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]]; then
HISTFILE="$HOME/.zsh_history.d/apple_terminal.zsh_history"
elif [[ "$__CFBundleIdentifier" == "com.googlecode.iterm2" || -n "$ITERM_SESSION_ID" ]]; then
HISTFILE="$HOME/.zsh_history.d/iterm2.zsh_history"
else
# SSH 접속 등 기타 케이스
HISTFILE="$HOME/.zsh_history"
fi
fi
# 3. 히스토리 관련 최적화 옵션
HISTSIZE=50000 # 메모리에 저장할 명령어 수
SAVEHIST=50000 # 파일에 저장할 명령어 수
setopt APPEND_HISTORY # 세션 종료 시 파일 끝에 추가
setopt SHARE_HISTORY # 여러 창 간 히스토리 실시간 공유 (같은 IDE 내에서만)
setopt HIST_IGNORE_DUPS # 연속 중복 명령어 무시
setopt HIST_IGNORE_SPACE # 한 칸 띄우고 시작하는 명령어는 저장 안 함
setopt HIST_REDUCE_BLANKS # 불필요한 공백 제거
적용 결과 확인
설정을 마친 후 각 IDE의 터미널을 열어 아래 명령어를 입력해 보면, 각기 다른 경로의 히스토리 파일을 바라보고 있는 것을 확인할 수 있다.
Bash
> source ~/.zshrc
> echo $HISTFILE
# Antigravity의 경우: /Users/username/.zsh_history.d/antigravity.zsh_history
# Cursor의 경우: /Users/username/.zsh_history.d/cursor.zsh_history
이제 더 이상 A 프로젝트에서 쓰던 명령어가 B 프로젝트 터미널을 어지럽히지 않는다. 사소하지만 생산성 면에서는 꽤나 큰 쾌적함을 준다. 진작 분리해둘걸.