2012년 10월 11일 목요일

[Vim] 파일 저장 시 뭔가를 하고싶다

어떻게 보면 광범위한 제목이 될 지도 모르겠지만, 이 글은 Vim에서 특정 파일을 편집하다 저장 했을 때 특정한 일을 실행 하기에 관한 내용이다.

가장 간단하게 생각해 볼 수 있는 예제는 커피스크립트(Coffee Script)이다. 커피스크립트는 자바스크립트(Java Script)를 좀 더 캐쥬얼한 문법으로 작성하게 해 주지만 대신 컴파일 과정을 거쳐서 js 파일로 변환해야만 하는 용도이다 보니 컴파일 과정이 필수적이다.

물론 커피스크립트의 watch 기능을 이용해서 자동 컴파일이 되게 할 수도 있지만 이걸 매번 실행시키는 것도 귀찮다. 그리고 경쟁상대(?)인 Emacs의 coffee-mode의 경우 저장 시 자동으로 컴파일을 해 주는 기능이 있기 때문에... -_-;;;

커피스크립트 자동 컴파일 기능은 굉장히 단순하다. 다음 한 줄을 설정파일(.vimrc)에 넣으면 된다.
autocmd BufWritePost,FileWritePost *.coffee silent !coffee -c <afile>
이 한 줄을 대충 설명해 보자면 이렇다:
  • autocmd는 그냥 '특정 명령을 등록'하는 거라고 보자.
  • BufWritePost, FileWritePost는 '특정 버퍼나 파일이 저장된 이후'에 실행된다는 의미이다.
  • *.coffee는 파일 이름 규칙. 여기서는 확장자가 .coffee인 경우이다. 즉, 커피스크립트 인 경우에만 동작한다.
  • silent는 출력 결과를 버퍼에 기록하지 않도록 하기 위해 필요하다. 이걸 빼면 버퍼에 컴파일 결과가 기록 될 수도 있다.
  • !coffee -c 는 그냥 커맨드 라인 명령어이다. 제일 앞에 느낌표(!)가 붙어있다는 것에 주의.
  • 마지막의 <afile>은 현재 파일이라는 의미이다.
이런 식으로 필요하다면 scss를 compass로 컴파일 하는 등 다양한 언어(도구?)에 맞게 확장이 가능하다.

Vim용 함수를 만들어 놓은 경우라도 물론 실행이 가능하다.
function! somefunction()
    ....
endfunction

autocmd BufWritePost,FileWritePost *.coffee :call somefunction()
함수를 만들 정도면 굳이 더 이상의 설명은 필요 없을 것 같다. ;-)

댓글 없음 :