Vim - ordnet den letzten Shell-Befehl dem Schlüssel zu

10

Gibt es eine Möglichkeit, Leader-R zuzuordnen, um den letzten an Bash gesendeten Befehl zu wiederholen?

Wenn ich zum Beispiel mit C-Dateien arbeite, möchte ich ein Programm aus vim kompilieren und ausführen, ohne Folgendes einzugeben :! Make oder gcc.

Ich weiß, dass ich einen bestimmten Befehl an den Schlüssel binden kann, aber er funktioniert nicht für andere Dateitypen.

camabeh
quelle

Antworten:

9

Der :!!Befehl wiederholt den letzten :!{cmd}. Es ist sogar im ehrwürdigen alten vi erhältlich .

Ingo Karkat
quelle
1

Edit: Ingo Karkats Antwort ist viel besser. ... Ich würde diesen Beitrag löschen, wenn er nicht akzeptiert würde (was bedeutet, dass ich nicht kann).

Hier ist eine Lösung. Es werden nur die letzten 100 Befehle durchsucht. Natürlich können Sie diese Nummer ändern (die Verlaufsindizierung beginnt bei -1, dem letzten Befehl, den Sie eingegeben haben. Je niedriger die Nummer, desto weiter wird gesucht).

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
quelle
Ich möchte dies lieber nicht löschen, da sonst eine Frage unbeantwortet bleibt. Ich habe Ingos Antwort positiv bewertet, die jetzt mehr Stimmen hat als Ihre. Angesichts des von Ihnen hinzugefügten Haftungsausschlusses erscheint das Löschen etwas hart. Sie wissen nie, wer dies nützlich finden könnte. Wenn Sie sich so stark dafür fühlen, hinterlassen Sie dem OP einen Kommentar und bitten Sie ihn, stattdessen Ingos Antwort zu akzeptieren. Wenn Sie dies dennoch möchten, können Sie Ihre löschen.
Terdon