O comando :!!
repete o último :!{cmd}
. Está até disponível em venerável ol vi .
Existe alguma maneira de mapear o leader-r para repetir o último comando enviado para o bash?
Por exemplo, ao trabalhar com arquivos C, eu gostaria de compilar e executar o programa a partir do vim sem digitar:! make ou gcc.
Eu sei que posso ligar um comando específico à chave, mas não funcionará para outros tipos de arquivos.
Edit: A resposta de Ingo Karkat é muito melhor. ... Eu gostaria exclua esta postagem se ela não foi aceita (o que significa que não posso).
Aqui está uma solução. Ele procura apenas os últimos 100 comandos, obviamente, você pode alterar esse número (a indexação do histórico começa em -1, que é o último comando que você digitou, portanto, quanto menor o número, mais ele é pesquisado).
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>
Tags vim keyboard-shortcuts