昨天设置了让 VIM 保存网页文件后自动刷新 Firefox,的确很方便。但发现如果你正在看着 Firefox 里面的参考文章来修改 VIM 里面的网页的话,保存后自动刷新网页就显得没有必要。当然,也可以使用 Chrome 来读参考文章,Firefox 专门用来调试。不过,发挥 Hacker 精神,还是自己动手来改进吧!于是吧 Refresh_firefox() 函数改了一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | autocmd BufWriteCmd *.php,*.html :call Refresh_firefox() function! Refresh_firefox() if &modified write silent !echo 'if (gLastValidURLStr.indexOf("'%'")>=0) { \ vimYo = content.window.pageYOffset; \ vimXo = content.window.pageXOffset; \ BrowserReload(); \ content.window.scrollTo(vimXo,vimYo); \ } \ repl.quit();' | nc localhost 4242 2>&1 > /dev/null endif endfunction |
这样在刷新前就会依据目前打开的页面 URL 来判断是否刷新,如果 Firefox 正打开的页面 URL 里面含有目前 VIM 里面正在编辑的文件的文件名,就刷新。只是这样在编辑 *.js 和 *.css 文件的时候就没办法了,只好再加一个 Refresh_firefox_anyway():
1 2 3 4 5 6 7 8 9 10 11 | autocmd BufWriteCmd *.js,*.css :call Refresh_firefox_anyway() function! Refresh_firefox_anyway() if &modified write silent !echo 'vimYo = content.window.pageYOffset; \ vimXo = content.window.pageXOffset; \ BrowserReload(); \ content.window.scrollTo(vimXo,vimYo); \ repl.quit();' | nc localhost 4242 2>&1 > /dev/null endif endfunction |
折腾出上面的功能,我主要是学会了一些 VIM Script 相关的东西,比如怎样在外部命令里面包含正在编辑的文件名。实际上对于本文要解决的问题,可以换一个更简单的思路。只要判断 Firefox 里面的页面是否是本地页面就可以了,即 URL 地址以 “file://” 或 “http://localhost/” 开头:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | autocmd BufWriteCmd *.php,*.html :call Refresh_firefox() function! Refresh_firefox() if &modified write silent !echo 'if (gLastValidURLStr.indexOf("file://")==0 \ || gLastValidURLStr.indexOf("http://localhost/")==0) { \ vimYo = content.window.pageYOffset; \ vimXo = content.window.pageXOffset; \ BrowserReload(); \ content.window.scrollTo(vimXo,vimYo); \ } \ repl.quit();' | nc localhost 4242 2>&1 > /dev/null endif endfunction |





