Vim - associa il comando dell'ultima shell alla chiave


10

C'è un modo per mappare leader-r per ripetere l'ultimo comando inviato a bash?

Ad esempio, quando lavoro con i file C vorrei compilare ed eseguire il programma da VIM senza digitare:! Make o gcc.

So che posso associare un comando specifico alla chiave ma non funzionerà con altri tipi di file.

Risposte:


9

Il :!!comando ripete l'ultimo :!{cmd}. È persino disponibile in venerabile vecchio ' vi .


1

Modifica: la risposta di Ingo Karkat è molto migliore. ... Eliminerei questo post se non fosse accettato (il che significa che non posso).

Ecco una soluzione. Cerca solo gli ultimi 100 comandi, ovviamente, puoi cambiare questo numero (l'indicizzazione della cronologia inizia da -1, che è l'ultimo comando che hai digitato, quindi più basso è il numero, più si cerca).

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>

Preferirei non eliminarlo dal momento che, se lo faccio, ciò lascerà una domanda senza risposta. Ho votato a favore della risposta di Ingo che ora ha più voti dei tuoi. Dato il disclaimer che hai aggiunto, la cancellazione sembra un po 'dura. Non si sa mai chi potrebbe trovare questo utile. Se ti senti così fortemente al riguardo, lascia un commento all'OP chiedendo loro di accettare la risposta di Ingo. Quindi, se lo desideri, puoi eliminare il tuo.
terdon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.