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.

Réponses:


9

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


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>

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.