Oh My Zsh로 터미널 생산성 높이기
터미널에서 작업하다 보면 반복적으로 입력하는 명령어가 참 많습니다.
git status를 하루에 몇 번이나 치는지, cd ../../../ 같은 긴 경로 이동을 얼마나 자주 하는지 세어 보면 놀라울 정도인데요.
이런 반복 작업을 줄여주는 도구가 바로 Oh My Zsh입니다.
Oh My Zsh는 Zsh 쉘의 설정을 관리해주는 오픈 소스 프레임워크입니다. 300개가 넘는 플러그인과 150개 이상의 테마를 제공하고, 커뮤니티가 활발하게 관리하고 있어서 전 세계 개발자가 가장 많이 쓰는 Zsh 프레임워크이기도 합니다. 이 글에서는 Oh My Zsh를 설치하고 자주 쓰는 플러그인과 테마를 설정하는 방법을 알아보겠습니다.
Zsh이란?
Oh My Zsh를 이야기하기 전에 Zsh에 대해 먼저 짚고 넘어가야 합니다.
Zsh(Z Shell)는 Bash의 기능을 대부분 포함하면서 편의 기능을 더 많이 제공하는 쉘입니다. macOS에서는 Catalina(10.15) 버전부터 기본 쉘이 Bash에서 Zsh로 바뀌었기 때문에 Mac을 쓰고 계신다면 이미 Zsh를 사용하고 있을 가능성이 높습니다.
현재 사용 중인 쉘을 확인하려면 다음 명령어를 실행하면 됩니다.
echo $SHELL
/bin/zsh
결과가 /bin/zsh라면 이미 Zsh를 쓰고 있는 겁니다.
만약 /bin/bash로 나온다면 Zsh를 설치하고 기본 쉘을 변경해야 합니다.
macOS에서는 이미 Zsh가 설치되어 있을 테니 기본 쉘만 변경하면 됩니다.
chsh -s $(which zsh)
Ubuntu 같은 Linux 배포판에서는 먼저 Zsh를 설치한 다음에 기본 쉘을 변경합니다.
sudo apt install zsh
chsh -s $(which zsh)
변경 후 터미널을 다시 열면 Zsh가 적용됩니다.
Oh My Zsh 설치하기
Zsh가 준비되었다면 Oh My Zsh를 설치할 차례입니다.
curl이나 wget 중 편한 걸 골라서 설치 스크립트를 실행하면 됩니다.
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
또는 wget을 사용할 수도 있습니다.
sh -c "$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
설치가 완료되면 터미널에 Oh My Zsh 로고가 표시되고 프롬프트가 바뀐 것을 볼 수 있습니다.
설치 과정에서 기존 ~/.zshrc 파일이 있었다면 ~/.zshrc.pre-oh-my-zsh로 백업해주기 때문에 걱정하지 않아도 됩니다.
Oh My Zsh는 ~/.oh-my-zsh 디렉터리에 설치되고, 모든 설정은 ~/.zshrc 파일에서 관리합니다.
설정 파일 구조
~/.zshrc 파일을 열어보면 Oh My Zsh가 자동으로 생성한 기본 설정을 확인할 수 있습니다.
# Oh My Zsh 설치 경로
export ZSH="$HOME/.oh-my-zsh"
# 테마 설정
ZSH_THEME="robbyrussell"
# 플러그인 목록
plugins=(git)
# Oh My Zsh 로드
source $ZSH/oh-my-zsh.sh
핵심적인 설정은 세 가지입니다.
ZSH_THEME으로 프롬프트 테마를 지정하고, plugins에 사용할 플러그인을 나열하고, 마지막에 source 명령으로 Oh My Zsh를 로드하는 거죠.
이 파일을 수정한 뒤에는 터미널을 다시 열거나 source ~/.zshrc를 실행해야 변경 사항이 적용됩니다.
테마 설정하기
Oh My Zsh의 기본 테마는 robbyrussell입니다.
현재 디렉터리와 Git 브랜치를 간결하게 보여주는 테마인데요, 이것만으로도 기본 Zsh 프롬프트보다 훨씬 유용합니다.
다른 테마를 사용하고 싶다면 ~/.zshrc에서 ZSH_THEME 값을 바꿔주면 됩니다.
ZSH_THEME="agnoster"
인기 있는 테마 몇 가지를 소개하겠습니다.
robbyrussell은 기본 테마로 가볍고 깔끔합니다. 화살표 아이콘과 함께 디렉터리, Git 브랜치를 한 줄로 보여줍니다.
agnoster는 Powerline 스타일의 테마로 좀 더 시각적인 정보를 제공합니다. 사용자 이름, 호스트, 디렉터리, Git 상태가 색상 배경으로 구분되어 나타납니다. 이 테마를 제대로 쓰려면 Powerline 호환 폰트가 필요합니다.
avit은 깔끔한 두 줄 프롬프트입니다. 첫 줄에 경로와 Git 정보를 보여주고 둘째 줄에 명령어를 입력하는 구조여서 긴 경로에서도 입력 공간이 넉넉합니다.
refined는 이름 그대로 군더더기 없이 정제된 테마입니다. 디렉터리와 Git 브랜치만 표시해서 깔끔한 걸 좋아하는 분에게 잘 맞습니다.
어떤 테마가 있는지 전부 보고 싶다면 Oh My Zsh 테마 위키에서 스크린샷과 함께 확인할 수 있습니다.
매번 같은 테마가 지루하다면 랜덤 테마를 써볼 수도 있습니다.
ZSH_THEME="random"
이렇게 설정하면 터미널을 열 때마다 다른 테마가 적용되는데, 마음에 드는 테마를 발견하면 echo $RANDOM_THEME 명령으로 현재 테마 이름을 확인할 수 있습니다.
참고로 좀 더 고급 프롬프트 커스터마이징을 원한다면 Starship이나 Powerlevel10k 같은 전용 프롬프트 도구를 사용하는 것도 좋은 선택입니다. Oh My Zsh와 함께 사용할 수 있어요.
기본 제공 플러그인
Oh My Zsh의 진짜 힘은 플러그인에서 나옵니다.
~/.zshrc의 plugins 배열에 이름만 추가하면 바로 사용할 수 있는 내장 플러그인이 300개 넘게 있습니다.
plugins=(git z extract web-search sudo history)
플러그인 이름을 공백으로 구분해서 나열하면 됩니다. 쉼표를 쓰면 안 되니까 주의하세요.
자주 쓰이는 기본 제공 플러그인을 살펴보겠습니다.
git 플러그인
Oh My Zsh를 설치하면 기본으로 활성화되어 있는 플러그인입니다. Git 명령어에 대한 별칭(alias)을 대량으로 제공해서 타이핑을 크게 줄여줍니다.
gst # git status
ga # git add
gcmsg # git commit -m
gp # git push
gl # git pull
gco # git checkout
gcb # git checkout -b
gd # git diff
glog # git log --oneline --decorate --graph
별칭이 너무 많아서 다 외울 필요는 없고, 자주 쓰는 것만 익혀두면 됩니다.
전체 별칭 목록은 터미널에서 alias | grep git을 실행하면 확인할 수 있습니다.
z 플러그인
z는 자주 방문하는 디렉터리를 기억해서 빠르게 이동할 수 있게 해주는 플러그인입니다.
cd 명령어로 디렉터리를 방문할 때마다 그 경로가 데이터베이스에 저장되고, 나중에 경로의 일부만 입력해도 알아서 매칭해줍니다.
# 전체 경로를 일일이 입력하는 대신
cd ~/projects/company/frontend/my-app
# 이렇게 짧게 입력하면 됩니다
z my-app
처음에는 디렉터리를 몇 번 방문해야 데이터가 쌓이지만, 며칠 정도 쓰다 보면 거의 모든 작업 디렉터리를 2~3글자로 이동할 수 있게 됩니다. cd를 거의 안 쓰게 될 정도로 편해요.
extract 플러그인
다양한 압축 파일을 extract 명령어 하나로 풀어주는 플러그인입니다.
tar xvf인지 unzip인지 gunzip인지 매번 기억할 필요 없이 그냥 extract를 쓰면 됩니다.
extract archive.tar.gz
extract file.zip
extract package.tar.bz2
extract data.7z
tar, zip, gz, bz2, 7z, rar 등 거의 모든 압축 포맷을 지원합니다.
web-search 플러그인
터미널에서 바로 웹 검색을 할 수 있는 플러그인입니다. 명령어를 입력하면 기본 브라우저에서 검색 결과가 열립니다.
google zsh completion not working
github ohmyzsh plugins
stackoverflow python virtual environment
코딩하다가 뭔가 검색하고 싶을 때 브라우저를 직접 열어서 검색창에 타이핑할 필요 없이 터미널에서 바로 검색할 수 있어서 흐름이 끊기지 않습니다.
sudo 플러그인
방금 입력한 명령어 앞에 sudo를 붙여야 할 때가 있잖아요?
이 플러그인을 활성화하면 ESC 키를 두 번 누르는 것만으로 현재 명령어 앞에 sudo가 자동으로 추가됩니다.
# apt install vim 입력 후 권한 오류가 났다면
# ESC를 두 번 누르면 자동으로 이렇게 바뀝니다
sudo apt install vim
이미 명령어를 다 쳤는데 sudo를 빠뜨렸을 때 처음부터 다시 치지 않아도 돼서 은근히 많이 씁니다.
history 플러그인
명령어 히스토리를 편리하게 검색하고 관리할 수 있는 플러그인입니다.
h # history (히스토리 목록 출력)
hs # history | grep (히스토리에서 검색)
hsi # history | grep -i (대소문자 구분 없이 검색)
hs docker라고 입력하면 이전에 실행했던 Docker 관련 명령어를 전부 찾아줍니다.
지난주에 썼던 복잡한 명령어가 기억나지 않을 때 유용합니다.
외부 플러그인 설치하기
기본 제공 플러그인만으로도 충분히 유용하지만, 커뮤니티에서 만든 외부 플러그인도 설치할 수 있습니다.
외부 플러그인은 ~/.oh-my-zsh/custom/plugins/ 디렉터리에 클론해서 사용합니다.
그 중에서 거의 필수라고 할 수 있는 두 가지 플러그인이 있습니다.
zsh-autosuggestions
이전에 입력했던 명령어를 기반으로 자동 제안을 해주는 플러그인입니다. 명령어를 타이핑하면 회색 글씨로 나머지 부분을 미리 보여주고, 오른쪽 화살표 키를 누르면 자동 완성됩니다.
먼저 플러그인을 클론합니다.
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
그다음 ~/.zshrc의 plugins에 추가합니다.
plugins=(git z zsh-autosuggestions)
이 플러그인을 한번 써보면 없이는 못 살게 됩니다. 긴 명령어나 경로를 반복해서 입력할 일이 확 줄어들거든요. 타이핑 도중에 제안이 맞으면 → 키를 한 번 누르면 되고, 단어 단위로만 채우고 싶으면 Ctrl+→를 누르면 됩니다.
zsh-syntax-highlighting
명령어를 입력할 때 실시간으로 구문 강조를 해주는 플러그인입니다. 유효한 명령어는 초록색으로, 잘못된 명령어는 빨간색으로 표시되기 때문에 Enter를 누르기 전에 오타나 잘못된 명령어를 미리 알 수 있습니다.
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
plugins=(git z zsh-autosuggestions zsh-syntax-highlighting)
명령어뿐만 아니라 경로, 옵션, 따옴표 같은 요소도 각각 다른 색으로 표시해줍니다.
zsh-autosuggestions와 함께 쓰면 터미널에서의 타이핑 경험이 눈에 띄게 좋아집니다.
별칭(Alias) 직접 만들기
Oh My Zsh 플러그인이 제공하는 별칭 외에도 자주 쓰는 명령어에 대해 직접 별칭을 만들 수 있습니다.
~/.zshrc 파일 맨 아래에 추가하면 됩니다.
# 자주 쓰는 디렉터리 이동
alias proj="cd ~/projects"
alias dl="cd ~/Downloads"
alias dt="cd ~/Desktop"
# 자주 쓰는 명령어 단축
alias ll="ls -alF"
alias cls="clear"
# 개발 서버 실행
alias dev="bun run dev"
alias build="bun run build"
alias test="bun run test"
별칭은 단순한 명령어 단축 외에도 기본 옵션을 바꾸는 데 활용할 수 있습니다.
# ls에 색상과 분류 표시 기본 적용
alias ls="ls --color=auto -F"
# 실수 방지를 위해 확인 옵션 추가
alias rm="rm -i"
alias mv="mv -i"
alias cp="cp -i"
rm, mv, cp에 -i 옵션을 기본으로 붙여두면 파일을 삭제하거나 덮어쓰기 전에 확인을 요청해서 실수를 방지할 수 있습니다.
현재 설정된 별칭을 확인하려면 alias 명령어를 실행하면 됩니다.
# 전체 별칭 목록
alias
# 특정 키워드로 필터링
alias | grep git
유용한 Zsh 기능
Oh My Zsh를 설치하면 Zsh의 강력한 기능이 기본으로 활성화됩니다. 따로 설정하지 않아도 바로 쓸 수 있는 것 몇 가지를 소개할게요.
탭 자동 완성이 Bash보다 훨씬 강력합니다. 명령어, 파일 경로, 옵션, 심지어 Git 브랜치 이름까지 탭 키로 완성할 수 있습니다. 탭을 누르면 가능한 후보 목록이 나오고, 한 번 더 누르면 목록 사이를 이동하며 선택할 수 있습니다.
경로 입력 시 대소문자 구분 없는 자동 완성도 지원합니다. cd doc을 입력하고 탭을 누르면 Documents로 자동 완성되죠.
디렉터리 이동도 편리합니다. cd 없이 디렉터리 이름만 입력해도 바로 이동할 수 있고, ..을 입력하면 상위 디렉터리로 올라갑니다.
# cd 없이 디렉터리 이동
~/projects
# 상위 디렉터리로 이동
.. # cd ..
... # cd ../..
.... # cd ../../..
...이 cd ../..과 같다는 게 단순하지만 꽤 시간을 절약해줍니다.
명령어 히스토리를 공유하는 기능도 있습니다. 여러 터미널 탭을 열어 놓고 작업하더라도 한쪽에서 입력한 명령어를 다른 탭에서도 히스토리로 검색할 수 있습니다.
Oh My Zsh 업데이트하기
Oh My Zsh는 기본적으로 2주마다 업데이트를 확인하고 물어봅니다. 자동 업데이트를 설정하거나 수동으로 업데이트하는 것도 가능합니다.
# 자동 업데이트 (물어보지 않고 바로 업데이트)
zstyle ':omz:update' mode auto
# 업데이트 알림만 표시 (직접 실행은 수동으로)
zstyle ':omz:update' mode reminder
# 자동 업데이트 비활성화
zstyle ':omz:update' mode disabled
수동으로 업데이트하고 싶다면 다음 명령어를 실행하면 됩니다.
omz update
추천 설정 조합
지금까지 살펴본 내용을 종합해서 실용적인 ~/.zshrc 설정을 구성해 보겠습니다.
export ZSH="$HOME/.oh-my-zsh"
# 테마
ZSH_THEME="robbyrussell"
# 자동 업데이트
zstyle ':omz:update' mode auto
# 플러그인
plugins=(
git
z
extract
sudo
history
web-search
zsh-autosuggestions
zsh-syntax-highlighting
)
source $ZSH/oh-my-zsh.sh
# 별칭
alias ll="ls -alF"
alias dev="bun run dev"
alias build="bun run build"
이 정도면 일상적인 터미널 작업을 훨씬 효율적으로 할 수 있습니다.
외부 플러그인인 zsh-autosuggestions와 zsh-syntax-highlighting은 별도로 설치해야 한다는 점만 잊지 마세요.
마치며
Oh My Zsh를 사용하면 기본 Zsh에 비해 터미널 작업이 확실히 편해집니다.
Git 별칭으로 타이핑을 줄이고 z로 디렉터리를 빠르게 이동하는 것만으로도 체감이 확 달라지거든요. 여기에 자동 제안과 구문 강조까지 더하면 실수도 줄어들고요.
처음에는 기본 테마에 git, z, zsh-autosuggestions, zsh-syntax-highlighting 네 가지 플러그인으로 시작해 보세요. 쓰다 보면 자기 워크플로우에 맞는 별칭과 플러그인을 하나씩 추가하게 될 겁니다.
프롬프트를 좀 더 예쁘게 꾸미고 싶다면 Starship으로 터미널 프롬프트 꾸미기도 한번 읽어보세요. Oh My Zsh와 같이 쓸 수 있어요.
Oh My Zsh 공식 저장소와 플러그인 목록 위키에서 더 많은 플러그인을 둘러볼 수 있으니 참고해보세요.
This work is licensed under
CC BY 4.0