Nie jestem pewien, czy istnieje lepszy sposób. Ale istnieje kilka sposobów, że można to zrobić (co mogę myśleć o tak) ...
Visual Blok Rozwiązanie
jak mówiłeś: naciśnij Ctl-V
wybrać linie, które chcesz , naciśnij I
, aby wstawić i wprowadź liczbę spacji.
Szukaj
Podobny do powyższego, ale trochę bardziej elastyczny - można skorzystać z z „ust wybierz” polecenia vip
lub dowolnego zakresu naprawdę: prasy v
lub vip
lub co ty, aby wybrać range i typ :s/^/{n spaces}
gdzie {n spacji} to liczba spacji, które chcesz wstawić.
Jest to trochę bardziej szczegółowe, ale działa całkiem dobrze dla praktycznie każdego zakresu. Heck, gdybyś chciał zrobić cały plik, mógłbyś zrobić Ctl-A
lub co masz (zależny od systemu operacyjnego) i wcięcia całego pliku (lub po prostu pominąć całą rzecz wizualną i po prostu zrobić to tryb poleceń ... jak w :1,$s/^/{n spaces}
pamiętać, że nie muszą zawierać trzeci ukośnik w S /// ponieważ nie stawiają żadnych tagów na końcu.
Globalny
Może chcesz tylko indent linie dopasuj wzorzec Powiedz ... Wszystkie wiersze zawierające foo Nie ma problemu: wpisz :g/foo/s/^/{n spaces}
Global jest szczególnie przydatny, jeśli ma sekcje wielowierszowe o podobnym wzorze. Możesz po prostu uciec do normalnego trybu lądowania i wybrać odpowiednie wiersze i odpowiednio wgrać: :g/foo/norm Vjj:s/^/{n spaces}Ctl-V{Enter}
. Nieco bardziej skomplikowany z tym dodatkowym końcem, ale przydatny w pewnych okolicznościach.
Zastosowanie TabStop i shiftwidth
Tak, jeśli robi to dużo - Zrobiłbym :set ts=2
i :set et
i :set sw=2
i używać >>
i <<
każdy sposób ...
Zrób Funkcja
Dobra, nadal nie jest wystarczająco krótka iz jakiegoś powodu musisz zrobić to bardzo często i nie możesz znieść problemów zUstawienia, et
i ts
. Nie ma problemu, po prostu napisać funkcję szybkiego i nadać mu localleader
mapowanie:
function! AddSpace(num) range
let s:counter = 0
let s:spaces = ''
while s:counter < a:num
let s:spaces .= ' '
let s:counter = s:counter + 1
endwhile
execute a:firstline .','. a:lastline .'s/^/'. s:spaces
endfunction
:map <LocalLeader>i :call AddSpace(3)Ctl-V{enter}
Może po prostu wiedzieć więcej niż jeden sposób, aby zrobić to lepiej niż tylko znając jeden? Po tym wszystkim, czasem najlepsze rozwiązanie zależy od problemu :)
Dlaczego chcesz uniknąć zmiany 'sw'? To właśnie tam jest. – Daenyth
W wizualnym wyborze wiersza '{count}>' będzie wcięte przez '{count} * 'shiftwidth'', podczas gdy w trybie normalnym' {count} 'jest używane do zliczania wierszy, które są wcięte. Być może tego właśnie chcesz. Zauważ, że to samo dotyczy wizualnego wyboru bloku, ale odstępy wstawiane są przed pierwszą kolumną bloku zamiast początkiem linii. – Benoit