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.

Respostas:


9

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


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>

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.