노트

zsh·oh-my-zsh 터미널 환경

Z Shell (zsh) and Oh My Zsh Setup

인프라#tooling · 연결된 개념 3개

쉽게 말하면

oh-my-zsh는 기본 셸을 꾸미는 인테리어 패키지 같아요. 테마와 플러그인만 골라 담으면 프롬프트에 git 상태가 뜨고, 이어질 명령을 미리 보여 주고, 틀린 명령은 빨갛게 표시해 줘요.

비유가 깨지는 곳 꾸밈을 많이 할수록 셸 시작이 느려져요. 또 cat을 bat으로 덮는 별칭은 스크립트 동작을 바꿀 수 있어 대화형 셸에서만 써요. .zshrc를 고치면 source ~/.zshrc로 다시 읽어요.

oh-my-zsh는 zsh의 설정(~/.zshrc)을 테마와 플러그인 단위로 관리하게 해 주는 프레임워크다. macOS는 zsh가 기본 셸이라 설치하자마자 쓸 수 있다.

자주 쓰는 구성

  • powerlevel10k 테마: 현재 디렉터리, git 상태, 가상환경 이름을 프롬프트에 보여준다. p10k configure로 마법사를 다시 돌릴 수 있다. 아이콘이 깨지면 터미널·에디터 폰트를 Nerd Font 계열로 바꾼다
  • zsh-autosuggestions: 히스토리에서 이어질 명령을 회색으로 미리 보여준다
  • zsh-syntax-highlighting: 잘못된 명령을 입력 중에 빨갛게 표시한다
  • git 플러그인: gst, gco 같은 git 별칭 묶음
# ~/.zshrc 일부
ZSH_THEME="powerlevel10k/powerlevel10k"
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
 
alias ls="lsd"   # 아이콘이 붙는 ls 대체
alias cat="bat"  # 문법 강조가 되는 cat 대체

외부 플러그인은 ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins 아래에 clone한 뒤 plugins에 이름을 넣는다. 고친 뒤에는 source ~/.zshrc로 다시 읽는다(환경변수 스코프와 source).

주의

  • 플러그인이 많을수록 셸 시작이 느려진다. powerlevel10k의 instant prompt가 이를 일부 가려준다
  • cat을 bat으로 덮어쓰면 스크립트에서 동작이 달라질 수 있어, 대화형 셸에서만 적용되게 한다
  • 디렉터리별 환경변수가 필요하면 direnv 훅(eval "$(direnv hook zsh)")을 붙인다

화면 분할은 tmux 기초, 편집기 키 바인딩은 IDE에서 Vim 쓰기과 함께 맞추면 손이 덜 바쁘다.

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 커밋 메시지와 원자적 커밋

    좋은 커밋은 한 가지 변경만 담고(원자적 커밋, atomic commit), 그 변경이 무엇이고 왜 필요했는지를 메시지로 설명한다. 히스토리는 나중의 나와 동료가 읽는 문서다.

  • Sass와 PostCSS

    둘 다 CSS를 변환하는 빌드 도구지만 출발점이 다르다. Sass(Syntactically Awesome Style Sheets)는 자기 언어(SCSS, Sassy CSS)를 CSS로 번역하는 전처리기(Preprocessor)이고, PostCSS는 표준 CSS를 받아 플러그인 체인으로 변환하는 도구다.

  • tsc --noEmit과 타입 검사 분리

    --noEmit은 tsc에게 타입 검사만 하고 JavaScript 파일은 만들지 말라고 하는 옵션이다. 오류가 있으면 0이 아닌 종료 코드로 실패하고, 없으면 조용히 끝난다.

  • macOS launchd로 상주 프로세스 띄우기

    launchd는 macOS의 서비스 관리자(service manager)다(리눅스의 systemd에 해당). ~/Library/LaunchAgents에 plist(property list)를 두면 로그인할 때 프로세스를 띄우고, 죽으면 다시 살린다.

  • tsconfig 핵심 옵션

    tsconfig.json은 TypeScript 컴파일러(tsc)에게 어떤 파일을, 어떤 규칙으로 검사하고, 무엇을 출력할지 알려 주는 프로젝트 설정 파일이다. tsc --init으로 만들고, 이 파일이 있으면 tsc만 쳐도 프로젝트 전체를 컴파일한다(-w는 감시 모드, watch mode).

보기 옵션