Autopary i inteligentne wcięcia¶
Podczas pisania edytor domyka za Ciebie nawiasy i cudzysłowy, utrzymuje wcięcie w nowych wierszach, otwiera bloki między klamrami i stosuje jedną spójną jednostkę wcięcia (tabulatory lub spacje) zarówno dla klawisza Tab, jak i cofania wcięcia Backspace'em oraz automatycznego wcinania. Wszystko to jest wbudowaną funkcją edytora; odpowiadające polecenia menu i ustawienie stylu wcięć pochodzą z dołączonej wtyczki Wcięcia.
Z założenia ma być niewidoczne — działa tylko na znaku, który właśnie wpisano, i wycofuje się wszędzie tam, gdzie przeszkadzałoby (wewnątrz komentarzy i łańcuchów, przed istniejącymi słowami, przy niewłaściwym znaku partnerskim).
Automatyczne parowanie nawiasów i cudzysłowów¶
Wpisanie otwierającego nawiasu lub cudzysłowu wstawia jego partnera i zostawia kursor między nimi:
| Wpisujesz | Otrzymujesz | Kursor |
|---|---|---|
( |
() |
pomiędzy |
[ |
[] |
pomiędzy |
{ |
{} |
pomiędzy |
" |
"" |
pomiędzy |
' |
'' |
pomiędzy |
Kilka reguł sprawia, że nie jest to uciążliwe:
- Przeskakiwanie. Wpisanie znaku zamykającego, gdy ten sam znak stoi już
po prawej stronie kursora, przeskakuje go zamiast wstawiać drugi — pisząc
„na wprost” przez
()czy"", zostawiasz jedną, zbalansowaną parę. - Bez parowania przed słowem. Znak otwierający jest domykany tylko wtedy,
gdy następny znak to biały znak, znak zamykający lub koniec wiersza — dodanie
(tuż przed istniejącym tekstem nie wstrzykuje zbędnego)w jego środek. - Cudzysłowy świadome apostrofu.
'wpisany zaraz po literze (jak wdon't) jest traktowany jako apostrof i nie jest parowany. Cudzysłowy parują się tylko w neutralnym kontekście (początek tokenu, po białym znaku lub operatorze). - Nawiasy kątowe tylko w znacznikach.
<…>parują się wyłącznie w dokumentach HTML/XML, gdzie<otwiera tag. Wszędzie indziej<to operator porównania lub przesunięcia i pozostaje nietknięty.
Owijanie zaznaczenia (wpisz, aby owinąć)¶
Gdy tekst jest zaznaczony, wpisanie znaku otwierającego nie zastępuje zaznaczenia — owija je:
- Działa z
([{"'(nie z<— poza znacznikami to operator). - Wewnętrzny tekst pozostaje zaznaczony, więc owinięcia można łączyć: wpisz
(, potem", a otrzymasz("value"). - Przy wielu kursorach każde zaznaczenie jest owijane niezależnie — a cała operacja to jeden krok cofania.
Usuwanie pary¶
Naciśnięcie Backspace z kursorem między pustą automatycznie wstawioną parą
((|), [|], {|}, "|", '|' lub <|> w znacznikach) usuwa oba znaki
za jednym razem, więc autoparę wycofasz jednym naciśnięciem klawisza. Gdy między
parą pojawi się zawartość, Backspace zachowuje się normalnie.
Inteligentne wcięcia po Enterze¶
Naciśnięcie Enter przenosi początkowe białe znaki bieżącego wiersza do nowego, więc pozostajesz na tej samej głębokości bez ponownego wpisywania tabulatorów czy spacji:
- Zachowanie wcięcia. Nowy wiersz zaczyna się z takim samym wcięciem jak wiersz, który opuszczasz.
- Otwarcie o jeden poziom. Jeśli opuszczany wiersz kończy się znakiem
otwierającym (
{,[,(), nowy wiersz jest wcięty o jeden poziom głębiej. - Otwarcie bloku. Jeśli kursor stoi między znakiem otwierającym a jego parą, blok się rozkłada: nowy wiersz jest wcięty o poziom głębiej, a znak zamykający ląduje we własnym wierszu na głębokości znaku otwierającego.
Styl wcięć — tabulatory, spacje lub automatycznie¶
Jedna jednostka wcięcia steruje klawiszem Tab, cofaniem wcięcia Backspace'em i automatycznym wcinaniem powyżej, więc zawsze są zgodne. Wybierz ją w Preferencje ▸ Wtyczki ▸ Wcięcia:
| Styl | Zachowanie |
|---|---|
| Tabulatory (domyślne dla nowych plików) | Jeden poziom to prawdziwy znak tabulacji; Spacji na wcięcie ustala jego szerokość wizualną. |
| Spacje | Jeden poziom to Spacji na wcięcie znaków spacji. |
| Automatycznie (wykryj z dokumentu) | Edytor skanuje istniejące wcięcia dokumentu i podąża za nimi — plik wcinany tabulatorami dalej używa tabulatorów, plik z 2 spacjami dalej używa dwóch spacji. Plik bez żadnych wcięć wraca do wartości domyślnej (tabulatory). |
Nowe, niezatytułowane pliki domyślnie używają tabulatorów o szerokości 4.
Ręczna zmiana wcięć¶
Wtyczka Wcięcia dodaje dwa polecenia (także w Edycja ▸ Wcięcia), które wcinają lub cofają wcięcie każdego wiersza objętego zaznaczeniem — lub wiersza z kursorem, gdy nic nie zaznaczono:
| Polecenie | Skrót |
|---|---|
| Zwiększ wcięcie | Ctrl+] |
| Zmniejsz wcięcie | Ctrl+[ |
Domyślne ustawienia per język¶
Niektóre języki mają jedną, niemal powszechną konwencję wcięć i edytor dostarcza ją jako domyślną dla danego języka — świeżo otwarty plik tego typu wcina się poprawnie bez żadnej konfiguracji:
| Język | Domyślnie |
|---|---|
| Python | 4 spacje (PEP 8) |
| Rust | 4 spacje (rustfmt) |
| Markdown | 4 spacje (zagnieżdżone listy) |
| YAML | 2 spacje (tabulatory są niedozwolone) |
| JSON | 2 spacje |
| Go | tabulatory (gofmt) |
| C / C++ | tabulatory |
Każdy inny język celowo nie ma wartości domyślnej i podąża za Twoim globalnym ustawieniem wcięć. Ręczna zmiana języka dokumentu (menu Język) natychmiast stosuje odpowiadającą wartość domyślną.
Wartość domyślna mieszka w pliku definicji języka
(colorizers/<id>.json, klucz "indent": { "style": "tabs|spaces", "width": N }).
Zaawansowany użytkownik może zmienić dostarczoną wartość domyślną, umieszczając
zmodyfikowaną kopię tego pliku w katalogu nadpisań użytkownika — katalog
zastępuje definicje po identyfikatorze.
W planach: nadpisania per język w Preferencjach
Tabela ustawień do nadpisywania tych wartości domyślnych dla każdego języka (bez dotykania żadnego JSON-a) jest zaprojektowana i zaplanowana jako następny krok tej funkcji; dopóki nie trafi do edytora, sposobami sterowania wcięciami są powyższe nadpisanie JSON i warstwy opisane poniżej.
Skąd pochodzi jednostka wcięcia (pierwszeństwo)¶
Gdy kilka źródeł ma zdanie na temat wcięć, edytor rozstrzyga je w jednym miejscu i stosuje zwycięzcę, od najwyższego pierwszeństwa:
- Projektowy
.editorconfig— gdy istnieje, a opcja „Stosuj ustawienia .editorconfig” jest włączona,indent_style/indent_size/tab_widthprojektu wygrywają dla pasujących plików. - Dostarczona wartość domyślna języka — tabela powyżej, gdy język dokumentu ją deklaruje.
- Twoje globalne ustawienie wcięć — powyższy wybór Tabulatory / Spacje / Automatycznie.
Zatem projekt z własnym .editorconfig nadpisuje wszystko dla swoich plików;
plik Pythona poza takim projektem wcina się spacjami wg PEP-8, nawet gdy Twoje
globalne ustawienie to tabulatory; a wszystko inne podąża za ustawieniem
globalnym. Wcięcia dokumentu zawsze możesz potem zmienić ręcznie.
Pierwszeństwo obowiązuje od chwili każdej zmiany: zastosowanie innego wyboru
Tabulatory / Spacje / Automatycznie w Preferencjach natychmiast rozstrzyga na
nowo otwarty dokument, więc plik rządzony przez .editorconfig lub domyślną
wartość języka zachowuje swoje wcięcia bez przełączania kart.
Wiele kursorów¶
Wszystko powyższe działa przy każdym kursorze, gdy edytujesz z
wieloma kursorami: wpisanie ( wstawia () przy każdym,
Enter zachowuje wcięcie każdego wiersza, a Backspace między pustymi parami usuwa
oba znaki przy każdym. Pojedyncze Cofnij wycofuje całą wielokursorową edycję
w jednym kroku.
Backspace przy mieszanych kursorach
Backspace usuwa pary tylko wtedy, gdy każdy kursor stoi między pustą parą. Jeśli część kursorów jest gdzie indziej, Backspace wraca do normalnego zachowania przy wszystkich, więc nigdy nie usunie zbędnego znaku zamykającego przy jednym kursorze, gdy przy innym edytujesz słowo.
W komentarzach i łańcuchach¶
Gdy aktywny jest kolorizator składni, autoparowanie i otwieranie bloku po
klamrze wycofują się wewnątrz komentarzy i literałów łańcuchowych/znakowych —
tam { czy " to zwykły tekst, nie kod, więc edytor zostawia go dokładnie tak,
jak wpisano. Zwykłe wcinanie (przenoszenie białych znaków poprzedniego wiersza)
nadal działa. W dokumencie tekstowym bez kolorizatora nie ma czego wyciszać,
więc parowanie działa wszędzie tak samo.
Powiązane¶
- Wtyczka Wcięcia — ustawienie stylu wcięć oraz polecenia Zwiększ/Zmniejsz wcięcie.
- EditorConfig — projektowe wcięcia nadpisujące Twoje ustawienie globalne.
- Edycja wielokursorowa — ustawianie wielu kursorów i edycja nimi naraz.