관련 내용 wikipedia : https://en.wikipedia.org/wiki/Text-based_user_interface
텍스트 기반 인터페이스를 지칭하며, 대표적인 예시 프로그램으로는 vim, tig, ranger 정도가 있다.
왜 TUI 환경인가?
나는 개인적으로 GUI 환경을 좋아하지 않는다. 이유는 여러가지가 있겠지만 제일 큰 것은 마우스의 사용이다. 물론 마우스가 훌륭한 장비이다. 사용자에게 친숙한 경험을 제공한다. 비숙련자도 숙련자와 큰 차이 없이 클릭으로 프로그램을 사용할 수 있게 해준다. 하지만 이는 역으로 생각해보면 아무리 숙련된다고 해도 비숙련자와 차이가 크게 나지 않는다는 걸 의미한다고 생각했다.
이에 대한 가장 흔한 해결책은 단축키를 적극적으로 활용한다가 있다. 여기서 나는 단축키를 모두 알고 있다는 가정 아래라면, 마우스 없이도 작업이 가능하지 않을까 생각했고, 이런 생각을 하다보니 어느샌가 TUI, CLI 환경에 도달하게 되었다.
정말 편한가?
항상 편하지는 않다. 모르는 command나 shortcut이 있을 때, 한없이 답답해진다. 이 빈도는 2시간당 1번 꼴 정도이다.
이 정도 빈도면 나쁘지 않다. 단축키를 외우면서 예전보다 풍부하게 기능을 사용하게 되었으며, 마우스와 키보드를 왔다 갔다 하는 일이 적어졌다.
원격에서 ssh로 접속해서 작업할 때는 매우 편하다!
그렇다면 쓰는 툴은?
나는 tmux + tmuxinator, vim(neovim) (airline, coc, vim-startify, nerdtree, tagbar), git + tig, zsh 을 사용한다.
중간중간 tui라고 부르기 어려운 툴들도 있지만, 크게 트집잡지 말고 넘어가자.
이외에도 여러 툴들을 사용하지만, 지금 언급한건 나에게는 필수다.
각각을 설명해보자면
tmux + tmuxinator
tmux (terminal multiplexer) 는 여러개의 터미널을 띄울수 있게 해주는 툴이다.
장점 : session 이라는 개념이 있어서 ssh 환경에서 접속이 끊어져서 재접속 할때도 원래 작업하던걸로 붙을 수 있다.
단점 : 단축키가 적은 편은 아니다. (나같은 경우 단축키를 외우기 귀찮아서 vim하고 똑같이 설정시켰다. prefix 키라고 불리는 ctrl+b 키를 누르고 작업하면 tmux, 아니면 vim에서 동작하는 식으로 외웠다.)
tmuxinator : 공식 저장소에서는 “create and manage tmux sessions easily.” 라고 설명한다.
ruby 기반으로 만들어졌으며, workspace 개념으로 사용하고 있다. 이게 뭔말이냐면, visual studio code 같은 프로그램 써보면, 창 열었던걸 다 기억해서 다시 똑같이 켤 수 있는데, 이걸 tmux에서 하고 싶을때 사용한다.
예를 들어 1번 window 에서는 vim 을 띄우고 2번 window 에서는 server 용 script를 자동으로 실행시킬수 있게 해준다.
장점 : 복잡하지 않은 사용법
단점 : gem을 사용하지 않는 사람에게 복잡한 공식 설치 방법 (나는 apt로 설치할수 있어서 apt install tmuxinator를 했다. 그러면 자동으로 의존성 있는 걸 다운해준다.)
vim (airline, coc, vim-startify, nerdtree, tagbar)
vim 자체가 뭔지 모르는 사람이 이 글을 검색해서 들어오기는 쉽지 않을 꺼라 생각해서 설명을 생략하고, 내가 어떻게 세팅했는지 위주로 설명하겠다.
vim 은 너무 불친절한 프로그램이다. 사용자가 전부 설정하라고 하니… 그저 막막해진다.
나는 처음에는 https://vim-bootstrap.com/ 이 사이트에서 사용하는 언어 다 체크하고 다운 받은뒤 vimrc 에 넣어줬다. vim을 메인 에디터로 사용하고 싶어하는 사람에게는 좋은 시작방법이라고 생각한다.
이후에는 https://johngrib.github.io/ 을 참고해서 coc, vim-startify 를 알게되어서 사용하고 있다. 설정법은 충분히 다른 블로그나 글에도 있을 거라고 생각하니 스킵한다.
tig
git을 tui환경에서 작업할 수 있게 해준다.
장점 : h 키를 누르면 shortcut을 한눈에 쉽게 볼 수 있다.
단점 : git의 모든 동작을 지원하지는 않는다. (사실 이건 모든 git client 들의 단점이다.)
주로 사용하는 기능 : diff, blame, tree view이고 한 chunk 단위로 commit 하고 싶을 때 여기서 u키를 눌러서 stage 시키고 commit 한다.
zsh
oh-my-zsh 과 함께 사용한다. 다른 곳에서도 한국어 설명은 충분히 찾아볼 수 있을 거라고 생각하니 안적겠다.
글을 쓴 목적
나 이외에도 터미널에서만 개발하고 싶은 사람들이 있을 거라고 생각한다. 하지만 그렇게 마음 먹고 난 뒤에 찾아보면 대부분 cli 에서 command 를 쳐서 하는 방법만 나온다. command를 전부 외우는 걸 바라는게 아닌데도 불구하고 말이다. 지금 사용하는 툴들을 전부 알고 정착하는데 오랜 시간이 걸렸다. 그러면서 필수적인 tui환경 툴은 생각보다 추천글이 적다라는 걸 알았다.