Inconsistência de comportamento de numeração VIM

Inconsistência de comportamento de numeração VIM

Os comandos no VIM podem ser prefixados com números, mas o esquema de numeração não é consistente para algumas operações.

Prefixar os comandos de movimento para a esquerda, para baixo, para cima e para a direita (H, J, K, L) com um número faz com que o cursor salte para o local esperado, por exemplo, 1Lmoverá um caractere para a direita.

A linha atual pode ser movida para cima ou para baixo usando :m+Nou :m-N, no entanto, você deve usar :m-2para obter o efeito oposto de :m+1.

Também estou usando o VSVim no Visual Studio 2019 e estou usando os comandos gte gTpara alternar entre as guias. Se eu tiver três guias abertas e estiver na primeira guia (a mais à esquerda), o uso 3gtmudará para a terceira guia. Se eu estiver na terceira guia (mais à direita), 2gTvoltarei para a primeira guia, o que 3gTresulta em permanecer na mesma guia.

Por que é necessário usar números diferentes para obter efeitos opostos? Isso é possivelmente uma falha de design que nunca foi alterada?

Responder1

Sua observação de que há inconsistências é precisa.

Embora {count}seja usado com mais frequência para repetir uma ação, nem sempre é esse o caso. Às vezes é considerado um número absoluto, por exemplo, 47Gpara ir para a linha 47, 35|para ir para a coluna 35 da linha atual ou 90%para ir para uma linha 90% do arquivo.

Às vezes, é usado apenas para sinalizar diferentes versões do mesmo comando. Por exemplo, CTRL-Gimprimirá informações sobre o arquivo aberto no buffer atual. 1 CTRL-Gimprimirá essas informações, mas mostrará o caminho completo para o arquivo. 2 CTRL-G(ou qualquer número de contagem maior) imprimirá o mesmo e também incluirá o número do buffer na saída. (Ver:help CTRL-Gpara detalhes.)

Abordando seus exemplos específicos:

Prefixar os comandos de movimento para a esquerda, para baixo, para cima e para a direita ( hjkl) com um número resulta no cursor saltando para o local esperado, por exemplo, 1lmoverá um caractere para a direita.

Este é o uso típico de {count}, como uma repetição do comando.

A linha atual pode ser movida para cima ou para baixo usando :m +Nou :m -N, no entanto, você deve usar :m -2para obter o efeito oposto de :m +1.

Primeiro, isso não é realmente um {count}, mas um {address}. Este é realmente consistente (mesmo que você possa achar estranho à primeira vista). O :mcomando moverá a linha atualabaixoa linha especificada pelo endereço.

Se você estiver na linha 47, você usaria :m 48para movê-lo abaixo da linha seguinte. Como a linha atual foi movida, aquela que costumava ser 48 agora é 47, e a linha atual é 48. Se agora você quiser que ela volte ao local original, você precisa :m 46, já que ela vaiabaixoa linha com o endereço. +1é simplesmente um atalho para 48 (começando na linha 47) e -2é apenas uma abreviação para 46 (agora na linha 48). Faz sentido, certo?

Se o Vim tivesse decidido mudar a linhaacimao endereço se o endereço o preceder, então o comportamento de um comando como esse :m 46dependeria se a linha atual estava acima ou abaixo dele e isso não seria ótimo. Então Vim decidiu que a consistência nesse fator era mais importante.

Estou usando os comandos gt e gT para alternar entre as guias. Se eu tiver três guias abertas e estiver na primeira guia (a mais à esquerda), o uso do 3gt mudará para a terceira guia. Se eu estiver na terceira guia (mais à direita), o 2gT voltará para a primeira guia, enquanto o 3gT resultará em permanecer na mesma guia.

Sim, este é realmente inconsistente, mas há uma razão para isso.

Ao implementar as guias, os autores do Vim decidiram que era mais importante ter uma maneira rápida de mudar para a guia "N" em vez de pular as guias "N". É raro que você precise fazer o último. Então eles decidiram usar o {count}como um número de tabulação absoluto para o gtcomando.

Por outro lado, não há muita necessidade do gTcomando implementar omesmocomportamento (você já tinha um pressionamento de tecla mais fácil para isso), então o significado de repetição {count}foi deixado lá, então se alguém quiser pular as guias "N", esse comando pode ajudar ...

Observe que, desta forma, é possível ter os três comandos (próxima aba, aba anterior, ir para a aba "N") enquanto executa apenas dois comandos, gte gT, e ter menos comandos é um tanto importante, pois o Vim já tem muitos deles eles para nos lembrarmos!

informação relacionada