SCSS 파일을 자동으로 컴파일하게 하기 – vim

scss 파일을 저장할 때 자동으로 컴파일 해주는 기능을 만들어보자. 이런 종류의 기능은 vim의 autocmd를 설정하여 만들 수 있다. 이는 특정한 파일을 열거나, 파일을 새로 만들거나, 저장하는 등의 시점에 자동으로 수행된다. SCSS 컴파일은 외부 컴파일러에 의존하고 있어서 vim8의 비동기IO를 이용해서 스무스하게 진행될 수 있게끔 했다. (따라서 vim7 이하버전에서는 실행되지 않는다.) 컴파일은 sassc에 의존하며 이는 파이썬 pip를 이용해서 libsass를 설치하면 얻을 수 있다. (C컴파일러가 필요하다.)

먼저 비동기 처리를 완료한 후 처리할 콜백함수와, 비동기로 컴파일 명령을 실행하는 두 함수를 작성한다.

function! CB_compile_scss(channel, msg) -- 컴파일이 끝나고 호출된다. 단순히 메시지를 출력.
    echom 'Compilation completed'
    echom a:msg
endfunction

function CompileSCSS() -- job_start()를 이용해서 특정 프로세스를 백그라운드에서 실행한다.
    let cname = expand('%')
    let fname = expand('%<') . '.css'
    let command = 'sassc ' . cname . ' ' . fname
    echom 'start compile ' . cname
    job = job_start(command, {'callback': 'CB_compile_scss' })
endfunction

이 함수를 vimrc 등에 정의해놓고 .scss 파일을 저장할 때마다 호출되도록 다음과 같이 자동명령을 설정한다.

au! BufWritePost *.scss call CompileSCSS()

끝.

추가

vim7 이하의 버전에서는 그냥 다음과 같이 autocmd를 설정하자.

au! BufWritePost *.scss