Seu comportamento desejado só acontece em GVim / MacVim, que vem com emulação de terminal leve. Quando executado em seu emulador de terminal, o Vim é suspenso e ls é executado no shell pai do Vim. fg é de fato o caminho certo para voltar ao Vim.
Note que você pode obter uma lista de diretórios muito mais útil com o plug-in Netrw do Vim. Em vez de :!ls , faça :Ex .
Veja :help netrw .