A conclusão do comando por padrão não é reconhecida nos mapeamentos (e gravada em macros). Você pode definir uma chave alternativa na opção 'wildcharm' obscura e usá-la. No entanto, a inserção do nome do arquivo atual pode ser feita de maneira mais fácil e direta. Em vez de preencher % , basta inserir uma expressão Vimscript equivalente via <C-r> :
:nnoremap -g :!rspec <C-r>=expand('%')<cr><cr>
PS: Para lidar adequadamente com todos tipos de nomes de arquivos, use adicionalmente shellescape() :
:nnoremap -g :!rspec <C-r>=shellescape(expand('%'), 1)<cr><cr>
PPS: Espero que você não esteja digitando manualmente no mapeamento todas as vezes, mas use um plug-in de tipo de arquivo ou :autocmd para definir isso automaticamente para os buffers de teste. Eu recomendaria definitivamente automatizá-lo dessa maneira.