2012-01-19 10 views
37

Esiste un comando che mostra quale era l'ultimo comando in modalità normale?Vim "mostra il mio ultimo comando" comando?

Supponiamo che io abbia colpito accidentalmente la chiave casuale e ottenuto un risultato inaspettato. Certo che posso annullare, ma potrei rivelare quale tasto è stato premuto e come è stato interpretato?

+1

La cosa migliore che riesco a trovare è questa: ': echo v: count. v: operator' – sehe

+0

Il punto (.) ripete l'ultimo comando immesso in modalità normale. Vedi http://vim.runpaint.org/editing/repeating-commands/ –

+1

Sì, ma questo non mostrerebbe il comando ripetuto. – dvs

risposta

10

Il testo dell'ultimo comando è memorizzato nel registro .. È possibile visualizzare tutti i registri per : display. Sfortunatamente non dice quello che ha iniziato il normale comando.

Per visualizzare i comandi da : (modalità di comando) è possibile utilizzare : hist o q: che è limitato all'ultima 20 (di default).

Un'altra possibilità è di salvare il buffer di annullamento : wundo undo.bin - ma il buffer di annullamento è binario.

Ma nessuno di questi in realtà risponde alla tua domanda. Sono curioso di poterlo fare.

+0

Questo registro memorizza l'ultimo testo inserito (dopo "I, A, i, a, s, S, c, C") – Benoit

6

È difficile conoscerlo. È possibile giocare con le variabili:

v:operator 
v:count (and v:prevcount) 
v:register 

Ma non è possibile ottenere completamente l'ultimo comando di modalità normale emesso.

Tuttavia, se si desidera registrare sistematicamente tutto ciò che si digita mentre si è in Vim, è possibile avviare vim -W ~/.vim-last-scriptout (una versione di Windows: vim -W "%HOMEPATH%\Vim\.last-scriptout) È possibile eseguire l'alias nella shell su un computer UNIX. Ogni singolo tasto, o tasto di controllo, sarà registrato in quel file. Nota che se ti capita di utilizzare gvim o vim -g (la GUI) potresti encounter this bug.

Se si desidera riprodurre questo file è possibile utilizzare :source! (con il punto esclamativo) o l'opzione -s dalla riga di comando.

Su Windows ho impostato gvimportable.exe -W gvim_directory\last_scriptout come editor predefinito nel mio programma Commander (FreeCommander). In questo modo posso sempre ricordare ciò che ho digitato per fare qualcosa e ripetere una sequenza di comandi su un altro file. Ovviamente ho un'altra scorciatoia per aprire Vim e suonare lo scriptout.

Nota che il file potrebbe essere scritto solo quando Vim è uscito, quindi devi perdere la sessione per sapere cosa hai fatto.

40

Colpire i due punti (:) e quindi utilizzare la freccia su per tornare indietro ai comandi precedenti. Puoi anche usare le frecce su/giù per muoverti nella lista.

+0

Risposta perfetta. Questo ha bisogno di più upvotes! –

+1

Questo non ha funzionato per me per qualche motivo. La cronologia risultante è stata impostata su 0. La soluzione era eseguire ': set history = 100' e quindi sono stato in grado di visualizzare la freccia su per visualizzare i comandi precedenti. – Jim

+0

Ho cercato per anni di capire come uscire da questa modalità. Esc non funziona. Sembra: a volte funziona, ma non sempre. Mi blocco sempre in questa modalità. – devios1

25

q: ti mostrerà la cronologia dei comandi in Vim. q/ ti mostrerà la cronologia delle ricerche

+5

Quindi, ecco perché questa funzione si apre saltuariamente di volta in volta. (È il contrario di ': q'). Non avrei saputo che esistesse per cercarlo diversamente. – felwithe

+1

OMG. Questo mi ha perseguitato per così tanto tempo. Non riuscivo a capire quale fosse il vero comando (': w ', ': q ', ecc. Quindi non sapevo cosa cercare su google. Haha. Grazie! – rgin

+1

I * always * si blocca in questa modalità. Come si esce da esso? Esc non funziona e questo mi fa davvero impazzire. – devios1