註:僅測試於 Cygwin console Vim + Windows 版的 java,其他環境只測過 Win32 gVim ——失敗。

通用的解決方案請參考 othree 寫的 Vim 儲存完 JavaScript 檔案後自動用 yuicompressor
本篇特徵為:

  • 只使用 google closure-compiler
  • 採用 :make 執行,故能以 Quick Fix 視窗除錯。

    warning_level 設 DEFAULT 的話,壓 MooTools 居然不過……

  • 壓縮前未存檔、實行壓縮前、……幾個場合能先詢問確認。

    不存檔是壓什麼意思的? 若不詢問,每次 :w 就自動跑也是很費時的

  • 壓縮結果可選擇存到改名的檔案(傳回檔名)或存到暫存檔(傳回壓縮後的文字)。
    自動命名規則為 foo.js → foo.min.js 或 foo-debug.js → foo.js。

使用方式

  1. 把本文原始碼加進 .vimrc。 gist: 545665 - [.vimrc] function to use closure-compiler
  2. 下載 closure-compiler 將 jar 放到程式找得到的地方(如程式第一行 let jar = '/scripts/google-compiler-20100616.jar'
  3. 幾種用法:
    • function:call JsCompress(save [, interact [, options ]])
      save: 若為 1 則自動命名存檔,0 則存到暫存檔。
      interact: 若為 1,執行 make 前會詢問確認。
      options: compiler 用的參數字串,例如 '--compilation_level=WHITESPACE_ONLY'。這裡留意若不指定的話, warning_level 用的並非預設值而是 QUITE,因為 warnning 就會有 quickfix 而中斷壓縮。
      :call JsCompress(1, 0, '--warning_level=DEFAULT')
    • command:JsCompress[!] [interact] [options]
      同上但 save 參數被 ! (bang) 取代。
      :JsCompress! 1 '--compilation_level=WHITESPACE_ONLY'
    • autocmd:在 .vimrc 加上 au FileWritePost,BufWritePost *-debug.js :JsCompress! 1
      以後編完 foo-debug.js 存檔,便會詢問是否壓縮。

已知問題

中文檔名在 make 出錯時,quickfix 和產生的新檔是亂碼。

懷疑是 Windows java 的問題所以先不處理