Vim - mapeia o último comando shell para a chave

9

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.

    
por camabeh 06.02.2014 / 21:55

2 respostas

8

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

    
por 11.03.2014 / 15:00
1

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>
    
por 07.02.2014 / 04:51