Eu sei que posso usar .
para repetir o último comando de edição.
Existe uma maneira de repetir o último comando de manipulação da interface do usuário? Por exemplo, eu posso escrever 10<C-W>-
para reduzir uma janela por dez linhas. Seria bom para ser capaz de imprensa ⟨ alguma chave ⟩ repetir facilmente este comando se eu quiser reduzi-lo mais.
repeated-commands
wchargin
fonte
fonte
fz
e depois10;
? Que tal:tabm +1
? Todos estes terão que ser de caixa especial?Respostas:
O comando dot
.
funciona porque o Vim "acompanha" os comandos que alteram o conteúdo dos buffers. Se você executar:echo b:changedtick
, você o verá incrementando a cada alteração no buffer atual.Mas o Vim não "acompanha" os comandos que não são de edição. Portanto, não, o que você está pedindo não pode ser feito.
fonte
Por padrão, não há como fazer isso no vim porque o vim não controla o wincmd executado anteriormente. No entanto, é possível fazer isso através de alguns mapeamentos inteligentes:
Observe que, se você tiver algum mapeamento em uso,
<C-w>
ele só poderá ser repetido se não for danore
variedade. Quaisquer wincmds emitidos usando:wincmd
não serão repetidos. Além disso, quaisquer wincmds que contenham mais de um caractere não podem ser executados (como<C-w>gf
) .Tópicos de ajuda relevantes
:help v:count
:help getchar()
:help nr2char()
:help expr1
:help :wincmd
:help :execute
:help :for
:help :map-<silent>
:help c_CTRL-U
:help <SID>
fonte
.
se comporta com uma contagem. Quando uma contagem é fornecida.
, a contagem anterior é ignorada. Então,2dd
seguido por3.
excluiria 2 linhas e depois 3 linhas; por outro lado, com os seus mapeamentos,2<C-w>-
seguido por3Q
diminuiria a janela por 2 linhas e depois por 6 (= 2x3) linhas. Esse comportamento é bom, mas é bom usar comandos Vim internos análogos ao escolher como um comando personalizado deve se comportar.O plugin submode pode ajudar com isso. Você pode definir um "submodo" digitado digitando
<C-W>-
, no qual você definiu-
(e talvez+
) para continuar redimensionando a janela.fonte
Há outro plugin chamado repmo.vim ("repetir movimentos") que pode fazer o que você deseja.
Mas você precisará especificar quais movimentos (ou ações em geral) você deseja repetir. O meu está atualmente configurado assim:
Então, depois de fazer 5 CTRL-W +, posso clicar ;para repeti-lo quantas vezes quiser.
O plug-in funciona criando mapeamentos para cada uma das chaves especificadas.
Quando
f
out
são usados, os mapeamentos;
e,
são limpos de volta ao seu comportamento padrão.Acho o mapeamento
g;
especialmente útil para voltar a um ponto de edição anterior. g; ; ; ;fonte
,
age imediatamente e5,
também funciona conforme o esperado. É possível que você tiver definido omapleader
que,
?