2015년 11월: splitjoin.vim

준건님이 splitjoin.vim github github 을 알려 주셔서 써 봤습니다. 예를 들어 Ruby에서 { ~ } 블록을 do ~ end 블록으로 바꿀 때, HTML에서 속성이 많은 태그를 들여쓰기로 풀어 줄 때 같은 상황에 씁니다. 처음 써 봤을 때 매우 인상 깊었지만, 시간이 지나고 막상 급해지면 이 플러그인의 존재를 잊고 다시 매크로를 쓰게 됩니다.

2015년 12월: neovim

neovim의 설정 파일이 XDG directory specification을 따르도록 변경되었습니다. neovim 즉, ~/.nvimrc 대신 ~/.config/nvim/init.vim을 쓰게 됩니다. XDG directory specification이라는 것도 찾아보니, 애플리케이션마다 사용자별 설정 파일을 홈의 닷파일로 저장하다 보니 홈 디렉터리가 지저분해졌고, 그 문제를 풀기 위해 디렉터리 구조의 표준 사양을 만든 것이었습니다.

2016년 1월: gv.vim, fixeol, jsonencode

준건님이 만든 zoom 함수를 모방해 두고 자주 씁니다. neovim

gv.vim도 설치했습니다. fugitive 기반의 git browser입니다. 기존에는 gitv를 쓰고 있었는데, gv.vim 쪽이 훨씬 가볍고 단순해서 제 입맛에 맞게 수정하기 좋았습니다. 그래서 gitv는 지워 버리고 gv.vim만 쓰고 있습니다.

eol 문제가 드디어 vim의 옵션으로 추가되었습니다(fixeol). 문제는 이렇습니다. IntelliJ IDEA는 기본적으로 EOL을 붙이지 않는 반면, vim은 기본적으로 EOL을 붙여서 저장합니다. 그러다 보니 IntelliJ에서 작성한 파일을 vim에서 그냥 저장하기만 해도 매번 변경 사항이 생겼습니다. 옛날에는 이걸 해결하려고, 현재 파일이 eol이면 set eol로, noeol이면 set noeol로 저장하는 꼼수 스크립트를 만들어 썼습니다. 이번에 vim v7.4.785에서 fixeol 옵션이 추가되었고 기본값이 on이라서, set nofixeol을 넣어 두면 vim이 강제로 eol을 고치지 않습니다.

vim script의 빌트인 함수로 jsonencode()jsondecode()가 추가되었습니다. github 사람들은 todo.txtchannel.txt를 보고, 이것이 비동기 작업 실행의 기반이라고 추측합니다. github 이는 neovim의 좋은 feature를 vim 본가가 모방하는 것으로 보입니다. 사실 이렇게 vim을 따라 하는 다른 앱들의 좋은 기능을 다시 vim이 모방해 흡수하는 일이 vim의 성공 이유라고 bram님이 인터뷰에서 말한 적도 있습니다. reddit

2016년 2월: vim-easy-align, vim8

오랫동안 tabular tumblr 를 써 왔고 이미 익숙해진 터라 바꿀 생각을 못 하고 있었는데, 이번에 마음먹고 준건님의 vim-easy-align github 으로 갈아탔습니다. tabular에 비해 옵션이 많고(아직 다 파악하지 못했습니다), 정렬할 때 ignore할 수 있는 옵션이 정말 좋습니다.

pom.xml 파일을 더 예쁘게 보여 준다길래 vim-maven-syntax도 설치했습니다. github

비동기로 job을 실행할 수 있는 기능이 vim 공식 feature로 들어왔습니다. github neovim과의 관계 때문에 reddit의 스레드는 폭발했습니다. reddit vim 본가가 neovim의 아이디어를 흡수하면서 두 갈래의 미래가 어떻게 갈릴지 궁금합니다.

아무튼 이제 아래와 같은 코드가 가능해졌습니다.

function! Handler(ch, msg) echom a:msg endfunction
let job = job_start('ls -alh ~/', { 'callback': 'Handler' })

Python을 위한 braceless.vim github 도 설치했습니다. Python처럼 brace가 없고 들여쓰기 기반인 언어를 위한 플러그인으로, custom text object, fold, indent guide를 제공합니다. 처음에는 설치할 만큼 매력적이지는 않다고 생각했는데, 막상 깔고 써 보니 생각보다 편합니다. 특히 custom text object는 자주 쓸 것 같습니다. 다만 왜인지 첫 로딩이 느려지는 점이 마음에 걸립니다.