sklass의 s-class 프로그래밍 blog

iTerm2 + zsh + oh my zsh 본문

shell

iTerm2 + zsh + oh my zsh

sklass 2021. 8. 18. 23:59

terminal을 편리하게 사용하기 위해서, iTerm2 + zsh + oh my zsh의 조합으로 많이 사용되며 각각 어떤점들이 좋은지 하나씩 확인해보겠습니다.

Z Shell (zsh)

zsh는 터미널 shell 환경을 위한 도구로, bash, ksh, tcsh의 일부 기능과 유용한 기능을 더한 shell입니다.
zsh를 쓰면 느낄 수 있는 장점은 아래와 같습니다.

  • tab을 이용한 자동완성 기능
  • 다양하고 이쁜 테마와 플러그인
  • 스펠링 체크
  • history 기능

zsh 설치하기

macos는 기본적으로 zsh가 설치되어 있습니다. 설치되어있지 않다면 아래와 같이 설치합니다.

$ brew install zsh

 

만약 설치가 되어있다면, 다음과 같이 zsh를 업데이트 해줍니다.

$ brew update $ brew upgrade zsh

 

업데이트 후 터미널을 재시작해서 새로운 버젼이 잘 설치되었는지 확인합니다.

$ zsh --version

기본 shell 변경하기

기본 shell을 변경하기 전, 현재 사용하고 있는 shell을 확인해보겠습니다.

$ echo $SHELL

 

macos에서 기본적으로 사용가능한 shell은 아래 명령어로 확인할 수 있습니다.

$ cat /etc/shells

 

위 명령어로 결과를 보면, /bin/zsh 라는 경로에 zsh가 이미 설치되어있는것을 확인 할 수 있는데요, 우리가 brew로 새롭게 설치한 최신 버젼의 zsh를 등록해줘야 합니다
아래 명령어로 현재 zsh 경로를 확인하고, /etc/shells 맨 마지막에 추가해줍니다.

$ which zsh $ echo `which zsh` | sudo tee -a /etc/shells

 

그런 다음, 아래 명령어로 기본 shell을 변경해줍니다.

$ chsh -s `which zsh`

 

만약 /eth/shells 에 zsh 경로를 등록해주지 않았다면, 아래와 같은 에러가 발생합니다.

chsh: /usr/local/bin/zsh: non-standard shell

 

Oh My Zsh

zsh 는 특히나 Oh my zsh를 이용해서 테마와 플러그인들을 적용하는 것이 유용합니다. zsh의 기능을 확장시켜주고 테마와 플러그인을 사용할 수 있도록 도와주는 것이 Oh my zsh 입니다

아래 명령어로 oh my zsh를 설치해줍니다.

$ sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

Syntax Highlight 적용

사용할 수 있는 명령어는 초록색으로, 잘못된 명령어는 빨간색으로 표시해주는 zsh 라이브러리다.
아래 명령어로 설치하면된다.

$ brew install zsh-syntax-highlighting

 

설치가 완료되면, /.zshrc 에 추가해주어서 터미널이 실행될 때마다 적용할 수 있게 설정한다.

$ echo source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh | tee -a ~/.zshrc

만약 아래와 같은 에러가 뜬다면,

source: no such file or directory: /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

~/.zshrc에 마지막 라인에 추가해 주었던 source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh를 지우고 아래의 명령어로 소싱(sourcing) 경로를 변경해준다.

$ echo export ZSH_HIGHLIGHT_HIGHLIGHTERS_DIR=/opt/homebrew/share/zsh-syntax-highlighting/highlighters | tee -a ~/.zshrc

iTerm2

iTerm2는 기본 터미널에 더 많은 기능을 확장한 무료 어플리케이션으로, 다양한 단축키를 제공함으로써 보다 편리한 터미널 사용이 가능케합니다.

사용 가능한 단축키는 아래와 같습니다.

  • 클립보드 이력보기
    • Command + Shift + h
  • 창 세로 분할
    • Command + d
  • 창 가로 분할
    • Command + Shift + d
  • 화면 포커스 이동
    • Command + [ 또는 ]
  • 현재 포커스 찾기
    • Command + /

Customize iTerm2

iTerm2는 여러 customization를 제공하고 있습니다. 아래에서 어떤 customization들이 있는지 보고, 원하는 customization을 골라 적용해보세요.

Color Theme 적용

우선 ~/util 이라는 폴더를 만들고, snazzy라는 color theme을 util 폴더에 다운받습니다.

$ brew install curl 
$ mkdir util && cd util 
$ curl -LO https://raw.githubusercontent.com/mbadolato/iTerm2-Color-Schemes/master/schemes/Snazzy.itermcolors

이제 iterm preferences를 열어서 profiles -> colors를 들어갑니다. (또는 단축키 ⌘ + ,)

iTerm2 Prerference


그리고 우측 하단에 color presets를 누른 후 import를 선택하여서 방금 전에 다운받은 snazzy 테마를 설정해줍니다.

Snazzy 선택

Theme 변경

이번엔 iTerm2의 터미널 테마를 변경하도록 하겠습니다. 여기서 사용할 테마는 agonster라는 테마로 현재 checkout중인 branch를 쉽게 알 수 있는 테마입니다.
iTerm2에서 vi ~/.zshrc 를 이용해서 .zshrc를 열고, ZSH_THEME 이라는 항목을 찾은뒤, 해당 항목의 값을 agnoster 로 바꾸세요.

ZSH_THEME="agnoster"

 

Font 변경

agnoster를 theme으로 변경 후, font를 변경해 주어야, 모든 text를 표현하는데 지장이 없습니다.

 

기본 font에서 text 표현에 지장이 없는 font로는 MesloLGS NF가 있는데, 다운을 받고 싶다면 아래와 같이 font를 다운로드 후에 font를 변경해주세요.

$ cd ~
$ git clone https://github.com/powerline/fonts
$ cd fonts && ./install.sh

font 변경

New Line 적용

터미널의 명령어가 길어지다 보면 화면을 벗어나는 경우가 있다. 이러한 경우 터미널 입력 어를 new line으로 입력함으로 불편을 해소할 수 있습니다.

New Line을 적용한 iTerm2

agnoster 테마를 설치한 기준으로 쉘에 아래의 명령어를 입력해줍니다.

$ vi ~/.oh-my-zsh/themes/agnoster.zsh-theme

그 후 아래를 내려가다가 build_prompt()를 찾습니다. 그리고 prompt_newline을 prompt_hg와 promt_end사이에 넣어줍니다.

prompt_newline 추가

그리고 코드의 제일 하단에 내려가서 prompt_newline() 에 대한 기능을 정의하는 코드를 입력해줍니다.

prompt_newline() {
  if [[ -n $CURRENT_BG ]]; then
    echo -n "%{%k%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR
%{%k%F{blue}%}$SEGMENT_SEPARATOR"
  else
    echo -n "%{%k%}"
  fi

  echo -n "%{%f%}"
  CURRENT_BG=''
}

Shell에 이모티콘 추가

Shell에 이모티콘을 추가한 모습

위의 이미지처럼 shell에 이모티콘을 추가하고 이모티콘 옆의 text까지 변경해보겠습니다.
우선 vi ~/.zshrc로 .zshrc를 열어주고 아래의 내용을 가장 하단에 추가해줍니다.

prompt_context() { 
  # Custom (Random emoji) 
  emojis=("⚡️" "🔥" "🇰" "👑" "😎" "🐸" "🐵" "🦄" "🌈" "🍻" "🚀" "💡" "🎉" "🔑" "🚦" "🌙")
  RAND_EMOJI_N=$(( $RANDOM % ${#emojis[@]} + 1)) 
  prompt_segment black default "Sukkwon On ${emojis[$RAND_EMOJI_N]} " 
}

Sukkwon On 이라고 써져있는 부분을 원하는 이름으로 변경하면, 해당 text가 이모지 옆에 뜹니다.

상태바 추가

Shell에 상태바를 추가한 모습

iTerm2 하단에 위와 같이 다양한 정보들을 출력시켜줄 수 있는 기능입니다.

  • 상태바 활성: Preferences > Profiles > Session > Status bar enabled
  • 상태바 위치 설정: Preferences > Appearance > Status bar location

상태바를 활성화하는 check box

커맨드 성공 여부 판단

바로 전에 실행되었던 커맨드의 exit code를 기준으로 커맨드가 성공했을때와 실패했을때를 구분해서 condtional하게 마지막에 print를 하고 싶다면 ~/.zshrc에서 PROMPT_COMMAND라는 항목의 값을 아래와 같이 주면 됩니다.

PROMPT_COMMAND='
if [[ "${?}" == "0" ]];then 
  echo "\n🚀⭐️🌈 Well Done! 🚀⭐️🌈"; 
else 
  echo "\n🧨 💣!!ERROR!! 🧨 "; 
fi'

precmd() {eval "$PROMPT_COMMAND"}

위의 코드에서 ${?}?는 바로 전에 실행되었던 커맨드의 상태(status)를 나타냅니다.
PROMPT_COMMAND의 경우, bash 에서만 사용 가능한 변수로, 만약 zsh를 사용하고 있다면, 위와 같이 {eval "$PROMPT_COMMAND"}를 끝에 추가해주어야 합니다.

PowerLevel10K

oh-my-zsh의 agnoster말고도 여러 테마들이 있지만 또 다른 유명한 테마로 powerlevel10k라는 테마가 있습니다.
아래 명령어로 powerlevel10k를 설치할 수 있습니다.
단, agnoster와 powerlevel10k 둘 중 하나의 테마만 사용가능합니다.

$ git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k $ echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>! ~/.zshrc

'shell' 카테고리의 다른 글

rsync  (0) 2021.10.12
linux tee 명령어  (0) 2021.09.04
Visual Studio Code에서 code 명령어 영구적으로 설정하는 법(MacOS)  (0) 2021.08.21
.bash_profile VS .zshrc  (0) 2021.08.21
Interactive Shell & Login Shell  (0) 2021.08.21