Sangría al siguiente nivel de sangría con >>

9

De vez en cuando tengo que trabajar con código que no esté sangrado al nivel de sangrado que tengo configurado para Vim (4 espacios por nivel), generalmente después de copiar / pegar algo en el archivo. Usualmente me las arreglo con <<y >>. El problema es que no saltan al siguiente nivel de sangría, solo suman o restan 4 espacios.

Si tengo un código como este

if condition:
    do this
   do that

haciendo >>en do thatresultará en

if condition:
    do this
       do that

Quiero que vaya a esto

if condition:
    do this
    do that

Además de hacer coincidir fácilmente la sangría de la línea anterior, quiero que salte al siguiente nivel de sangría, no agregue 4 espacios.

Esto es lo que tengo en mi .vimrc con respecto a la sangría

:set tabstop=4 shiftwidth=4 expandtab
Dumitru
fuente
Si también tiene filetype plugin indent onen su .vimrc, se aplicarán las reglas relacionadas con la sangría de tipo de archivo (y complemento). Es decir, compruebe cuál es su tabstopvalor real ( set tabstop?lo hará; lo mismo para las otras configuraciones), al editar, y cambie esos valores agregando su línea a un archivo 'después', algo así como: stackoverflow.com/a/159066/5000478
VanLaser
3
>>y, <<respectivamente, agregar y eliminar sangría que no es lo que desea. Lo que quieres es "formatear", que se hace con ==.
romainl
también podría mapear :nnoremap >> ^i<tab><esc>si realmente desea un comportamiento de tabulación>>
Wolfie
@romainl ==saltará al nivel de la línea de arriba. Si bien es bueno saberlo, no funcionaría en todos los casos que me interesen. Además de la pregunta, para qué quiero >>y <<sangrar / sangrar hasta el próximo múltiplo de ancho de cambio desde el borde en esa dirección .
Dumitru
2
No, ==usa cualquiera equalexpro equalprgpara formatear las líneas dadas.
romainl

Respuestas:

12

Cuando se utiliza uno de los comandos {count}>>, {count}<<, >{motion}o <{motion}, en algunas líneas que ya han sido sangrados, y desea que su nuevo nivel de sangría para ser un múltiplo de su 'shiftwidth'valor de opción, puede activar la 'shiftround'opción, y añadir esta línea en su vimrc:

set shiftround
usuario9433424
fuente
2

Si siempre desea >>sangrar a la siguiente pestaña y <<eliminar a la última pestaña, puede volver a vincularlos así:

:nnoremap << ^i<BS><esc>
:nnoremap >> ^i<tab><esc>

Esto moverá el cursor, pero probablemente podría hacer algunos trucos de marca para moverlo hacia atrás. ^no deja una m'marca, pero puede dejar una manualmente dentro del enlace.

Wolfie
fuente