Vim - mappe la dernière commande shell à la clé

10

Existe-t-il un moyen de mapper leader-r pour répéter la dernière commande envoyée à bash?

Par exemple, lorsque je travaille avec des fichiers C, je voudrais compiler et exécuter un programme à partir de vim sans taper:! Make ou gcc.

Je sais que je peux lier une commande spécifique à la clé, mais cela ne fonctionnera pas pour d'autres types de fichiers.

camabeh
la source

Réponses:

9

La :!!commande répète le dernier :!{cmd}. Il est même disponible en vénérable ol ' vi .

Ingo Karkat
la source
1

Edit: la réponse d'Ingo Karkat est bien meilleure. ... Je supprimerais ce message s'il n'était pas accepté (ce qui signifie que je ne peux pas).

Voici une solution. Il ne recherche que les 100 dernières commandes, évidemment, vous pouvez modifier ce nombre (l'indexation de l'historique commence à -1, qui est la dernière commande que vous avez tapée, donc plus le nombre est bas, plus la recherche est poussée).

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
la source
Je préfère ne pas le supprimer car si je le fais, cela laissera une question sans réponse. J'ai voté pour la réponse d'Ingo qui a maintenant plus de votes que la vôtre. Compte tenu de la clause de non-responsabilité que vous avez ajoutée, la suppression semble un peu sévère. Vous ne savez jamais qui pourrait trouver cela utile. Si vous y tenez tant, laissez un commentaire au PO lui demandant d'accepter la réponse d'Ingo à la place. Ensuite, si vous le souhaitez, vous pouvez supprimer le vôtre.
terdon