Mostrando o histórico de comandos com showcmd

11

Ao usar o set showcmdVim, mostra comandos parciais na última linha da tela. Por exemplo, no modo Normal, ao digitar o comando, dt.a última linha é exibida dte, quando você pressiona .o comando, é concluída e, portanto, nada é mostrado.

Existe uma maneira de mostrar comandos completos? Por exemplo, ao digitar dt.gU(, primeiro dt.seria mostrado; e ao começar a digitar o segundo comando, o primeiro seria limpo, de modo que, no final, apenas gU(seria exibido.

Isso pode ser útil, por exemplo, para ilustrar GIFs; e verificar se você digitou o que queria se encontrar algum resultado inesperado.

Gonçalo Ribeiro
fonte
11
O que é um comando completo? O dté mostrado porque é o operador atual pendente. Depois que uma moção é apresentada, não é mais um operador pendente. Suponha que fomos mais longe, e fizemos mais dt.gU(gu)dawou menos. Tudo isso é "um comando completo", ou são quatro comandos completos, ou algo mais?
Davidlowryduda 12/02
@mixedmath para mim, que contaria como 4 comandos. O segundo parágrafo da resposta tenta desambiguar o que quero dizer.
Gonçalo Ribeiro
2
Da perspectiva do Vim, dt.gU(existem 2 comandos: dt. e gU(.... Então, o que você realmente deseja é mostrar algum tipo de histórico de comandos (o Vim já está mostrando os "comamnds completos").
Martin Tournoij 12/02/2015
@Carpetsmoker, sim, isso pode ser o que eu quero. Obrigado por editar o título da pergunta.
Gonçalo Ribeiro
3
Venho cutucando o código fonte do Vim trabalhando no histórico normal . Em src/normal.cchamadas de código clear_showcmd()em vários lugares ( normal_cmd(), do_pending_operator(), end_visual_mode()). Estou brincando de despejar em um arquivo showcmd_bufnesses pontos, o que parecia muito bom, mas me garante que você não poderá obter o que deseja sem modificar da mesma forma o código-fonte do Vim e reconstruí-lo. Claro, fazer isso pode valer a pena o aborrecimento de criar seus gifs.
John O'M.

Respostas:

9

Não consegui encontrar nenhuma maneira de fazer isso em um Vim comum. No entanto, se você estiver disposto a corrigir o Vim, o seguinte poderá funcionar para você.

O patch muito simples (aplicado ao Vim-7.4.052) desativa a atualização real na tela que limpa o histórico no final de um comando normal. Isso é feito retornando se está ou não showcmd_is_cleardefinido antes da atualização da exibição. (Alternativamente, você pode comentar a declaração se e deixar apenas o original returnlinha. Nota : O patch abaixo não colar muito bem, você pode ter que aplicar isso à mão, embora seja apenas uma frase curta. Nota : Não comentei o real display_showcmd()porque ele parece ser usado no modo visual para atualizar a exibição do número de linhas selecionadas ou outras possíveis outras coisas.Não testei extensivamente isso.

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

O resultado fica assim:

Screencast mostrando o patch

Algumas coisas interessantes a serem observadas:

  • Isto mostra até mesmo movimentos simples, como j, k, b, etc.
  • O xcomando realmente se torna dlno showcmd_buf.
  • Comandos que alteram a linha inferior obliteram a área showcmd (por exemplo, usando o :comando ou entrando no modo de inserção (pelo menos na minha configuração))
  • O programa de captura parou de gravar muitos traços depois que eu digitei a ", mas minha sequência de teclas fica visível na janela do vim para o meu arranque especificado de registro longo.
  • Não mostrado no elenco, mas bater escno modo normal mostra ^[na área showcmd
John O'M.
fonte
4

Além da solução John , há outra maneira de mostrar todas as teclas pressionadas no vim pressionadas usando o -wparâmetro que registra todos os caracteres digitados no arquivo. O problema é que o vim grava pressionamentos de teclas somente quando você sai do Vim. É assim que o VimGolf funciona.

Para contornar isso, Kana Natsuno criou esse patch de linha única , que desativa o buffer da -wopção, para que você tenha acesso ao fluxo de pressionamentos de teclas em tempo real. Então é uma questão de lê-los (por exemplo tail -f), analisar ou você pode tentar exibi-los na barra de status ( :set statusline).

Confira uma versão personalizada do Vim usando o ramo de pressionamentos de teclas ao vivo do Drew do MacVim, para obter o fluxo em tempo real de pressionamentos de teclas.

Fonte: Vimprint - um analisador de pressionamento de tecla Vim no blog Drew Neil

Isso é útil se você deseja revelar as teclas pressionadas pelo Vim em tutoriais em vídeo ou GIFs.

kenorb
fonte