No vim, por que :-1j
juntar-se à linha acima?
por exemplo, :g/^ /-1j
para juntar todas as linhas que começam com um espaço.
Os comandos são mais fáceis de lembrar quando você entende como eles acontecem e neste caso eu esperava:g/^ /-1J
-1
move para ir para a linha acima e J
juntar-se à linha abaixo.
Responder1
Você não pode usar um comando normal na linha de comandocomo é.
Em :g/^ /-1j
, j
é a abreviatura de :join
: você sobe uma linha ( -1
, pode ser -
) e executa :join
.
Em :g/^ /-1J
, J
não significa nada para o Vim: você está usando um comando de modo normal fora de seu contexto, então, basicamente, ele não faz nada depois, -1
exceto ecoar uma mensagem de erro clara.
O Vim espera um comando Ex, não um comando de modo normal.
Sua confusão pode vir do fato de que os dois pontos são necessários apenas uma vez, portanto você não reconhece os comandos Ex. Se adicionarmos alguns dois pontos, o comando completo provavelmente faria mais sentido para você:
:g/^ /:-1:j
Para usar comandos do modo normal na linha de comando, use :norm
:
:g/^ /-1norm J
Responder2
Existem dois tipos de comandos no vi
. Existem comandos que podem ser invocados diretamente do modo de comando em qualquer lugar do arquivo (não tenho certeza se existe um nome específico para esses tipos de comandos), e existem comandos que vêm dele e ex
operam especificamente em linhas (não em personagens) e exigem um :
personagem para invocá-los.
Normalmente, apenas os ex
comandos podem ser usados com o :g
comando.