Setup macOS shell environments

주영택·2021년 1월 31일
0

맥OS 의 가장 좋은 점은 미려하고 강력한 쉘 환경을 제공한다는 점입니다. 쉘 환경을 구축하는 과정을 기록하였습니다. 지난 문서에서 안내한 brew 셋업에 이어서 진행합니다.

최신 맥 OS 는 zsh 을 기본으로 탑재하여 oh-my-zsh 같은 다양한 쉘 환경 설정을 쉽게 제공합니다. 쉘 스크립트 기반의 다양한 플러그인은 커맨드라인 인터페이스를 더 편리하게 개선하여 생산성 향상의 중요한 요소로 작용합니다.

쉘에 대한 기본 개념을 잡기에 적당한 문서를 하나 준비하였습니다.

zsh setup

다양한 플러그인은 아래 링크에서 살펴 볼 수 있습니다.

처음 사용자라면 oh-my-zsh 같은 통합된 패키지를 사용하는 것도 좋습니다.

제가 사용하고 있는 구성은 go 언어로 만들어진 antibody 라는 zsh 플러그인 매니지먼트 시스템에 몇 가지 요소를 추가하여 구성하고 있습니다. 가능하면 적은 플러그인을 사용하기 위함입니다.

antibody

antibody 는 플러그인을 설치하고 업데이트 하는 역할을 합니다. 가이드에 설치하는 방법과 기본 사용법이 자세히 안내되어 있습니다. 다만 우리는 가능하면 brew 를 통해 설치하도록 하겠습니다.

$ brew info antibody
antibody: stable 6.1.1 (bottled)
Shell plugin manager
https://getantibody.github.io/
Not installed
...

설치해 봅시다.

$ brew install antibody

fzf

fzf 은 fuzzy finder 의 약자로 한 눈에 그 용도를 파악할 수 있습니다. 물론 다양한 활용 옵션이 있습니다.

$ brew install fzf

설치 후 나오는 설명에 따라 자동 완성 옵션과 키 바인드 옵션을 활성화 해 주겠습니다.

$ /usr/local/opt/fzf/install
Downloading bin/fzf ...
  - Already exists
  - Checking fzf executable ... 0.25.0
Do you want to enable fuzzy auto-completion? ([y]/n) 
Do you want to enable key bindings? ([y]/n) 
...

fzf 는 파일이나 디렉토리에 대해서도 어시스트 해 주지만 프로세스ID 나 ssh 호스트 이름 등에도 연계하여 사용할 수 있습니다.

그리고 fzf 가 설치되면 zsh-interactive-cd 같은 플러그인도 활성화 할 수 있습니다. 이 플러그인은 cd 수행시 zsh 의 어시스트 기능에 fzf 의 기능을 조합하여 더욱 고급 기능을 제공합니다.

이렇게 세팅된 환경을 운영하다 보면 사용한 폴더의 빈도를 기준으로 더 쉽게 다른 폴더로 이동할 수 있는 기능을 제공하는 유틸리티를 더 사용하게 됩니다.

zoxide

zoxide 는 이런 목적의 오래된 유틸리티인 fasd 또는 z 같은 스크립트의 현대화된 버전입니다.

$ brew install zoxide

설치하고 쉘에 등록하여 계속 사용하다 보면 이제 자주가는 폴더는 z 명령만으로 이동할 수 있습니다.

starship

Starship 은 powerline9k 나 10k 를 대체하는 프롬프트 유틸리티로 antibody 처럼 쉘 스크립트가 아닌 다른 프로그래밍 언어로 만들어진 네이티브 유틸리티 입니다. 멀티플랫폼 프로그램으로 윈도우즈 환경도 지원합니다.

설치해 봅시다.

$ brew install starship

세팅 방법은 공식 홈페이지의 문서를 통해 확인할 수 있습니다. 기존 제가 사용하던 Powerline10K 스타일까지 가꿔가는 과정은 추후 따로 진행해 보겠습니다. (완성되면 업데이트 하겠습니다.)

edit .zshrc

이제 .zshrc 파일을 수정할 단계입니다. 터미널에 제공되는 에디터가 익숙하지 않은 경우 MS VS Code 같은 애플리케이션을 설치해 두고 편집해주세요. VS Code 의 경우 터미널 환경에서 명령을 실행할 수 있도록 실행파일을 추가해 주는 기능을 제공합니다.

.zshrc 파일이 있는지 확인해 봅니다.

es@iMac ~ % ls -al
total 48
drwxr-xr-x+ 18 es    staff    576 Jan 30 14:20 .
drwxr-xr-x   5 root  admin    160 Jan 24 13:53 ..
drwx------   2 es    staff     64 Jan 30 13:16 .Trash
drwxr-xr-x   4 es    staff    128 Jan 24 18:26 .vscode
-rw-------   1 es    staff    260 Jan 30 14:00 .zsh_history
drwx------  20 es    staff    640 Jan 30 14:20 .zsh_sessions
drwx------+  6 es    staff    192 Jan 25 22:50 Desktop
...

없네요. 하나 만들어 봅시다.

$ code ~/.zshrc

몇몇 플러그인과 세팅 정보는 gist 에 저장해 두었으니 참고해 주세요.

설정을 마치고 새로운 창이나 탭을 통해 쉘 환경이 시작될 때 플러그인이 설치됩니다. 설치된 양에 따라 시간이 걸릴 수 있습니다.

# prepare shell environments
# brew install antibody fzf starship zoxide

# init antibody
source <(antibody init)
# init fzf
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
# init zoxide
eval "$(zoxide init zsh)"
# init starship
eval "$(starship init zsh)"
# install plugin
antibody bundle zsh-users/zsh-completions
antibody bundle zsh-users/zsh-history-substring-search
antibody bundle zsh-users/zsh-syntax-highlighting
antibody bundle changyuheng/zsh-interactive-cd
# ...

이렇게 시작하였고 필요에 따라 계속 업그레이드 하고 있습니다.

세팅된 값은 클라우드 드라이브에 업로드 하고 심볼릭 링크로 홈 폴더에 링크 해 두면 여러 PC 에서 사용할 수 있습니다.

$ la
...
lrwxr-xr-x    47 es 30 Jan 22:15 .zshrc -> /Users/es/Google Drive/config/zsh/dot.zshrc.zsh
...

Terminal 프로필

맥OS 의 기본 프로필은 너무 많고 특징도 별로 없어 두 세 개 정도의 세팅만 남기고 수정하여 사용 중 입니다.

기본 세팅과 추가로 제가 사용하는 프로필을 추가하여 Window Groups 에 등록하여 관리하고 있습니다.

터미널 시작시 모든 해당 윈도우 그룹을 열어두고 shell > startup > run command 를 사용하면 더 편한 터미널 환경을 구축할 수 있습니다.

폰트 세팅만 잘 맞춰 두면 될 듯 합니다.

iTerm2 세팅

맥OS 의 기본 터미널도 훌륭하지만 다양한 기능이 추가된 iTerm 을 메인으로 사용합니다. 글로벌 단축키부터 타이핑 어시스트, 브로드캐스팅 기능 등이 매우 유용합니다.

글로벌 호출 단축키

저는 아주 오랜 동안 터미널을 호출하는 키를 별도로 연동하여 사용하고 있습니다. 습관이 된지 10년이 넘었죠. 맥에서는 shift+esc 또는 option+backtick 을 주로 사용합니다. 해피해킹 키보드를 사용하고 있는 현재는 option+esc 를 눌러 터미널을 소환합니다. (카라바이너로 연계되어 option+backtick 으로 매핑됩니다.)

한글 파일 이름이 풀려 보이는 현상

유니코드 한글 조합 규칙에 따라 어떤 글자는 풀려 보이는 현상이 있습니다.

애매한 조합 규칙에 NFC 를 선택하여 해결합니다.

iTerm2 에서 한/영 전환시 빈칸 추가되는 현상

한/영 전환에 shift+space bar 를 사용하다 보면 일부 애플리케이션에서 빈칸이 입력되는 현상이 있습니다. 기본 터미널에서는 괜찮은데 iterm2 에서 이런 증상이 발생합니다.

iterm2 의 기능 중 remap 기능을 활용하여 이 현상을 방지할 수 있습니다.

상태 바 정보 추가

프로필 > 세션 > 상태바 설정을 통해 CPU, Network 등을 모니터링 할 수 있습니다.

그외 유용한 팁

  • 브로드캐스팅 기능
  • 타임스템프 표시 기능
  • 문자열 자동 완성 어시스트
  • 창 나누기
  • 전체 화면 전환

등의 기능을 확인해 보세요.

추천 프로그램들은 다음 포스트에 이어집니다.

profile
NodeJS 백엔드 웹 개발자입니다.

0개의 댓글