Mostra la cronologia dei comandi con showcmd


11

Quando si utilizza set showcmdVim mostra i comandi parziali nell'ultima riga dello schermo. Ad esempio, in modalità Normale quando si digita il comando viene visualizzata dt.l'ultima riga dte quindi, quando si preme .il comando è completo e quindi non viene mostrato nulla.

C'è un modo per mostrare i comandi completi? Ad esempio, durante la digitazione dt.gU(, dt.verrà mostrato per primo; e quando si inizia a digitare il secondo comando, il primo verrebbe cancellato, in modo che alla fine gU(venga visualizzato solo.

Questo potrebbe essere utile ad esempio per illustrare GIF; e verificare di aver digitato ciò che si desidera se si riscontrano risultati imprevisti.


1
Cos'è un comando completo? L' dtarbitro mostra perché è l'operatore corrente in attesa. Una volta che viene dato un movimento, non è più un operatore in sospeso. Supponiamo che siamo andati oltre e l'abbiamo fatto dt.gU(gu)daw. Tutto questo è "un comando completo" o sono quattro comandi completi o qualcos'altro?
davidlowryduda,

@mixedmath per me conterebbe come 4 comandi. Il secondo paragrafo della risposta cerca di chiarire cosa intendo.
Gonçalo Ribeiro,

2
Dal punto di vista di Vim, ci dt.gU(sono 2 comandi: dt. e gU(.... Quindi quello che vuoi davvero è mostrare una sorta di cronologia dei comandi (Vim sta già mostrando i "comandi completi").
Martin Tournoij,

@Carpetsmoker, sì, potrebbe essere quello che voglio. Grazie per aver modificato il titolo della domanda.
Gonçalo Ribeiro,

3
Ho cercato il codice sorgente di Vim lavorando sulla cronologia normale . Nelle src/normal.cchiamate di codice clear_showcmd()in diversi luoghi ( normal_cmd(), do_pending_operator(), end_visual_mode()). Sto giocando con il dumping su un file showcmd_bufin quei punti, che sembrava piuttosto buono, ma mi rende abbastanza sicuro che non puoi ottenere quello che vuoi senza modificare in modo simile il codice sorgente di Vim e ricostruirlo. Ovviamente, farlo potrebbe valere la pena di realizzare le tue gif.
John O'M.

Risposte:


9

Non riuscivo a trovare alcun modo per farlo in un normale Vim. Tuttavia, se sei disposto a patchare Vim, potrebbe essere utile quanto segue.

La patch molto semplice (applicata contro Vim-7.4.052) disabilita l'effettivo aggiornamento dello schermo che cancella la cronologia alla fine di un normale comando. Lo fa restituendo se showcmd_is_clearè impostato o meno prima di aggiornare il display. (in alternativa, è possibile commentare l'istruzione if e lasciare solo quella originale returnriga. Nota : La patch qui sotto non ha incollare molto bene, potrebbe essere necessario applicare questo a mano, anche se è solo una breve one-liner. nota : ho non commento la reale display_showcmd()perché sembra essere usato in modalità visiva per aggiornare la visualizzazione del numero di linee selezionate o altre eventualmente altre cose non ho testato questo..

--- src/normal.c    2015-02-14 00:21:23.286352257 -0500
+++ src/normal.c    2015-02-14 00:21:25.238352173 -0500
@@ -4029,6 +4029,7 @@
    /* Don't actually display something if there is nothing to clear. */
    if (showcmd_is_clear)
        return;
+   return;
     }

     display_showcmd()

Il risultato è simile al seguente:

Screencast che mostra la patch

Alcune cose interessanti da notare:

  • Questo dimostra anche movimenti semplici, come j, k, b, etc.
  • Il xcomando diventa effettivamente dlin showcmd_buf.
  • I comandi che cambiano la linea di fondo cancellano l'area showcmd (ad esempio, usando il :comando o accedendo alla modalità di inserimento (almeno nella mia configurazione))
  • Il programma di acquisizione ha interrotto la registrazione di molti tratti dopo aver digitato a ", ma la sequenza di tasti è visibile nella finestra di vim per il mio registro lungo specificato.
  • Non mostrato nel cast, ma colpire escin modalità normale mostra ^[nell'area showcmd

4

Oltre alla soluzione John , c'è un altro modo per mostrare tutte le sequenze di tasti di VIM che sono state premute usando il -wparametro che registra tutti i caratteri digitati nel file. Il problema è che vim scrive i tasti solo quando si esce da Vim. Ecco come funziona VimGolf .

Per ovviare a questo, Kana Natsuno ha ideato questa patch a linea singola , che disabilita il buffering -wdell'opzione, in modo da avere accesso al flusso in tempo reale di sequenze di tasti. Quindi si tratta di leggerli (ad esempio tail -f), analizzare o provare a visualizzarli nella barra di stato ( :set statusline).

Dai un'occhiata a una build personalizzata di Vim utilizzando il ramo di MacVim di Drew in streaming live-stream , per ottenere il flusso in tempo reale di sequenze di tasti.

Fonte: Vimprint - un parser di battitura di tasti Vim sul blog di Drew Neil

Ciò è utile se desideri rivelare i tasti premuti da Vim in video tutorial o GIF.

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.