ls 를 쓰면서, 가장 불만은 Octal Permission 이 표시되지 않는다는 점이었다. 거기에, 가끔, 내가 원했던 결과가 나오지 않음에 당황할 때도 있었고..
이런 불평을 나만 하지는 않았을 터. 누군가는 용감하게도(또는 야심차게도?) 이 오래된 관습(?)을 바꿔보려 하고 있었다.
그 결과가 바로 exa
다.
그런데, 여기 저기 찾아봤지만, exa 가 뭘 뜻하는지는 나와있질 않다. exa 라는 단어가 이미 존재하고 있기에, 이 exa 만 찾아보기도 쉽지가 않다.
아무튼, 나름대로 인기를 얻어가고 있는 모양이다. 우분투 21.10 부터는 apt install
로 설치하게 됐으니 말이다.
PPA 는 있는지 모르겠고, 따라서 20.04 에선 손쉽게 설치할 순 없다.
다만, 이미 컴파일한 실행파일을 제작자 Github 에서 배포하고 있으므로, 그걸 받아다 쓰면 된다.
그럼 이걸로 이 글을 마치도록 하겠다…
였으면, 굳이 내가 이러고 있을 이유가 없지.
압축파일을 풀면, 디렉토리가 3개가 나오는데, 하나는 실행파일, 또 하나는 man page 용 파일.
그리고 나머지 하나가, 나로 하여금 이 글을 쓰게끔 만든, ‘completions‘ 파일이다.
여기선, zsh 와 oh-my-zsh 가 설치된 상황을 가정한다.
- bin/exa : ~/.local/bin 으로 복사한다. 이 디렉토리가 없다면 만든다.
completions/exa.zsh : $HOME/.zfunc/ 아래,_exa
라는 이름으로 복사한다.- completions/exa.zsh : 아래 내용 참고.
- man/exa* : ~/.local/share/man/man1 으로 복사한다.
~/.local/bin, ~/.local/share/man 관련한 내용은 왕짜증 문서 참고.
이 디렉토리들이 없어서 새로 만들었다면, 재로그인(또는 부팅)해야 제대로 작동한다.
그러나, 이렇게 해도, Zsh Completion 은 작동하지 않는다. 이게 뭐냐하면, 예를 들어 다음과 같이 명령을 입력하고자 한다고 하자.
$ exa --octal-permissions
저걸 손으로 하나씩 정성들여 치고 있을 순 없으니, --oc
정도 입력하고 TAB 키를 눌러 자동완성시키는게 인지상정. 바로 그 작업을 해주는게 ‘completions/exa.zsh’ 파일이다. 이 파일을 열면 상단부에 어떻게 하는지 설명이 나와있다.
fpath (이런 환경변수가 있다는 사실을 이번에 처음 알았다.) 로 설정된 곳에 _exa
로 이름을 바꿔서 복사하라고 돼 있다. 첫 후보는 /usr/local/share/zsh/site-functions
그런데 여기는 전역이고, 따라서 관리자 권한이 필요한 곳이다.
sudo cp _exa /usr/local/share/zsh/site-functions
$HOME 쪽으로는 ~/.zfunc 등 디렉토리를 만들고 fpath 에 추가하거나, 아니면 fpath 인 곳에 복사하라고 한다.
그리고 다음 작업이 필요하다고 하는데…
~/.zshrc 를 열고, 맨 끝에 다음 내용을 추가한다.
fpath+=("$HOME/.zfunc") autoload -Uz compinit compinit
autoload, compinit 이 뜻하는 바를 정확하게는 모르겠다. 전에 zsh 공부할 때 슬쩍 보긴 했는데.. (일단은 그냥 시키는대로 하련다.) exa 쪽 설명으로는 fpath 추가만 있고, autoload 등은 없다. zsh 만 사용한다면 exa 쪽에서 설명한대로만 해도 될 지 모르겠으나, oh-my-zsh 때문에 뭔가 오작동이 일어나는 모양이다.
헌데, zsh/oh-my-zsh 상황에선 저렇게했을 때 zsh 시동 시 시간이 꽤 걸리는 문제가 있다. 대신, 다음 방법이 먹힌다.
mkdir ~/.oh-my-zsh/completions cp _exa ~/.oh-my-zsh/completions
.zshrc
엔 아무 내용도 추가할 필요가 없다.
이 문제로 고생한 삽질기도 물론 있다.
삽질기에도 써놨지만, ssh 접속 시에 시간이 오래 걸리는 경우가 있다. 모두 그런 건 아닌데.. 특정 시스템에서만 그러는게 문제.
man page 는 아직 최신 내용이 반영되지 않았다. 일례로, --octal-permissions
은 man page 에 없다. exa --help
에서 더 유용한 정보를 얻을 수 있다.
이제 설정 끝. 이젠 ls 대신 exa 를 열심히 사용해보기로 한다. alias 를 만들어두면 크게 헷갈리지는 않을 듯?