The problem is that MacVim only provides some bare-bones facilities for emulating a terminal, and doesn't support "advanced" features such as a wide range of common terminal escape characters. You'll get the same problem when running :shell
from Gvim on Windows or Linux.
Vim doesn't change the TERM
when using :shell
. You can still set it yourself. See: How do I know I am in a shell from vi command :sh?.
:let $TERM = 'dumb'
:shell
This should make your workaround in the zshrc file work. You will probably run in to problems with other commands though. Also see How do I know I am in a shell from vi command :sh?
You'll have to either run Vim from a terminal or use NeoVim – which includes a full terminal emulator – if you want to use a fully-functional :shell
.