Editar: la respuesta de Ingo Karkat es mucho mejor. ... Eliminaría esta publicación si no fuera aceptada (lo que significa que no puedo).
Aquí hay una solución. Solo busca los últimos 100 comandos, obviamente, puede cambiar este número (la indexación del historial comienza en -1, que es el último comando que escribió, por lo que cuanto menor sea el número, más se buscará).
fun! LastCommand()
let l:i = -1
while l:i > -100
let l:cmd = histget("cmd", l:i)
if strpart(l:cmd, 0, 1) == "!"
let l:i = 1
execute l:cmd
break
endif
let l:i -= 1
endwhile
if l:i < 1 | echoerr "No command found" | endif
endfun
nnoremap <Leader>r :call LastCommand()<CR>