Wcięcie do następnego poziomu wcięcia za pomocą >>


9

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

Jeśli masz także 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
VanLaser

3
>>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ą ==.
romainl,

może również mapować, :nnoremap >> ^i<tab><esc>jeśli naprawdę chcesz zachować tabulatory>>
Wolfie,

@romainl ==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 .
Dumitru,

2
Nie, ==używa albo equalexpralbo equalprgdo sformatowania podanych linii.
romainl,

Odpowiedzi:


12

Podczas korzystania z jednego z poleceń {count}>>, {count}<<, >{motion}lub <{motion}, na niektórych liniach, które zostały już wcięta, a chcesz ich nowy poziom wcięcia być wielokrotnością swojej 'shiftwidth'wartości opcji, można włączyć 'shiftround'opcję i dodać ten wiersz w vimrc:

set shiftround

2

Jeśli zawsze chcesz >>wciąć do następnego tabstop i <<usunąć do ostatniego tabstop, możesz je ponownie powiązać w następujący sposób:

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

Spowoduje to przesunięcie kursora, ale prawdopodobnie możesz zrobić sztuczkę polegającą na zaznaczeniu, aby cofnąć go. ^nie pozostawia m'śladu, ale możesz zostawić je ręcznie wewnątrz wiązania.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.