Od czasu do czasu muszę pracować z kodem, który nie jest wcięty do poziomu wcięcia, które mam Vim ustawione na (4 spacje na poziom), zwykle po skopiowaniu / wklejeniu czegoś w pliku. Zwykle robię to z <<i >>. Problem polega na tym, że nie przechodzą do następnego poziomu wcięcia, po prostu dodają lub odejmują 4 spacje.
Jeśli mam taki kod
if condition:
do this
do that
robi >>na do thatspowoduje
if condition:
do this
do that
Chcę, żeby do tego doszło
if condition:
do this
do that
Oprócz łatwego dopasowania wcięcia powyższej linii chcę, aby przeskoczyła na następny poziom wcięcia, nie dodając 4 spacji.
Właśnie to mam w moim .vimrc odnośnie wcięcia
:set tabstop=4 shiftwidth=4 expandtab
>>i <<odpowiednio dodaj i usuń wcięcie, które nie jest tym, czego chcesz. To, czego chcesz, to „formatowanie”, które odbywa się za pomocą ==.
:nnoremap >> ^i<tab><esc>jeśli naprawdę chcesz zachować tabulatory>>
==przejdzie do poziomu wyżej linii. Chociaż dobrze, aby wiedzieć, że nie będzie działać we wszystkich przypadkach Jestem zainteresowany. Jako dodatek na pytanie, co ja chcę to >>i <<wcięcia / dedent aż do następnej wielokrotności shiftwidth od granicy w tym kierunku .
==używa albo equalexpralbo equalprgdo sformatowania podanych linii.
filetype plugin indent onswoje.vimrc, zastosowanie będą miały reguły dotyczące wcięć typu pliku (i wtyczki). Czyli sprawdzić, co siętabstopwartość faktycznie jest (set tabstop?zrobi; samo dla innych ustawień), podczas edycji i zmienić te wartości, dodając wiersz za „po” pliku, coś jak: stackoverflow.com/a/159066/5000478