En vim, ¿por qué se :-1j
une a la línea de arriba?
por ejemplo, :g/^ /-1j
para unir todas las líneas que comienzan con un espacio.
Los comandos son más fáciles de recordar cuando entiendes cómo se producen y en este caso esperaba:g/^ /-1J
-1
mover para pasar a la línea de arriba y J
unirse con la línea de abajo.
Respuesta1
No puedes usar un comando normal en la línea de comandoscomo es.
En :g/^ /-1j
, j
está la abreviatura de :join
: subes una línea ( -1
, podría ser -
) y ejecutas :join
.
En :g/^ /-1J
, J
no significa nada para Vim: estás usando un comando en modo normal fuera de su contexto, por lo que, básicamente, no hace nada después -1
excepto mostrar un claro mensaje de error.
Vim espera un comando Ex, no un comando de modo normal.
Su confusión puede deberse al hecho de que los dos puntos solo se necesitan una vez, por lo que no reconoce los comandos Ex. Si agregamos un par de dos puntos, el comando completo probablemente tendría más sentido para usted:
:g/^ /:-1:j
Para usar comandos del modo normal en la línea de comandos, use :norm
:
:g/^ /-1norm J
Respuesta2
Hay dos tipos de comandos en vi
. Existen comandos que se pueden invocar directamente desde el modo de comando en cualquier parte del archivo (no estoy seguro de si hay un nombre específico para este tipo de comandos), y hay comandos que provienen de ex
que operan específicamente en líneas (no en personajes) y requieren un :
personaje para invocarlos.
Normalmente, solo ex
se pueden utilizar los comandos con el :g
comando.