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 vdon'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:
- 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.
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:
.editorconfigprojektu — 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.- Dodávaná výchozí hodnota jazyka — tabulka výše, pokud jazyk dokumentu nějakou deklaruje.
- 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í¶
- Zásuvný modul Odsazení — nastavení stylu odsazení a příkazy Zvětšit/Zmenšit.
- EditorConfig — odsazení pro jednotlivé projekty, které přebíjí vaše globální nastavení.
- Úpravy s více kurzory — umísťování několika kurzorů naráz a práce s nimi.