Vim 儲存完 JavaScript 檔案後自動用 yuicompressor

因為每次存完 js 檔案還要 Ctrl+Z ,然後手動跑 yuicompressor 才能去看效果,有問題還要 fg 回來繼續改,所以我剛剛終於受不了去研究 vim script 了

function Js_css_compress ()
    let cwd = expand('<afile>:p:h')
    let nam = expand('<afile>:t:r')
    let ext = expand('<afile>:e')
    if -1 == match(nam, "[\._]src$")
        let minfname = nam.".min.".ext
    else
        let minfname = substitute(nam, "[\._]src$", "", "g").".".ext
    endif
    if ext == 'less'
        if executable('lessc')
            cal system( 'lessc '.cwd.'/'.nam.'.'.ext.' &')
        endif
    else
        if filewritable(cwd.'/'.minfname)
            if ext == 'js' && executable('closure-compiler')
                cal system( 'closure-compiler --js '.cwd.'/'.nam.'.'.ext.' > '.cwd.'/'.minfname.' &')
            elseif executable('yuicompressor')
                cal system( 'yuicompressor '.cwd.'/'.nam.'.'.ext.' > '.cwd.'/'.minfname.' &')
            endif
        endif
    endif
endfunction
autocmd FileWritePost,BufWritePost *.js :call Js_css_compress()
autocmd FileWritePost,BufWritePost *.css :call Js_css_compress()
autocmd FileWritePost,BufWritePost *.less :call Js_css_compress()

把上面的指令加到 vimrc 檔裡面就可以了,前兩個分別是會把 blah.src.js, blah_src.js 轉成 blah.js 用的,第三行則是會把 blah.js 檔轉成 blah.min.js ,慎用之~~

加上第四行,會先檢查 blah.min.js 存不存在,存在的話才用 yuicompressor ,另外 code 在 gist 也貼了 一份

改版成 function 形式了~~

更新:支援 less,有 Google Closure 的話會先用它壓縮 js 檔。