Vim - mapeia o último comando do shell para a chave

10

Existe alguma maneira de mapear o leader-r para repetir o último comando enviado ao 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 vincular um comando específico à chave, mas não funcionará para outros tipos de arquivos.

camabeh
fonte

Respostas:

9

O :!!comando repete o último :!{cmd}. Está disponível até no venerável ol ' vi .

Ingo Karkat
fonte
1

Edit: A resposta de Ingo Karkat é muito melhor. ... Eu excluiria este post se não fosse aceito (o que significa que não posso).

Aqui está uma solução. Ele pesquisa 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 digitado, portanto, quanto menor o número, mais pesquisas serão realizadas).

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>
Martin Tournoij
fonte
Prefiro não excluir isso, pois, se o fizer, isso deixará uma pergunta sem resposta. Promovi a resposta de Ingo, que agora tem mais votos do que a sua. Dado o aviso de isenção que você adicionou, a exclusão parece um pouco dura. Você nunca sabe quem pode achar isso útil. Se você se sente tão bem com isso, deixe um comentário para o OP pedindo que ele aceite a resposta de Ingo. Então, se você ainda desejar, poderá excluir o seu.
terdon