SSH 접속 시 zsh 탭 완성이 대소문자를 구분하는 문제 해결

SSH 접속 시 zsh 탭 완성이 대소문자를 구분하는 문제 해결

맥북에서는 cd d + Tab을 누르면 D로 시작하는 폴더도 함께 뜬다. 대소문자를 구분하지 않는다.

그런데 맥미니에 SSH로 접속하면 cd d + Tab 시 소문자 d로 시작하는 폴더만 나온다. 두 머신 모두 APFS(case-insensitive) 파일시스템인데 동작이 다르다.

원인

macOS의 zsh는 기본적으로 completion 시스템(compinit)이 자동 로드되지 않는다.

맥북은 Oh My Zsh 같은 프레임워크에서 compinit과 대소문자 무시 옵션이 이미 활성화되어 있었다. 맥미니는 최소 설정 상태라 completion 시스템 자체가 초기화되지 않은 것이 원인이다.

completion 시스템이 없으면 zstyle 설정을 넣어도 동작하지 않는다.

해결

~/.zshrc에 아래 두 줄을 추가한다.

autoload -Uz compinit && compinit
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
  • autoload -Uz compinit && compinit: zsh completion 시스템 초기화
  • zstyle ... matcher-list ...: 탭 완성 시 대소문자를 구분하지 않도록 설정

추가 후 source ~/.zshrc 또는 새 셸을 열면 적용된다.

참고

  • compinit은 zsh의 고급 탭 완성 기능 전체를 활성화하는 명령이다. 대소문자 외에도 다양한 completion 커스터마이징의 전제 조건이다.
  • bash에서는 ~/.inputrcset completion-ignore-case on으로 동일하게 해결할 수 있다.