Vim - son kabuk komutunu tuşla eşle


10

Lider-r'yi bash'a gönderilen son komutu tekrarlamak için eşlemenin bir yolu var mı?

Örneğin, C dosyalarıyla çalışırken vim'den program derlemek ve çalıştırmak istiyorum:! Make veya gcc.

Belirli bir komutu anahtara bağlayabildiğimi biliyorum ancak diğer dosya türleri için çalışmaz.

Yanıtlar:


9

:!!Komut son tekrarlar :!{cmd}. Saygıdeğer ol ' vi'da bile mevcuttur .


1

Edit: Ingo Karkat'ın cevabı çok daha iyi. ... kabul edilmediyse bu yayını silebilirdim (yani yapamam).

İşte bir çözüm. Sadece son 100 komutu arar, açıkçası, bu sayıyı değiştirebilirsiniz (Geçmiş endeksleme yazdığınız son komut olan -1 ile başlar, bu yüzden sayı ne kadar düşük olursa o kadar fazla aranır).

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>

Bunu silmeyi tercih etmem, çünkü eğer yaparsam, bu cevaplanmamış bir soru bırakacaktır. Şimdi sizinkinden daha fazla oy alan Ingo'nun cevabını iptal ettim. Eklediğiniz sorumluluk reddi göz önüne alındığında, silme işlemi biraz zor görünüyor. Bunu kimin yararlı bulabileceğini asla bilemezsiniz. Bu konuda çok güçlü hissediyorsanız, OP'ye Ingo'nun cevabını kabul etmelerini isteyen bir yorum bırakın. Ardından, yine de isterseniz, kendinizinkini silebilirsiniz.
terdon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.