Preskočiť na obsah

Automatické páry a inteligentné odsadenie

Počas písania editor za vás uzatvára zátvorky a úvodzovky, zachováva odsadenie na nových riadkoch, otvára bloky medzi zloženými zátvorkami a uplatňuje jednu jednotnú jednotku odsadenia (tabulátory alebo medzery) rovnako na kláves Tab, na zmenšenie odsadenia backspaceom aj na automatické odsadenie. Všetko, čo je tu opísané, je vstavaná funkcia editora; príslušné príkazy v ponuke a nastavenie štýlu odsadenia pochádzajú z dodávaného zásuvného modulu Odsadenie.

Má byť neviditeľné — koná iba na znaku, ktorý ste práve napísali, a stiahne sa všade tam, kde by prekážalo (vnútri komentárov a reťazcov, pred existujúcimi slovami, pri nesprávnom partnerskom znaku).

Automatické párovanie zátvoriek a úvodzoviek

Napísaním otváracej zátvorky alebo úvodzovky sa vloží aj jej partner a kurzor ostane medzi nimi:

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

Niekoľko pravidiel dbá na to, aby vás to neobťažovalo:

  • Prepísanie. Napísaním zatváracieho znaku vtedy, keď je ten istý znak už napravo od kurzora, cez neho prejdete namiesto vloženia druhého — takže keď píšete priamo cez () alebo "", ostane jediný, vyvážený pár.
  • Bez párovania pred slovom. Otvárací znak sa doplní iba vtedy, keď je nasledujúcim znakom biely znak, zatvárací znak alebo koniec riadka — takže pridanie ( tesne pred existujúci text doň nevsunie osamelú ).
  • Úvodzovky rozpoznávajúce apostrof. ' napísaný hneď za písmenom (ako v don't) sa považuje za apostrof a nepáruje sa. Úvodzovky sa automaticky párujú iba v neutrálnom kontexte (na začiatku tokenu, po bielom znaku alebo operátore).
  • Lomené zátvorky iba v značkovacích jazykoch. < … > sa automaticky párujú iba v dokumentoch HTML/XML, kde < otvára tag. Všade inde je < operátor porovnania alebo posunu a ostáva nedotknutý.

Obalenie výberu (obalenie napísaním)

Keď je text vybraný, napísanie otváracieho znaku výber nenahradí — obalí ho:

select value  then type (        →   (value)
  • Funguje so znakmi ( [ { " ' (nie s < — mimo značkovacích jazykov je to operátor).
  • Vnútorný text ostane vybraný, takže obaľovanie sa dá reťaziť: napíšte ( a potom " a dostanete ("value").
  • Pri viacerých kurzoroch sa každý výber obalí samostatne — a celá operácia je jeden krok späť.

Odstránenie páru

Stlačenie klávesu Backspace vtedy, keď je kurzor vnútri prázdneho automaticky vloženého páru ((|), [|], {|}, "|", '|' alebo <|> v značkovacom jazyku), odstráni obidva znaky naraz, takže automatický pár vrátite jediným stlačením klávesu. Len čo je medzi párom nejaký obsah, Backspace sa správa bežne.

Inteligentné odsadenie pri stlačení Enter

Stlačenie klávesu Enter prenesie úvodné biele znaky aktuálneho riadka na nový riadok, takže ostanete v rovnakej hĺbke bez opätovného písania tabulátorov či medzier:

  • Zachovať odsadenie. Nový riadok sa začne rovnakým odsadením ako riadok, ktorý opúšťate.
  • Otvoriť o úroveň. Ak sa opúšťaný riadok končí otváracím znakom ({, [, (), nový riadok sa odsadí o jednu úroveň navyše.
  • Otvoriť blok. Ak kurzor stojí medzi otváracím znakom a jeho partnerom, blok sa roztvorí: nový riadok sa odsadí o úroveň hlbšie a zatvárací znak klesne na vlastný riadok do hĺbky otváracieho znaku.
if (cond) {|}        Enter        if (cond) {
                     ───────►          |
                                   }

Štýl odsadenia — tabulátory, medzery alebo automaticky

Jedna jednotka odsadenia riadi kláves Tab, zmenšenie odsadenia backspaceom aj automatické odsadenie opísané vyššie, takže sa vždy zhodujú. Zvolíte ju v Predvoľby ▸ Zásuvné moduly ▸ Odsadenie:

Štýl Správanie
Tabulátory (predvolené pre nové súbory) Jedna úroveň je skutočný znak tabulátora; jeho vizuálnu šírku určuje Medzier na jedno odsadenie.
Medzery Jedna úroveň je toľko medzier, koľko udáva Medzier na jedno odsadenie.
Automaticky (zistiť z dokumentu) Editor prezrie existujúce odsadenie dokumentu a riadi sa ním — súbor odsadený tabulátormi ich používa ďalej, súbor s dvoma medzerami ostáva pri dvoch medzerách. Súbor, ktorý zatiaľ nemá žiadne odsadenie, sa vráti k predvoľbe (tabulátory).

Nové súbory bez názvu majú predvolene tabulátory so šírkou 4.

Ručná úprava odsadenia

Zásuvný modul Odsadenie pridáva dva príkazy (nájdete ich aj v Úpravy ▸ Odsadenie), ktoré odsadia alebo zmenšia odsadenie každého riadka dotknutého výberom — prípadne riadka s kurzorom, keď nie je nič vybrané:

Príkaz Skratka
Zväčšiť odsadenie Ctrl+]
Zmenšiť odsadenie Ctrl+[

Vkladanie bloku kódu

Skopírujte niekoľko riadkov s vlastným odsadením — povedzme tri riadky, z ktorých každý sa začína dvanástimi medzerami — a vložte ich pri odsadenom kurzore. Pri doslovnom vložení by prvý riadok pristál na vašom odsadení plus dvanástich medzerách bloku (ďaleko vpravo) a každý nasledujúci riadok na stĺpci 0 plus dvanásť, takže by ste to celé museli odsadzovať ručne.

OctoEdit blok namiesto toho odsadí za vás: odsadenie, ktoré majú riadky bloku spoločné, sa odstráni, prvý riadok pristane tam, kde už kurzor je, a každý nasledujúci riadok dostane odsadenie riadka s kurzorom plus to odsadenie, ktoré mal vnútri bloku. Vnútorná štruktúra bloku sa zachová presne; tabulátory ostávajú tabulátormi a medzery medzerami.

Nahradí sa iba úvodné odsadenie: blok si ponechá vlastné znaky odsadenia, takže blok odsadený medzerami vložený do dokumentu odsadeného tabulátormi ostane vnútri odsadený medzerami. Prevod vnútorného odsadenia bloku na štýl dokumentu je možnou budúcou voľbou — dnes to editor nerobí.

Platí to iba pre vkladanie, ktoré je jednoznačne blokové:

  • schránka obsahuje viac než jeden riadok;
  • je tu jeden kurzor a žiadny obdĺžnikový (stĺpcový) výber;
  • medzi začiatkom riadka a kurzorom nie je nič okrem bielych znakov — vloženie doprostred riadka je vsuvka a ostáva doslovné.

Všetko ostatné sa vloží presne ako doteraz. Celé vloženie je jediným krokom príkazu Späť a výber sa nahradí ako zvyčajne.

Vypnete to voľbou Znova odsadiť vložené riadky podľa odsadenia kurzora v Predvoľby ▸ Zásuvné moduly ▸ Odsadenie (predvolene zapnuté).

Prilepiť ako Markdown (Ctrl+Shift+V) prechádza rovnakým pravidlom. Prevedený text je blok, ktorý začína v stĺpci 0 a ktorého vnorené položky zoznamu sú odsadené voči nemu, takže pri odsadenom kurzore dostane každý riadok odsadenie kurzora a vnorenie zostane presne zachované. Čo príkaz robí, opisuje časť Úpravy.

Predvoľby podľa jazyka

Niektoré jazyky majú takmer univerzálnu zvyklosť odsadzovania a editor ju dodáva ako predvoľbu daného jazyka — čerstvo otvorený súbor tohto typu sa odsadzuje správne bez akéhokoľvek nastavovania:

Jazyk Predvolené
Python 4 medzery (PEP 8)
Rust 4 medzery (rustfmt)
Markdown 4 medzery (vnorené zoznamy)
YAML 2 medzery (tabulátory nie sú povolené)
JSON 2 medzery
Go tabulátory (gofmt)
C / C++ tabulátory

Každý ďalší jazyk zámerne nemá žiadnu predvoľbu a riadi sa vaším globálnym nastavením odsadenia. Ručnou zmenou jazyka dokumentu (ponuka Jazyk) sa príslušná predvoľba okamžite uplatní znova.

Predvoľba sa nachádza v definičnom súbore jazyka (colorizers/<id>.json, kľúč "indent": { "style": "tabs|spaces", "width": N }). Skúsený používateľ môže dodávanú predvoľbu zmeniť tak, že upravenú kópiu tohto súboru umiestni do používateľského priečinka s prekrytiami — katalóg nahrádza definície podľa id.

Plánované: prekrytia podľa jazyka v Predvoľbách

Tabuľka nastavení na prepísanie týchto predvolieb pre jednotlivé jazyky (bez zásahu do akéhokoľvek súboru JSON) je navrhnutá a naplánovaná ako ďalší krok tejto funkcie; kým pribudne, sú cestami na riadenie odsadenia vyššie opísané prekrytie v JSON a nižšie uvedené vrstvy.

Odkiaľ pochádza jednotka odsadenia (poradie)

Keď má na odsadenie názor viacero zdrojov, editor ich vyhodnotí na jednom mieste a uplatní víťaza, od najvyššej priority:

  1. Súbor .editorconfig projektu — ak existuje a je zapnutá voľba „Uplatňovať nastavenia .editorconfig“, pre zodpovedajúce súbory vyhrávajú indent_style / indent_size / tab_width z projektu.
  2. Dodávaná predvoľba jazyka — tabuľka vyššie, ak jazyk dokumentu nejakú deklaruje.
  3. Vaše globálne nastavenie odsadenia — vyššie uvedená voľba Tabulátory / Medzery / Automaticky.

Projekt, ktorý so sebou nesie .editorconfig, teda prekryje pre svoje súbory všetko; súbor v Pythone mimo takéhoto projektu sa odsadzuje medzerami podľa PEP 8, aj keď máte globálne nastavené tabulátory; a všetko ostatné sa riadi vaším globálnym nastavením. Odsadenie dokumentu môžete kedykoľvek potom zmeniť ručne.

Poradie platí v okamihu, keď sa čokoľvek zmení: uplatnením inej voľby Tabulátory / Medzery / Automaticky v Predvoľbách sa otvorený dokument okamžite vyhodnotí znova, takže si súbor riadený súborom .editorconfig alebo predvoľbou jazyka ponechá svoje odsadenie bez toho, aby ste museli prepínať karty.

Viacero kurzorov

Všetko uvedené platí pri každom kurzore, keď upravujete text s viacerými kurzormi: napísaním ( sa pri každom vloží (), Enter zachová odsadenie každého riadka a Backspace medzi prázdnymi pármi odstráni pri každom obidva znaky. Jediné Späť vráti celú úpravu s viacerými kurzormi jedným krokom.

Backspace pri rôznorodých kurzoroch

Backspace odstraňuje páry iba vtedy, keď každý kurzor stojí vnútri prázdneho páru. Ak sú niektoré kurzory inde, Backspace sa pri všetkých vráti k svojmu bežnému správaniu, takže nikdy neodstráni osamelý zatvárací znak pri jednom kurzore, kým pri druhom upravujete slovo.

V komentároch a reťazcoch

Keď je aktívny zvýrazňovač syntaxe, automatické párovanie aj otváranie bloku zloženou zátvorkou sa stiahnu vnútri komentárov a reťazcových či znakových literálov — tam je { alebo " obyčajný text, nie kód, takže ho editor nechá presne tak, ako ste ho napísali. Obyčajné odsadenie (prenesenie bielych znakov predchádzajúceho riadka) funguje ďalej. V obyčajnom textovom dokumente bez zvýrazňovača nie je čo potláčať, takže sa párovanie správa všade rovnako.

Súvisiace