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

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.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım