Vim - memetakan perintah shell terakhir ke tombol


10

Apakah ada cara untuk memetakan leader-r untuk mengulangi perintah terakhir yang dikirim ke bash?

Misalnya, ketika bekerja dengan file C saya ingin mengkompilasi dan menjalankan program dari vim tanpa mengetik:! Make atau gcc.

Saya tahu saya bisa mengikat perintah khusus ke kunci tetapi tidak akan bekerja untuk jenis file lainnya.

Jawaban:


9

The :!!perintah mengulangi yang terakhir :!{cmd}. Itu bahkan tersedia di ol terhormat' vi .


1

Sunting: Jawaban Ingo Karkat jauh lebih baik. ... Saya akan menghapus posting ini jika tidak diterima (yang berarti saya tidak bisa).

Inilah salah satu solusinya. Ini hanya mencari 100 perintah terakhir, jelas, Anda dapat mengubah nomor ini (Pengindeksan sejarah dimulai pada -1, yang merupakan perintah terakhir yang Anda ketikkan, sehingga semakin rendah angkanya, semakin dicari).

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>

Saya lebih suka tidak menghapus ini karena jika saya lakukan, itu akan meninggalkan pertanyaan yang belum terjawab. Saya telah membatalkan jawaban Ingo yang sekarang memiliki lebih banyak suara daripada jawaban Anda. Mengingat penafian yang telah Anda tambahkan, penghapusan tampaknya agak keras. Anda tidak pernah tahu siapa yang mungkin menganggap ini berguna. Jika Anda merasa sangat kuat tentang hal itu, tinggalkan komentar ke OP dan minta mereka untuk menerima jawaban Ingo. Kemudian, jika Anda masih ingin, Anda dapat menghapus milik Anda.
terdon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.