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 that
spowoduje
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 equalexpr
albo equalprg
do sformatowania podanych linii.
filetype plugin indent on
swoje.vimrc
, zastosowanie będą miały reguły dotyczące wcięć typu pliku (i wtyczki). Czyli sprawdzić, co siętabstop
wartość 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