Upgrading homebrew vim and tmux without breaking them

By default, when Homebrew upgrades a package, it removes the older version. This is generally the right thing to do, but it will badly affect some running programs, e.g. tmux and vim, because the binary no longer exists. tmux cannot create a new window, and vim cannot run any external programs. The error message from vim is very confusing and it took me a lot of debugging to figure out the problem: it says E282: Cannot read from .... where .... is a temp file. I reported this for vim: https://github.com/vim/vim/issues/10331

Mitigating this problem is straightforward: stop Homebrew cleaning up tmux and vim. You do this by setting the environment variable HOMEBREW_NO_CLEANUP_FORMULAE to a comma-separated list of packages not to clean up, e.g. export HOMEBREW_NO_CLEANUP_FORMULAE=tmux,vim. You will want to manually clean up old binaries occasionally with brew cleanup tmux vim.