m (→Requires: link to description of netcat) |
(→Requires: better link for netcat) |
||
Line 36: | Line 36: | ||
===Requires=== |
===Requires=== |
||
#MozRepl must be installed & running in Firefox |
#MozRepl must be installed & running in Firefox |
||
− | #[http:// |
+ | #[http://netcat.sourceforge.net/ Netcat] (nc) must be on your path. |
#Firefox & vim are both on the same machine (localhost). |
#Firefox & vim are both on the same machine (localhost). |
||
Revision as of 03:16, 13 May 2011
Proposed tip Please edit this page to improve it, or add your comments below (do not use the discussion page).
Editing HTML in Vim is a lot nicer if you can see updates in Firefox without needing to remove your hands from the keyboard. With MozRepl and a little vimrc script, you can do just that!
The bad old way
You are probably all too familiar with this annoying mini-workflow:
- Edit your HTML/css file.
- Hit save in Vim.
- Take your hands off the keyboard and move your mouse over to Firefox.
- Press Ctrl-R in Firefox to refresh.
- Move the mouse back to Vim and put your hands back on the keyboard.
- Do it again and again, wincing a little bit each time.
The joyful new Vim + MozRepl way
With the little .vimrc + MozRepl hack shown below, all you need to do is:
- Edit your HTML/css file.
- Hit save in Vim – Firefox will refresh automatically, preserving its scroll offsets!
This integration is no where near as fancy as the Emacs MozRepl binding, but this one feature makes it super useful.
Vim + MozRepl
When editing an .html,.css, or .gtpl file, make Firefox refresh after the buffer is saved, preserving the current scroll offset.
Requires
- MozRepl must be installed & running in Firefox
- Netcat (nc) must be on your path.
- Firefox & vim are both on the same machine (localhost).
How it works
I use echo + netcat (nc) to send a dopey little MosRepl script (see below) to Firefox. All the output is tossed away (2>&1 > /dev/null) because MozRepl is chatty.
Global variables are used (vimXo, vimYo) to capture the X,Y offset of the web page for vim. Maybe there's a way to not use a global, but I don't know what that might be. After saving the buffer and reloading the browser, scroll to the X,Y offset.
See also:
http://wiki.github.com/bard/mozrepl/tutorial http://forums.whirlpool.net.au/forum-replies-archive.cfm/495300.html
Code from .vimrc
autocmd BufWriteCmd *.html,*.css,*.gtpl :call Refresh_firefox()
function! Refresh_firefox()
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
See also
A Few Additions:
To put in $MYVIMRC
command! -nargs=1 Repl silent !echo \ "repl.home(); \ content.location.href = '<args>'; \ repl.enter(content); \ repl.quit();" | \ nc localhost 4242
nmap <leader>mh :Repl http:// "mnemonic is MozRepl Http nmap <silent> <leader>ml :Repl file:///%:p<CR> "mnemonic is "" Local nmap <silent> <leader>md :Repl http://localhost/ "mnemonic is "" Development
Now, when working on local html files, if you switch files often then just press <leader>ml
and the file is shown in Firefox.
Also, <leader>mh will bring you to ex mode where you can type in a URL and go there in Firefox
etc...