exa : ls 대체재? 설치/설정.

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 라는 이름으로 복사한다.
  • 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 그런데 여기는 전역이고, 따라서 관리자 권한이 필요한 곳이다.

$HOME 쪽으로는 ~/.zfunc 라는 디렉토리를 만든 뒤 사용하라고 한다. 그리고 다음 작업이 필요하다.
~/.zshrc 를 열고, 맨 끝에 다음 내용을 추가한다.

fpath+=("$HOME/.zfunc")
autoload -Uz compinit
compinit

autoload, compinit 이 뜻하는 바를 정확하게는 모르겠다. 전에 zsh 공부할 때 슬쩍 보긴 했는데.. (일단은 그냥 시키는대로 하련다.) exa 쪽 설명으로는 fpath 추가만 있고, autoload 등은 없다. 이 내용은 다른 곳에서 가져왔다. zsh 만 사용한다면 exa 쪽에서 설명한대로만 해도 될 지 모르겠으나, oh-my-zsh 때문에 뭔가 오작동이 일어나는 모양이다.

man page 는 아직 최신 내용이 반영되지 않았다. 일례로, --octal-permissions 은 man page 에 없다. exa --help 에서 더 유용한 정보를 얻을 수 있다.

이제 설정 끝. 이젠 ls 대신 exa 를 열심히 사용해보기로 한다. alias 를 만들어두면 크게 헷갈리지는 않을 듯?

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.