나 말고 다른 사람들이 어떤 프로그램을 쓰고 어떻게 사용하는지를 관찰해보면 내가 모르고 있던 vim 단축키를 조합하여 편하게 사용한다거나, 모르고 있던 프로그램을 셸 스크립트에서 자유자재로 사용한다거나, 잘 알고 있다고 생각했던 프로그램을 상상도 하지 못했던 방법으로 쓰는 것을 보고 배워서 자신의 사용 패턴을 발전시킬 수 있습니다.

usesthis.com에는 다양한 직종의 사람들이 어떤 툴을 쓰는지 인터뷰하며, 여러 유명한 프로그래머들의 인터뷰도 상당수 포함되어 있습니다. (물론 이런 저런 기괴한 인터뷰도 여럿 존재합니다.)

다른 사람들의 설정 파일을 들여다 보는 것도 좋은 경험이 됩니다. 유명한 dotfiles들을 구경해 보거나, 혹은 여럿이 모여 설정 파일을 같이 읽고 연구해볼 수도 있겠죠.

그리하여 우선 제가 어떤 걸 어떻게 사용하고 있는지 정보를 공유해봅니다. 이 글을 읽은 분들도 각자 자신들이 무얼 쓰는지 글을 정리해주세요!

운영 체제

데비안 sid를 메인 OS로 쓰고 있습니다. 예전에는 우분투를 주로 썼었는데, Unity가 여러모로 불편해져서 2년 전부터 옮겼습니다. 그러다가 Gnome 3가 역시 심하게 불편해져서 현재는 awesome을 쓰고 있습니다.

공통 dotfiles 설정을 git 저장소로 관리하여 여러 컴퓨터에 동일한 설정을 두도록 하고 있습니다.

멀티부팅으로 윈도를 쓰기도 합니다. VirtuaWinQTTabBar를 사용합니다. MinGW-w64와 msys를 Console2와 함께 쓰고 있으며 조만간 msys2로 옮길 생각입니다.

Zsh를 씁니다. bash와 상당히 호환되기 때문에 기존 셸 스크립트를 이용하는 데에 문제가 없으며 커뮤니티 지원이 좋습니다. oh-my-zsh라는 거대한 환경설정 프레임워크가 있고, 이외에도 zsh-completionszsh-syntax-highlighting 등 여러 추가 기능이 관리되고 있습니다.

agnoster 테마를 쓰고 있습니다. git 브랜치 현황이나 수정 여부 등을 바로 띄워준다는 점이 편리합니다.

mpd + ncmpc를 씁니다. mpd의 http 전송 기능을 설정하면 원격으로 음악 스트리밍이 가능합니다.

ag를 사용합니다. 이전에는 ack을 쓰다가 옮겼어요. 어느쪽이든 grep보다 사용하기 편합니다.

Tmux를 씁니다. screen보다 유연하게 설정이 가능하고 역시 커뮤니티 지원이 좋습니다. 다만 Tmux의 기본 설정을 그대로 쓰는 것은 추천하고 싶지 않은데, 저는 prefix를 ^q로 바꾸어 두었습니다. (이전에는 ^a로 쓰다가 셸이나 vim 단축키 입력이 불편하여 바꾸었습니다),

Tmux가 screen보다 불편한 점이 하나 있는데, 같은 세션을 여러 군데에서 접속할 경우 모든 곳에서 같은 화면이 공유된다는 점입니다. 가령 한 세션 안에 윈도 1과 윈도 2가 있는데, 윈도 1을 보고 있었는데 다른 곳에서 접속해서 윈도 2로 전환하면 이쪽도 윈도 1로 전환되어 버리는 것이죠. 이를 방지하려면 여러 군데에서 같은 세션에 접속하는 것이 아니라 각각 새로운 세션을 띄우면서 기존 베이스 세션에 연결하도록 해야 합니다. 이를 자동으로 수행해주는 tmx 유틸리티를 만들어 쓰고 있습니다.

solarized light를 씁니다. 다른 컬러 스킴도 경험해봐야 하는데 모든 곳에 solarized 설정을 해둔 상태라서 언제 바꿀지는 모르겠네요.

다른 서버에 원격으로 접속하는 경우가 많아 ~/.ssh/configControlmasterControlpath 설정을 추가해 두었습니다. 이 설정은 같은 서버에 동시에 여러 번 접속할 때 같은 SSH 연결을 공유하도록 합니다. 즉 이미 ssh 연결이 되어 있는 상태에서 scp를 실행하면 새 연결을 시도하는 것이 아니라 기존의 ssh 연결을 이용하여 전송합니다.

이전에는 mosh를 자주 사용하였는데 요새는 쓸 일이 별로 없네요. 노트북처럼 인터넷 연결이 자주 끊어질 수 있는 경우 유용합니다.

에디터

Vim을 씁니다. Vim을 씁니다. Vim을 씁니다. (ozinger#vim 채널이 있습니다!)

Vi는 ADM-3A라는 컴퓨터에서 개발되었는데, 이 컴퓨터 키보드의 특징으로는 현재의 Caps Lock 위치에 Ctrl이 있다는 것, 그리고 Esc 역시 현재 키보드와는 달리 역시 Ctrl과 가까운 위치에 있다는 것이 있습니다. Vi/Vim의 단축키는 이러한 구조를 기반으로 지정되었기 때문에, 키보드 레이아웃을 당시 레이아웃과 비슷하게 바꾸는 것이 편리합니다. 저는 Caps Lock 위치에 Ctrl을 두고, Ctrl 위치에 Esc를 두고 Esc 위치에 Caps Lock을 두었습니다.

pathogengit submodule로 플러그인을 관리하고 있습니다. 다만 이 구조는 제가 Vundle을 모를 때 구축해놓은 거라서 새로 설치하려는 분들에게는 Vundle이나 NeoBundle을 추천하고 있습니다.

다음의 플러그인을 추천합니다.

  • syntastic: 파일을 저장할 때 자동으로 문법을 검사해줍니다.
  • vim-gitgutter: git diff 상황을 표시해줍니다.
  • vim-commentary: 주석 처리에 유용합니다. gcc로 현재 라인을 주석처리하거나, gci}로 현재 작업중인 블럭 전체를 주석처리할 수도 있습니다. (nerdcommenter 같은 다른 플러그인은 이러한 명령어 조합이 불가능합니다. vim-commentary를 쓰세요.) vim-repeat를 같이 설치해두면 .로 해당 명령을 반복할 수도 있습니다.
  • vim-easymotion: fw 등의 키를 확장하는 플러그인입니다. 가령 \fa를 입력하면 현재 커서를 기준으로 a 문자를 모두 표시해주며, 원하는 곳으로 쉽게 이동이 가능합니다.
  • vim-fugitive: :Gstatus, :Gcommit, :Gsplit 등의 git 관련 커맨드를 제공합니다.
  • vim-surround: 괄호 등을 편리하게 조작하는 플러그인입니다. ds(를 입력하여 (/)를 지우거나, cs'"를 입력하여 작은따옴표를 큰따옴표로 바꿀 수 있습니다.
  • vim-dispatch: :make를 대체하는 :Make 명령어를 제공합니다. :Make를 실행하면 자동적으로 tmux 스플릿이 일어나 빌드가 별도 창에서 진행되며, 그 사이에 Vim을 계속 사용할 수 있습니다.
  • rainbow: 중첩 괄호를 다른 색으로 표시해줍니다.
  • vim-signature: mark 위치를 표시해줍니다.
  • vim-tmux-nagivator: Tmux split과 Vim split을 통합하여 사용할 수 있도록 돕습니다.
  • ag.vim: :Ag 명령어로 ag를 실행하여 quickfix 윈도에 결과를 보여줍니다. ack.vim의 fork입니다.

웹 브라우저

Firefox Nightly를 오래 전부터 쓰고 있습니다. Nightly라고는 하지만 상당히 안정적인 편입니다.

HTTPS everywhere를 쓰고 있습니다. 이 확장 기능은 HTTP로 접속했을 때 HTTPS로 리다이렉트하지 않는 사이트에 대해 강제로 HTTPS를 쓰도록 하는 기능입니다. (HSTS를 확장 기능으로 구현했다고 생각하면 될 것 같네요.) 얼마 전부터는 Privacy Badger를 설치해 두었습니다. 별다른 불편이 있거나 하지는 않네요.

Firefox에는 브라우저 북마크에 키워드를 지정할 수 있는데, 가령 http://en.wikipedia.org/w/index.php?title=Special:Search&search=%s라는 URL에 w 키워드를 지정해두면 주소창에 w Vim을 입력하는 것으로 위키백과 Vim 문서를 열 수 있습니다.

현재 다음의 키워드를 등록해두고 있습니다.

w       https://en.wikipedia.org/w/index.php?title=Special:Search&search=%s
ko      https://ko.wikipedia.org/w/index.php?title=Special:Search&search=%s
ja      https://ja.wikipedia.org/w/index.php?title=Special:Search&search=%s
wikt    https://en.wiktionary.org/w/index.php?title=Special:Search&search=%s
g       https://google.com/search?q=%s
import  https://docs.python.org/2/library/%s.html