Pregunta:
Muchas veces me encuentro con una situación en la que una línea no tiene la sangría adecuada. Ether a través de una pasta, un complemento de sangría incorrecto / no preferido o, con mayor frecuencia, espacios adicionales que compensan el valor de la sangría. Por lo general, soluciono esto con <<
o >>
la línea varias veces para arreglarlo. En el caso de espacios adicionales, haré un 100<<
luego un >>
para cada nivel de sangría que realmente desee.
La pregunta es, como el | movimiento que le permite configurar la columna por el número 10|
envía el cursor a la décima columna. ¿Cómo puedo especificar el nivel de sangría?
Un ejemplo (esto no funciona) con shiftwidth=4 expandtab
:
The quick (indent level 0)
••••Brown Fox (indent level 1)
••••••••••Jumped over the lazy dog (indent level 2 with two extra spaces)
En este caso, actualmente tengo que contar el nivel de sangría de la última línea (2) y agregar uno para los espacios adicionales, luego escribir 3<<
luego contar el nivel de sangría de lo que luego 1>>
(o usar autoindent
y el comando ==
).
Estoy pidiendo algo como 1==
para forzar que la sangría sea de nivel 1. O, en algunos casos, 0==
para eliminar una sangría por completo.
Me doy cuenta de que el ejemplo anterior tiene sangría automática en 1 o 0 líneas (respectivamente) y, por lo tanto, no hace lo que me gustaría, pero esperaba que ayudara a ilustrar mejor la pregunta.
Respuesta:
Puede utilizar el comando: :left
:
:[range]le[ft] [indent]
Alinear líneas a la izquierda en[range]
. Establece la sangría en las líneas en[indent]
(predeterminado 0). {no en Vi}
Tenga en cuenta que :left
establece la sangría en n espacios, y no tiene en cuenta el shiftwidth
de shiftwidth
ni el tabstop
, por lo que el uso de :left 8
utilizará 8 espacios.
Si desea establecer el nivel de sangría, puede definir fácilmente un comando:
command! -nargs=1 Left execute 'left ' . &sw * <args>
Uso :Left 2
establecerá la sangría en 8 espacios.
Para asignar esto a <Leader> = , puede usar:
noremap <expr> <Leader>= ':left ' . str2nr(nr2char(getchar())) * &sw . '<CR>'
No estoy seguro de si esta es la mejor manera, pero es la única forma en que puedo administrar … \ = 2 sangrará la línea actual a 8 espacios, y 5 \ = 3 sangrará las siguientes 5 líneas a 12 espacios.
Una sugerencia relacionada que también resuelve su problema es configurar la opción shiftround
. De :help 'shiftround'
'shiftwidth'
redonda a múltiplo de'shiftwidth'
. Se aplica a los comandos>
y<
. CTRL-T y CTRL-D en el modo Insertar siempre redondean la sangría a un múltiplo de'shiftwidth'
(esto es compatible con Vi).
En su ejemplo, el primer <<
se "redondeará" a 8 espacios. Entonces su problema (usando 3<<
y luego >>
) está resuelto. Y como dice la página de ayuda, también puede usar <Cd>
desde el modo de inserción.