Affichage de l'historique des commandes avec showcmd

11

Lorsque vous utilisez set showcmdVim, les commandes partielles s'affichent sur la dernière ligne de l'écran. Par exemple, en mode normal lors de la saisie de la commande, dt.la dernière ligne s'affiche dt, puis lorsque vous appuyez sur .la commande est terminée et donc rien n'est affiché.

Existe-t-il un moyen d'afficher les commandes complètes? Par exemple, lors de la frappe dt.gU(, le premier dt.sera affiché; et lorsque vous commencez à taper la deuxième commande, la première est effacée, de sorte qu'à la fin, seul gU(s'affiche.

Cela pourrait être utile, par exemple, pour illustrer des GIF; et pour vérifier que vous avez tapé ce que vous vouliez si vous faites face à un résultat inattendu.

Gonçalo Ribeiro
la source
1
Qu'est-ce qu'une commande complète? Le dts'affiche car il s'agit de l'opérateur actuel en attente. Une fois qu'il a reçu une motion, ce n'est plus un opérateur en attente. Supposons que nous allions plus loin et que nous ayons fait quelque dt.gU(gu)dawchose. Est-ce que tout cela est "une commande complète", ou est-ce quatre commandes complètes, ou autre chose?
davidlowryduda
@mixedmath pour moi qui compterait comme 4 commandes. Le deuxième paragraphe de la réponse tente de lever l'ambiguïté de ce que je veux dire.
Gonçalo Ribeiro
2
Du point de vue de Vim, il dt.gU(y a 2 commandes: dt. et gU(.... Donc, ce que vous voulez vraiment, c'est afficher une sorte d'historique des commandes (Vim montre déjà les "comamnds complets").
Martin Tournoij
@Carpetsmoker, oui, c'est peut-être ce que je veux. Merci d'avoir édité le titre de la question.
Gonçalo Ribeiro
3
J'ai fouillé dans le code source de Vim en travaillant sur l' historique normal . Dans src/normal.cles appels de code clear_showcmd()à plusieurs endroits ( normal_cmd(), do_pending_operator(), end_visual_mode()). Je joue avec le dumping dans un fichier showcmd_bufà ces points, ce qui semblait assez bon, mais me fait à peu près sûr que vous ne pouvez pas obtenir ce que vous voulez sans modifier de la même manière le code source de Vim et le reconstruire. Bien sûr, cela pourrait valoir la peine de créer vos gifs.
John O'M.

Réponses:

9

Je n'ai trouvé aucun moyen de le faire dans un Vim ordinaire. Cependant, si vous êtes prêt à patcher Vim, ce qui suit peut fonctionner pour vous.

Le correctif très simple (appliqué contre Vim-7.4.052) désactive la mise à jour réelle de l'écran qui efface l'historique à la fin d'une commande normale. Il le fait en retournant s'il showcmd_is_clearest défini ou non avant la mise à jour de l'affichage. (Alternativement, vous pouvez commenter l'instruction if et ne laisser que la returnligne d' origine . note : Le patch ci-dessous ne s'est pas très bien collé; vous devrez peut-être l'appliquer à la main, bien qu'il ne s'agisse que d'une ligne courte. note : Je n'ai pas commenté le réel display_showcmd()car il semble être utilisé en mode visuel pour mettre à jour l'affichage du nombre de lignes sélectionnées ou d'autres choses éventuellement. Je n'ai pas beaucoup testé cela.

--- 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()

Le résultat ressemble à ceci:

Screencast montrant le patch

Quelques choses intéressantes à noter:

  • Cela montre même des mouvements simples, comme j, k, b, etc.
  • La xcommande devient dlen fait dans le showcmd_buf.
  • Les commandes qui modifient la ligne du bas effacent la zone showcmd (par exemple, en utilisant la :commande ou en entrant en mode d'insertion (au moins dans ma configuration))
  • Le programme de capture a cessé d'enregistrer de nombreux coups après avoir tapé a ", mais ma séquence de touches est visible dans la fenêtre vim pour mon long yank spécifié.
  • Non affiché dans le casting, mais frapper escen mode normal apparaît ^[dans la zone showcmd
John O'M.
la source
4

En dehors de la solution John , il existe une autre façon d'afficher toutes les frappes vim qui ont été enfoncées en utilisant un -wparamètre qui enregistre tous les caractères que vous tapez dans le fichier. Le problème est que vim écrit les frappes uniquement lorsque vous quittez Vim. C'est ainsi que VimGolf fonctionne.

Pour contourner ce problème, Kana Natsuno a proposé ce correctif à ligne unique , qui désactive la mise en mémoire tampon de l' -woption, de sorte que vous avez accès à un flux de frappes en temps réel. Ensuite, il s'agit de les lire (par exemple tail -f), d'analyser ou vous pouvez essayer de les afficher dans la barre d'état ( :set statusline).

Découvrez une version personnalisée de Vim à l'aide de la branche de frappe en direct de MacVim de Drew, pour obtenir le flux de frappes en temps réel.

Source: Vimprint - un analyseur de frappe Vim sur le blog Drew Neil

Ceci est utile si vous souhaitez révéler les touches enfoncées par Vim dans des didacticiels vidéo ou GIF.

Kenorb
la source