2026/04/20

MSYS2와 Zch 쉘 설치



Bash를 쓰다 요즘은 Zsh를 많이 쓴다고 해서 MSYS2를 설치하고 Zsh설치.

Zsh설치를 위해 MSYS2로 이전했는데 패키지 관리가 가능해 기능 추가가 수월한게 엄청 큰 장점. 최근 git 패키지에 iconv 실행파일이 빠져 단독 패키지를 구해 설치했는데 여기선 pacman으로 간단히 설치 가능.

따로 개발을 위한게 아니라 POSIX 호환 쉘 환경만 원한것이라 추가설치 없이 기본으로 설치된 MSYS환경이면 충분.

쉘은 Zsh를 설치하고 oh-my-zsh 프레임웍과 테마를 설치했는데 속도와 편의성의 트레이드 오프가 심해 삭제하고 순정 Zsh와 많이 쓰는 플러그인 2개만 추가 설치.

며칠 쓰며 체험해보니 cli환경에서 편의성은 월등하고 속도도 빨라 여기 정착하기로 함.



** MSYS2와 Zch설치

https://www.msys2.org에서 x86_64버전으로 다운로드
설치 완료 후 Run MSYS2 now 체크하고 Finish

MSYS2 터미널에서 초기 업데이트

pacman -Syu

pacman -Su

pacman -S base-devel git zsh wget w3m curl vim tree iconv


ucrt64 패키지(neovim,fzf,fd,ripgrep,bat)

pacman -S mingw-w64-ucrt-x86_64-neovim mingw-w64-ucrt-x86_64-fzf mingw-w64-ucrt-x86_64-fd mingw-w64-ucrt-x86_64-ripgrep mingw-w64-ucrt-x86_64-bat


홈 디렉토리 변경

vim /etc/nsswitch.conf

db_home: cygwin desc  >> db_home: windows


zsh 플러그인 설치

git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions


git clone https://github.com/zsh-users/zsh-syntax-highlighting ~/.zsh/zsh-syntax-highlighting


Windows Terminal 프로필 등록

            {

                "closeOnExit": "always",

                "colorScheme": "One Half Dark",

                "commandline": "C:\\msys64\\msys2_shell.cmd -defterm -here -no-start -ucrt64 -shell zsh",

                "font": 

                {

                    "face": "Sarasa Fixed K",

                    "size": 12,

                    "weight": "bold"

                },

                "guid": "{ 파워셀에서 [guid]::NewGuid()실행후 GUID 복사 }",

                "hidden": false,

                "historySize": 5000,

                "icon": "C:\\msys64\\msys2.ico",

                "name": "Zsh",

                "opacity": 85,

                "scrollbarState": "hidden",

                "snapOnInput": true,

                "startingDirectory": null

            }



~/.zshrc
# environment
export LANG=ko_KR.UTF-8
export EDITOR=vim

# prompt
if net session >/dev/null 2>&1; then
    PS1='%B%F{red}%n@%m:%~# %f%b'
else
    PS1='%B%F{green}%n@%m:%~%# %f%b'
fi

# completion
autoload -Uz compinit
compinit -u -C
zstyle ':completion:*' matcher-list 'm:{a-zA-Z-_}={A-Za-z_-}'
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
zstyle ':completion:*' menu select
zstyle ':completion:*' squeeze-slashes true
zstyle ':completion:*' special-dirs true
zstyle ':completion:*' fake-files '/:c m s t y z'

# autosuggestions
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8'
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh

# syntax-highlighting
source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

# fzf key bindings + completion
source /ucrt64/share/fzf/key-bindings.zsh

# history
HISTSIZE=5000
SAVEHIST=10000
HISTFILE=~/.zsh_history
setopt INC_APPEND_HISTORY HIST_IGNORE_DUPS HIST_IGNORE_ALL_DUPS \
       HIST_IGNORE_SPACE CORRECT AUTO_CD NO_BEEP

# vi mode + cursor
bindkey -v
bindkey -M viins 'jk' vi-cmd-mode
bindkey -M viins '^I' menu-complete
bindkey -M viins '^[[Z' reverse-menu-complete

function zle-keymap-select { [[ $KEYMAP == vicmd ]] && echo -ne '\e[2 q' || echo -ne '\e[5 q' }
function zle-line-init { echo -ne '\e[5 q' }
zle -N zle-keymap-select
zle -N zle-line-init

autoload -Uz edit-command-line
zle -N edit-command-line
bindkey -M vicmd 'v' edit-command-line

# aliases
alias ..='cd ..'
alias ...='cd ../..'
alias l='ls'
alias ll='ls -alF'
alias la='ls -A'
alias lsize='ls -lhS'
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias vim='/c/Program\ Files/Vim/vim92/vim'
alias v='/usr/bin/vim -c "20Lex" -c "wincmd w"'
alias mkdir='mkdir -pv'
alias du1='du -h --max-depth=1'
alias df='df -h'
alias free='free -h'

alias reload="source ~/.zshrc"
alias zconf="vim ~/.zshrc"
alias vconf="v ~/.vimrc ~/_vimrc"

# git aliases
alias gs='git status'
alias ga='git add'
alias gaa='git add --all'
alias gcm='git commit -m'
alias gcmm='git commit -m "backup: $(date +%y-%m-%d\ %H:%M:%S)"'
alias gca='git commit --amend'

alias gp='git push'
alias gpl='git pull'
alias gsw='git switch'



환경변수 Path:
c:\msys64\usr\bin
c:\msys64\ucrt64\bin


원격에서 로그인쉘 계정 지정하기:
C:\ProgramData\ssh\sshd_config에 아래 내용 추가

Match User 유저계정명
ForceCommand C:/msys64/usr/bin/zsh.exe -l