¿Cómo cambio la sangría de línea a un valor específico?


11

Muchas veces me encuentro con una situación en la que una línea no está sangrada correctamente. Ether a través de una pasta, un complemento de sangría incorrecto / no preferido, o más a menudo espacios adicionales que compensan el valor de sangría. Por lo general arreglar esto <<o >>la línea un par de veces para arreglarlo. En el caso de espacios adicionales, haré un 100<<a >>para cada nivel de sangría que realmente quiera.

La pregunta es, como el |movimiento que le permite establecer la columna por 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 y 3<<luego contar el nivel de sangría de lo que luego 1>>(o usar autoindenty ==ordenar).

Estoy pidiendo algo así como 1==forzar la sangría para que esté en el nivel de sangría 1. O, en algunos casos, 0==para eliminar una sangría por completo.

Me doy cuenta de que el ejemplo anterior hace una 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.

Respuestas:


18

Puedes usar el :leftcomando:

:[range]le[ft] [indent]
Alinear a la izquierda líneas en [range]. Establece la sangría en las líneas a [indent](valor predeterminado 0). {no en Vi}

Tenga en cuenta que :leftestablece la sangría en n espacios, y no es consciente de shiftwidtho tabstop, por :left 8lo que usará 8 espacios.

Si desea establecer el nivel de sangría, puede definir fácilmente un comando:

command! -nargs=1 Left execute 'left ' . &sw * <args>

El uso :Left 2establecerá la sangría en 8 espacios.

Para mapear esto <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 manejar ... \=2sangrará la línea actual a 8 espacios, y 5\=3sangrará las siguientes 5 líneas a 12 espacios.


Una pista relacionada que también resuelve su problema es configurar la shiftroundopción. Desde:help 'shiftround'

Sangría redonda a múltiplo de 'shiftwidth'. Aplica a >y < comandos. CTRL-T y CTRL-D en modo Insertar siempre redondean la sangría a un múltiplo de 'shiftwidth'(esto es compatible con Vi).

En su ejemplo, el primero <<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 <C-d>desde el modo de inserción.


¡Increíble! Estas soluciones funcionan a la perfección.
Sukima
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.