When vim uses the shell given a colon !command, it does so through the /tmp filesystem. How do you force vim to use ~/.vim/tmp/ instead? It also uses /tmp for help files when zcat is required to read some of the manuals.
TMPDIR doesn't work for this case.
Have you tried setting the
TMPDIR
environment variable? That's the standard way (across most "Unix style" programs I've had to worry about it for) of specifying an alternate location for temporary files.