추석을 낀 긴 연휴를 맞아 나의 개발 허세를 채우기 위해 Vim을 공부했다. Sublime Text, Atom 등의 슈퍼 메모장 시리즈를 쓰다가 업무 상 Python IDE인 PyCharm을 써오던 상황이었는데, 양 쪽의 장단점은 모두가 잘 알고 있으리라고 생각된다. 개인적으로 싫어하는 점을 꼽자면
- 슈퍼 메모장: 플러그인을 통해서 IDE 기능을 탑재해서 강력해질 수 있다고 하지만 오히려 Text Editor의 본질에서 벗어나는 것 같달까. 나도 Atom에 터미널 플러그인을 연결해서 편리하게 쓴 적이 있지만, 딱 그 정도였다. 플러그인은 또 다른 공부 거리이다. 플러그인 설치해서 파악하고 쓸려면
차라리 Vim을 공부해서 쓰는 것이 낫지 않을까? - PyCharm은 너무 무겁더라. Docker 끼고 django runserver 구동하는 데 5초, runserver 중지하는 데 5초... 굉장히 편리한 기능이 많다는 것은 인정하지만 평소에 쓸 일이 별로 없다. 오히려 내가 모르고 쓰지도 않는 기능들이 수 많이
깔려있겠다는 생각에 답답해진다. PyCharm 문서를 보고 열심히 공부하면 좋을까,
차라리 Vim을 공부해서 쓰는 것이 낫지 않을까?
이렇게 내가 Vim에 손을 뻗치는 것에 대한 핑계를 확고히 선언하고 Vim 체험기를 간단하게 기록 및 공유하려 한다.
Vim 첫 걸음의 목표
슈퍼 메모장처럼
- 코드 편집
- 많은 파일 관리
- 추가적으로 syntax 체크, 자동 완성 기능 같은 것도 됐으면 좋겠지만, 큰 욕심은 부리지 않기로 한다.
IDE 처럼
- compile/run 할 수 있고, 그 결과를 Vim 환경 안에서 자연스럽게 확인
- docker + django runserver debugging을 하고 싶은데, 큰 욕심은 부리지 않기로 한다.
Outline: 시작하기 전에
"이 글에는 많은 내용이 없을 것 같다"고 스스로 생각한다. 왜냐하면 이 글의 목적은 내가 Vim 공부를 위해 어떤 책을 읽었고 어떤 웹 자료들이 좋았는 지를 기록하는 것이고 그 내용을 모두 담을 수는 없기 때문이다. 이 글을 보시는 분의 의지가 확실하다면 여기에 추천된 내용을 직접 읽으며 공부하셔야 할 것이다.
되돌아보자면, 내가 너무 만만하게 생각했던 것 같다. 내가 비효율적으로 접근한 것일 수도 있겠지만, 예상보다 더 많은 시간과 공부가 필요했다. 이 글의 차례대로 대략적으로 소요된 시간을 추정해본다.
- vimtutor: 2시간
- learnvimscriptthehardway: 12시간
- Vim 플러그인 탐방: 6시간
- tmux 시작: 3시간
Ubuntu 16.04 Desktop 기준으로 쓴 글임을 양해바란다.
설치는 되어있는가?
sudo apt install vim
Vimtutor +@
정말 Vim을 전혀 모른다면, (예를 들어 vim을 입력해서 메모장 비스무리한 것에 들어갔는데 나가는 방법을 모른다면) 아래 명령어를 입력하고 하라는 대로 한다. vimtutor 시작!
$ vimtutor
vimtutor는 :vsplit
과 같은 화면 분할, 탭 관리에 대한 설명이 없으니, 여러 buffer를 관리하는 법에 대해서도 알아두자.
learnvimscriptthehardway
사실 이 코스가 나의 Vim 공부의 전부였다. 원피스의 루피가 먹은 "악마의 열매"와 같다. 나머지는 여기서 배운 것을 기반으로 내 취향/필요에 맞게 맞춰나가는 과정이었다. 루피가 해적왕이 되기 위해 고향을 떠난 것이다. 이 코스를 모두 따라가며 공부했다고 해도 직접 갈고 닦는 시간이 필요하다.
전반적인 Vim 환경에 대한 지식을 연습을 통해 알려주고 vimscript 언어를 공부시킨다. 그리고 플러그인을 직접 만들어보면서 파악한다.
Vim 플러그인 탐방
learnvimscriptthehardway를 따라가다 보면 자연스럽게 pathogen이라는 Vim runtimepath 관리자를 사용하게 되는데, pathogen 덕분에 여러 플러그인을 매우 쉽게 시도해볼 수 있다. 이제 꽉 잡힌 수업에서 벗어나 내가 필요한 플러그인을 찾아 자유롭게 떠돌면 된다. 쉽게 만나고 쉽게 헤어지면서 각 플러그인을 어떻게 사용하는지, 도움말은 어떻게 찾아보는 지를 연습할 수 있는 시간이 된다.
개인적으로 추천하는 플러그인 또는 플러그인 제작자
- tpope
pathogen, dispatch, fugitive 등의 필수적인 플러그인의 제작자 - junegunn
vim-plug (pathogen의 라이벌)의 제작자로, 우리 나라 개발자이신 것에 놀람+감탄+자랑스러움을 느꼈다.
vim-plug 외에도 많은 사랑을 받는 프로젝트가 많았지만 내가 아직 잘 모르므로 다음을 기약한다. - NERDTree
- vim-syntastic
- vim-virtualenv
- jedi-vim
그 외 들러봤던 플러그인들
- python-mode
- ctrlp
- minibufexpl.vim
- vimux
- ale
- 기억이 잘 안 납니다.
tmux 첫 걸음
처음에 아무 것도 모르고 그리던 Vim 환경을 만들기 위해서는 Vim 자체의 기능을 끌어올리는 것도 필요했지만, tmux와 같은 터미널 세션 관리자의 도움이 필수적이었다. Vim에서 Docker Compose 연결을 위해 플러그인을 찾을 필요가 없는 것이다. (그냥 다른 터미널에서 돌리면 되지) 이러한 외부 프로세스 관리를 효율적으로 관리하게 해주는 것이 terminal multiplexer, tmux이다. Vim + tmux 조합은 이미 검증된 것으로 보여지므로 ("vim tmux"로 구글링 해보자) 나도 마음 편하게 뛰어들었다.
개인적으로 정리한 글을 따로 참조하기 바란다.
마무리
이렇게 뭔가 보람이 있는 척 스크린을 구성할 수 있게 되었다는 것에 보람을 느끼는 정도.
Vim 첫 걸음을 떼면서 스스로 다시 한 번 작아짐을 느꼈다. Vim 공부를 하는 자체로 나에게 도움이 됐지만, 새로운 세계에 입문하여 배우는 즐거움을 느끼고 동기 부여해주는 좋은 계기가 되어서 더욱 기분이 좋다. 허섭스럽지만 내 손에서 tmux + Vim 쓸 수 있다는 결과물이 있어서 다행이다. 꾸준히 사용하면서 PyCharm을 대체할 수 있는 레벨이 되기까지 수련할 생각이다. 추후 Docker + django debugging을 정리하는 포스팅을 하게 된다면 좋겠다.
참조 링크
내 포스팅
- http://dgkim5360.tistory.com/entry/vim-tutorial-vimtutor-summary
- http://dgkim5360.tistory.com/entry/vim-usage-of-windows-and-tabs
- http://dgkim5360.tistory.com/entry/the-first-steps-for-tmux-terminal-multiplexer
- https://gist.github.com/dgkim5360/8a7ec4fd913abd2dbab085004c34e499
learnvimscriptthehardway
http://learnvimscriptthehardway.stevelosh.com
Amazing slides
http://meirkriheli.com/talks/tmux-vim
What is the difference between the vim plugin managers?
https://vi.stackexchange.com/questions/388
vim-dispatch: I should have used this years ago
http://tilvim.com/2014/03/13/dispatch.html
How To Install Vim 8.0 On Ubuntu 16.04
https://itsfoss.com/vim-8-release-install
tmuxinator
https://github.com/tmuxinator/tmuxinator
'GNU-Linux' 카테고리의 다른 글
UNIX as IDE: 2. Files (0) | 2017.11.06 |
---|---|
UNIX as IDE: 1. Introduction (0) | 2017.11.06 |
Linux 초보의 tmux (terminal multiplexer) 입문 (6) | 2017.10.05 |
Vim의 화면 분할: window, tab 활용 (0) | 2017.10.05 |
apt update 중 Hash Sum Mismatch 오류 해결 (1) | 2017.09.19 |