Přeskočit obsah

Automatické páry a chytré odsazení

Editor za vás při psaní uzavírá závorky a uvozovky, zachovává odsazení na nových řádcích, rozevírá bloky mezi složenými závorkami a uplatňuje jednu jednotnou jednotku odsazení (tabulátory nebo mezery) stejně na klávesu Tab, na odsazení zpět pomocí Backspace i na automatické odsazování. Vše zde je vestavěná funkce editoru; odpovídající příkazy nabídky a nastavení stylu odsazení pocházejí z dodávaného zásuvného modulu Odsazení.

Má být neviditelné — působí jen na znak, který jste právě napsali, a ustupuje všude, kde by překáželo (uvnitř komentářů a řetězců, před stávajícími slovy, u nesprávného partnerského znaku).

Automatické párování závorek a uvozovek

Napsání otevírací závorky nebo uvozovky vloží jejího partnera a ponechá kurzor mezi nimi:

Napíšete Dostanete Kurzor
( () mezi nimi
[ [] mezi nimi
{ {} mezi nimi
" "" mezi nimi
' '' mezi nimi

Několik pravidel zabraňuje tomu, aby to bylo otravné:

  • Přepsání. Napsání uzavíracího znaku ve chvíli, kdy tentýž znak už je napravo od kurzoru, jej přeskočí, místo aby vložilo druhý — takže projitím skrz () nebo "" vznikne jediný vyvážený pár.
  • Žádné párování před slovem. Otevírací znak se doplní jen tehdy, je-li dalším znakem bílé místo, uzavírací znak nebo konec řádku — takže přidáním ( těsně před stávající text se doprostřed nevloží zatoulaná ).
  • Uvozovky vědomé si apostrofu. ' napsaný hned po písmeni (jako v don't) se považuje za apostrof a nepáruje se. Uvozovky se automaticky párují jen v neutrálním kontextu (začátek tokenu, po bílém místě nebo po operátoru).
  • Špičaté závorky jen ve značkovacích jazycích. < … > se automaticky párují pouze v dokumentech HTML/XML, kde < otevírá tag. Všude jinde je < operátor porovnání nebo posunu a zůstává beze změny.

Obalení výběru (psaním)

Máte-li text vybraný, napsání otevíracího znaku výběr nenahradí — obalí jej:

select value  then type (        →   (value)
  • Funguje s ( [ { " ' (nikoli s < — mimo značkovací jazyky je to operátor).
  • Vnitřní text zůstane vybraný, takže lze obalování řetězit: napište ( a pak " a dostanete ("hodnota").
  • S několika kurzory se každý výběr obalí nezávisle — a celá operace je jediný krok Zpět.

Smazání páru

Stisk Backspace s kurzorem uvnitř prázdného automaticky vloženého páru ((|), [|], {|}, "|", '|', nebo <|> ve značkovacím jazyce) smaže oba znaky naráz, takže automatický pár vezmete zpět jediným stiskem. Jakmile je mezi párem obsah, chová se Backspace normálně.

Chytré odsazení při Enteru

Stisk Enteru přenese úvodní bílé znaky aktuálního řádku na nový řádek, takže zůstanete ve stejné hloubce, aniž byste tabulátory či mezery psali znovu:

  • Zachovat odsazení. Nový řádek začne stejným odsazením jako řádek, který opouštíte.
  • Otevřít jednu úroveň. Končí-li opouštěný řádek otevíracím znakem ({, [, (), je nový řádek odsazen o jednu úroveň navíc.
  • Otevřít blok. Sedí-li kurzor mezi otevíracím znakem a jeho protějškem, blok se rozevře: nový řádek je odsazen o úroveň hlouběji a uzavírací znak spadne na vlastní řádek v hloubce toho otevíracího.
if (cond) {|}        Enter        if (cond) {
                     ───────►          |
                                   }

Styl odsazení — tabulátory, mezery, nebo automaticky

Jediná jednotka odsazení řídí klávesu Tab, odsazení zpět Backspacem i výše popsané automatické odsazování, takže se vždy shodují. Zvolte ji v Předvolby ▸ Zásuvné moduly ▸ Odsazení:

Styl Chování
Tabulátory (výchozí pro nové soubory) Jedna úroveň je skutečný znak tabulátoru; Mezer na jedno odsazení nastavuje jeho zobrazenou šířku.
Mezery Jedna úroveň je Mezer na jedno odsazení znaků mezery.
Automaticky (zjistit z dokumentu) Editor prozkoumá stávající odsazení dokumentu a řídí se jím — soubor odsazený tabulátory dál používá tabulátory, soubor se dvěma mezerami dál používá dvě mezery. Soubor, který zatím žádné odsazení nemá, se vrátí k výchozí hodnotě (tabulátory).

Nové, dosud nepojmenované soubory mají ve výchozím stavu Tabulátory, šířku 4.

Ruční úprava odsazení

Zásuvný modul Odsazení přidává dva příkazy (rovněž v Úpravy ▸ Odsazení), které odsadí nebo odsazení zmenší u každého řádku, jehož se výběr dotýká — nebo u řádku s kurzorem, není-li nic vybráno:

Příkaz Zkratka
Zvětšit odsazení Ctrl+]
Zmenšit odsazení Ctrl+[

Vkládání bloku kódu

Zkopírujte několik řádků nesoucích vlastní odsazení — řekněme tři řádky, každý začínající dvanácti mezerami — a vložte je na odsazený kurzor. Při doslovném vložení by první řádek skončil na vašem odsazení plus dvanáct mezer bloku (daleko vpravo) a každý další řádek na sloupci 0 plus dvanáct, takže byste celé museli odsadit znovu ručně.

OctoEdit blok místo toho odsadí za vás: odsazení, které řádky bloku sdílejí, se odstraní, první řádek dosedne tam, kde už kurzor je, a každý další řádek dostane odsazení řádku s kurzorem plus to odsazení, které měl uvnitř bloku. Vnitřní struktura bloku zůstane přesně zachována; tabulátory zůstávají tabulátory a mezery mezerami.

Nahrazuje se pouze úvodní odsazení: blok si ponechává vlastní znaky odsazení, takže blok odsazený mezerami vložený do dokumentu odsazeného tabulátory zůstane uvnitř odsazený mezerami. Převod vnitřního odsazení bloku na styl dokumentu je možnou budoucí volbou — editor to dnes nedělá.

Platí to pouze pro vložení, které je jednoznačně blokem:

  • schránka obsahuje více než jeden řádek;
  • je jeden kurzor a žádný obdélníkový (sloupcový) výběr;
  • mezi začátkem řádku a kurzorem není nic než bílé znaky — vložení doprostřed řádku je vsuvka a ponechá se doslovně.

Cokoli jiného se vloží přesně jako dřív. Celé vložení je jediný krok Zpět a výběr se nahrazuje jako obvykle.

Vypnete to volbou Znovu odsadit vložené řádky podle odsazení kurzoru v Předvolby ▸ Zásuvné moduly ▸ Odsazení (ve výchozím stavu zapnuto).

Vložit jako Markdown (Ctrl+Shift+V) prochází stejným pravidlem. Převedený text je blok, který začíná ve sloupci 0 a jehož vnořené položky seznamu jsou odsazené vůči němu, takže na odsazeném kurzoru dostane každý řádek odsazení kurzoru a vnoření zůstane přesně zachováno. Co příkaz dělá, popisuje oddíl Úpravy.

Výchozí hodnoty podle jazyka

Některé jazyky mají jednu téměř univerzální konvenci odsazování a editor ji dodává jako výchozí hodnotu daného jazyka — čerstvě otevřený soubor tohoto typu se odsazuje správně zcela bez nastavování:

Jazyk Výchozí
Python 4 mezery (PEP 8)
Rust 4 mezery (rustfmt)
Markdown 4 mezery (vnořené seznamy)
YAML 2 mezery (tabulátory nejsou povoleny)
JSON 2 mezery
Go tabulátory (gofmt)
C / C++ tabulátory

Každý další jazyk záměrně žádnou výchozí hodnotu nenese a řídí se vaším globálním nastavením odsazení. Ruční přepnutí jazyka dokumentu (nabídka Jazyk) odpovídající výchozí hodnotu ihned znovu uplatní.

Výchozí hodnota bydlí v definičním souboru jazyka (colorizers/<id>.json, klíč "indent": { "style": "tabs|spaces", "width": N }). Pokročilý uživatel může dodávanou výchozí hodnotu změnit tím, že upravenou kopii tohoto souboru umístí do uživatelského adresáře pro přebití — katalog nahrazuje definice podle id.

Plánováno: výjimky podle jazyka v Předvolbách

Tabulka nastavení pro přebití těchto výchozích hodnot podle jazyka (bez zásahů do JSON) je navržená a naplánovaná jako další krok této funkce; než dorazí, jsou způsobem, jak odsazení řídit, výše popsaná výjimka v JSON a níže uvedené vrstvy.

Odkud jednotka odsazení pochází (přednost)

Když má na odsazení názor několik zdrojů, editor je vyhodnotí na jednom místě a uplatní vítěze, od nejvyšší přednosti:

  1. .editorconfig projektu — je-li přítomen a je-li zapnuto »Použít nastavení .editorconfig«, vyhrávají u odpovídajících souborů projektové indent_style / indent_size / tab_width.
  2. Dodávaná výchozí hodnota jazyka — tabulka výše, pokud jazyk dokumentu nějakou deklaruje.
  3. Vaše globální nastavení odsazení — výše popsaná volba Tabulátory / Mezery / Automaticky.

Takže projekt, který s sebou nese .editorconfig, přebíjí pro soubory toho projektu vše; soubor Pythonu mimo takový projekt se odsazuje mezerami podle PEP 8, i když máte globálně nastavené tabulátory; a vše ostatní se řídí vaším globálním nastavením. Odsazení dokumentu můžete vždy dodatečně změnit ručně.

Přednost platí v okamžiku, kdy se cokoli změní: uplatnění jiné volby Tabulátory / Mezery / Automaticky v Předvolbách vyhodnotí otevřený dokument ihned znovu, takže soubor řízený .editorconfig nebo výchozí hodnotou jazyka si své odsazení podrží, aniž byste museli přepínat karty.

Více kurzorů

Vše výše uvedené platí u každého kurzoru, když upravujete s několika kurzory: napsání ( vloží u každého (), Enter zachová odsazení každého řádku a Backspace mezi prázdnými páry smaže u každého obě buňky. Jediné Zpět vrátí celou úpravu s více kurzory v jednom kroku.

Backspace u smíšených kurzorů

Backspace maže páry jen tehdy, sedí-li každý kurzor uvnitř prázdného páru. Jsou-li některé kurzory jinde, vrátí se Backspace u všech ke svému běžnému chování, takže nikdy nesmaže zatoulaný uzavírací znak u jednoho kurzoru, zatímco u jiného upravujete slovo.

V komentářích a řetězcích

Je-li aktivní obarvovač syntaxe, automatické párování i rozevírání bloku složenými závorkami ustupují uvnitř komentářů a řetězcových či znakových literálů — tam je { nebo " obyčejný text, nikoli kód, takže je editor ponechá přesně tak, jak jste je napsali. Prosté odsazování (přenesení bílých znaků předchozího řádku) funguje dál. V dokumentu s prostým textem bez obarvovače není co potlačovat, takže se párování všude chová stejně.

Související