
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, 1L
moverá um caractere para a direita.
A linha atual pode ser movida para cima ou para baixo usando :m+N
ou :m-N
, no entanto, você deve usar :m-2
para obter o efeito oposto de :m+1
.
Também estou usando o VSVim no Visual Studio 2019 e 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 3gt
mudará para a terceira guia. Se eu estiver na terceira guia (mais à direita), 2gT
voltarei para a primeira guia, o que 3gT
resulta 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, 47G
para 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-G
imprimirá informações sobre o arquivo aberto no buffer atual. 1 CTRL-G
imprimirá 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-G
para 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,1l
moverá 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 +N
ou:m -N
, no entanto, você deve usar:m -2
para 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 :m
comando moverá a linha atualabaixoa linha especificada pelo endereço.
Se você estiver na linha 47, você usaria :m 48
para 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 46
dependeria 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 gt
comando.
Por outro lado, não há muita necessidade do gT
comando 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, gt
e gT
, e ter menos comandos é um tanto importante, pois o Vim já tem muitos deles eles para nos lembrarmos!