This is probably best done using
vim's client-server model. There's some good guidance about using it in
Firstly, you'll need a
vim client compiled with the
+clientserver option. If your distribution doesn't package it this way, get the source (through
abs, et al) and add that option.
Once that's done, you'll need to rebind your keys in
tmux so that when you change windows it also sends something like the following to the active window:
vim --servername foo --remote-send '<C-\><C-N>:w<CR>'
Something like the following should work (not tested):
bind-key 0 run-shell "vim --servername foo --remote-send '<C-\><C-N>:w<CR>'" \; select-window -t :0