From 5e61e760be60e466494a4f3822907e5e24989616 Mon Sep 17 00:00:00 2001 From: FichteFoll Date: Thu, 28 Dec 2023 14:35:34 +0000 Subject: [PATCH] deploy: c538144c13e83bb987da854d327a1e318b628b4b --- 404.html | 4 ++-- assets/{backers.md.ubkaXlAg.js => backers.md.bWg8umWw.js} | 2 +- ...rs.md.ubkaXlAg.lean.js => backers.md.bWg8umWw.lean.js} | 2 +- ...ibuting.md.JNY_mCxi.js => contributing.md.K-hq0rsP.js} | 2 +- ....JNY_mCxi.lean.js => contributing.md.K-hq0rsP.lean.js} | 2 +- .../{glossary.md.IoE161Qp.js => glossary.md.BLHmERQ3.js} | 2 +- ...y.md.IoE161Qp.lean.js => glossary.md.BLHmERQ3.lean.js} | 2 +- ...s => guide_customization_color_schemes.md.TQRO_IWD.js} | 2 +- ...guide_customization_color_schemes.md.TQRO_IWD.lean.js} | 2 +- ...js => guide_customization_key_bindings.md.h1oO1BZ2.js} | 2 +- ... guide_customization_key_bindings.md.h1oO1BZ2.lean.js} | 2 +- ...LYla-u.js => guide_customization_menus.md.uuRhXsWO.js} | 2 +- ...n.js => guide_customization_menus.md.uuRhXsWO.lean.js} | 2 +- ...w0q.js => guide_customization_settings.md.43PLThv_.js} | 2 +- ...s => guide_customization_settings.md.43PLThv_.lean.js} | 2 +- ...=> guide_extensibility_command_palette.md.n18YI6ic.js} | 2 +- ...ide_extensibility_command_palette.md.n18YI6ic.lean.js} | 2 +- ...syV.js => guide_extensibility_commands.md.vIZiuU2z.js} | 2 +- ...s => guide_extensibility_commands.md.vIZiuU2z.lean.js} | 2 +- ....js => guide_extensibility_completions.md.aGyOSXlO.js} | 2 +- ...> guide_extensibility_completions.md.aGyOSXlO.lean.js} | 2 +- ...-s84S.js => guide_extensibility_macros.md.fwrCmHxA.js} | 2 +- ....js => guide_extensibility_macros.md.fwrCmHxA.lean.js} | 2 +- ...U2z.js => guide_extensibility_packages.md.ch6hFOX-.js} | 2 +- ...s => guide_extensibility_packages.md.ch6hFOX-.lean.js} | 2 +- ...s => guide_extensibility_plugins_index.md.A-pg61q2.js} | 2 +- ...guide_extensibility_plugins_index.md.A-pg61q2.lean.js} | 2 +- ...e_extensibility_plugins_input_handlers.md.uGNjntNQ.js} | 2 +- ...ensibility_plugins_input_handlers.md.uGNjntNQ.lean.js} | 2 +- ...QiE.js => guide_extensibility_snippets.md.C5KSEI6v.js} | 2 +- ...s => guide_extensibility_snippets.md.C5KSEI6v.lean.js} | 2 +- ...M.js => guide_extensibility_syntaxdefs.md.of0BVWuM.js} | 2 +- ...=> guide_extensibility_syntaxdefs.md.of0BVWuM.lean.js} | 2 +- ...> guide_getting-started_basic-concepts.md.Cdmunr1A.js} | 2 +- ...de_getting-started_basic-concepts.md.Cdmunr1A.lean.js} | 2 +- ... => guide_getting-started_installation.md.FpPDrf_W.js} | 2 +- ...uide_getting-started_installation.md.FpPDrf_W.lean.js} | 2 +- ...de_index.md.kY34JmTT.js => guide_index.md.Fs8iElNf.js} | 2 +- ...d.kY34JmTT.lean.js => guide_index.md.Fs8iElNf.lean.js} | 2 +- ...UFEMc8.js => guide_usage_build-systems.md.Np-FpCbs.js} | 2 +- ...n.js => guide_usage_build-systems.md.Np-FpCbs.lean.js} | 2 +- ....md.S0h4lqqn.js => guide_usage_editing.md.fI14jcHZ.js} | 2 +- ...qn.lean.js => guide_usage_editing.md.fI14jcHZ.lean.js} | 2 +- ...s => guide_usage_file-management_index.md.3T-rFP3g.js} | 2 +- ...guide_usage_file-management_index.md.3T-rFP3g.lean.js} | 2 +- ...guide_usage_file-management_navigation.md.BOTCf4_c.js} | 2 +- ..._usage_file-management_navigation.md.BOTCf4_c.lean.js} | 2 +- ...> guide_usage_file-management_projects.md.oJxgU_Ro.js} | 2 +- ...de_usage_file-management_projects.md.oJxgU_Ro.lean.js} | 2 +- ...b.js => guide_usage_search-and-replace.md.h_cG0MEn.js} | 2 +- ...=> guide_usage_search-and-replace.md.h_cG0MEn.lean.js} | 2 +- assets/{index.md.fIw7cd8u.js => index.md.G8JQ3VSK.js} | 2 +- ...ndex.md.fIw7cd8u.lean.js => index.md.G8JQ3VSK.lean.js} | 2 +- ...stion.md.lmnUHqXN.js => other_question.md.KGHgF6su.js} | 2 +- ...mnUHqXN.lean.js => other_question.md.KGHgF6su.lean.js} | 2 +- ...N.js => reference_color_schemes_legacy.md.DBAqIbKE.js} | 2 +- ...=> reference_color_schemes_legacy.md.DBAqIbKE.lean.js} | 2 +- ...cBsH8h.js => reference_command_palette.md.6osWM5j9.js} | 2 +- ...n.js => reference_command_palette.md.6osWM5j9.lean.js} | 2 +- ...s.md.riK0ex_J.js => reference_commands.md.uDHhfyWI.js} | 2 +- ...x_J.lean.js => reference_commands.md.uDHhfyWI.lean.js} | 2 +- ...s.md.FzDTffi2.js => reference_comments.md.C6uA-pVp.js} | 2 +- ...fi2.lean.js => reference_comments.md.C6uA-pVp.lean.js} | 2 +- ...d.dAoa8r2o.js => reference_completions.md.yYhZHeJr.js} | 2 +- ....lean.js => reference_completions.md.yYhZHeJr.lean.js} | 2 +- ...ndex.md.5ym4GuWZ.js => reference_index.md.QPkQ1nWf.js} | 2 +- ...m4GuWZ.lean.js => reference_index.md.QPkQ1nWf.lean.js} | 2 +- ....aRVdPX8Y.js => reference_key_bindings.md.FocxM_HK.js} | 2 +- ...lean.js => reference_key_bindings.md.FocxM_HK.lean.js} | 2 +- ...js => reference_keyboard_shortcuts_osx.md.YWxghirF.js} | 2 +- ... reference_keyboard_shortcuts_osx.md.YWxghirF.lean.js} | 2 +- ...js => reference_keyboard_shortcuts_win.md.2W6q_BNW.js} | 2 +- ... reference_keyboard_shortcuts_win.md.2W6q_BNW.lean.js} | 2 +- ...enus.md.hQYWrLru.js => reference_menus.md.eLErO9Gt.js} | 2 +- ...YWrLru.lean.js => reference_menus.md.eLErO9Gt.lean.js} | 2 +- ...a.md.DqdXp5sB.js => reference_metadata.md.436MM5vk.js} | 2 +- ...5sB.lean.js => reference_metadata.md.436MM5vk.lean.js} | 2 +- ...weUacWW.js => reference_mouse_bindings.md.lxpYH4mL.js} | 2 +- ...an.js => reference_mouse_bindings.md.lxpYH4mL.lean.js} | 2 +- ...ns.md.ntaE7vcS.js => reference_plugins.md._92VSgfX.js} | 2 +- ...7vcS.lean.js => reference_plugins.md._92VSgfX.lean.js} | 2 +- ...s.md.6jFyUGxQ.js => reference_projects.md.keXLkGTk.js} | 2 +- ...GxQ.lean.js => reference_projects.md.keXLkGTk.lean.js} | 2 +- ...md.atI6Thij.js => reference_python_api.md.N8o2lw1s.js} | 2 +- ...j.lean.js => reference_python_api.md.N8o2lw1s.lean.js} | 2 +- ...s.md.CD7b_OSJ.js => reference_settings.md.JAvsN6m2.js} | 2 +- ...OSJ.lean.js => reference_settings.md.JAvsN6m2.lean.js} | 2 +- ...ls.md.TjYzk43K.js => reference_symbols.md.rVZM5-IJ.js} | 2 +- ...k43K.lean.js => reference_symbols.md.rVZM5-IJ.lean.js} | 2 +- ...sfbY.js => reference_syntaxdefs_legacy.md.lDaXKVmv.js} | 2 +- ...js => reference_syntaxdefs_legacy.md.lDaXKVmv.lean.js} | 2 +- assets/{style.uFazi2F0.css => style.zWldQL4n.css} | 2 +- backers.html | 8 ++++---- contributing.html | 8 ++++---- glossary.html | 8 ++++---- guide/customization/color_schemes.html | 8 ++++---- guide/customization/key_bindings.html | 8 ++++---- guide/customization/menus.html | 8 ++++---- guide/customization/settings.html | 8 ++++---- guide/extensibility/command_palette.html | 8 ++++---- guide/extensibility/commands.html | 8 ++++---- guide/extensibility/completions.html | 8 ++++---- guide/extensibility/macros.html | 8 ++++---- guide/extensibility/packages.html | 8 ++++---- guide/extensibility/plugins/index.html | 8 ++++---- guide/extensibility/plugins/input_handlers.html | 8 ++++---- guide/extensibility/snippets.html | 8 ++++---- guide/extensibility/syntaxdefs.html | 8 ++++---- guide/getting-started/basic-concepts.html | 8 ++++---- guide/getting-started/installation.html | 8 ++++---- guide/index.html | 8 ++++---- guide/usage/build-systems.html | 8 ++++---- guide/usage/editing.html | 8 ++++---- guide/usage/file-management/index.html | 8 ++++---- guide/usage/file-management/navigation.html | 8 ++++---- guide/usage/file-management/projects.html | 8 ++++---- guide/usage/search-and-replace.html | 8 ++++---- hashmap.json | 2 +- index.html | 8 ++++---- other/question.html | 8 ++++---- reference/color_schemes_legacy.html | 8 ++++---- reference/command_palette.html | 8 ++++---- reference/commands.html | 8 ++++---- reference/comments.html | 8 ++++---- reference/completions.html | 8 ++++---- reference/index.html | 8 ++++---- reference/key_bindings.html | 8 ++++---- reference/keyboard_shortcuts_osx.html | 8 ++++---- reference/keyboard_shortcuts_win.html | 8 ++++---- reference/menus.html | 8 ++++---- reference/metadata.html | 8 ++++---- reference/mouse_bindings.html | 8 ++++---- reference/plugins.html | 8 ++++---- reference/projects.html | 8 ++++---- reference/python_api.html | 8 ++++---- reference/settings.html | 8 ++++---- reference/symbols.html | 8 ++++---- reference/syntaxdefs_legacy.html | 8 ++++---- 138 files changed, 274 insertions(+), 274 deletions(-) rename assets/{backers.md.ubkaXlAg.js => backers.md.bWg8umWw.js} (98%) rename assets/{backers.md.ubkaXlAg.lean.js => backers.md.bWg8umWw.lean.js} (84%) rename assets/{contributing.md.JNY_mCxi.js => contributing.md.K-hq0rsP.js} (99%) rename assets/{contributing.md.JNY_mCxi.lean.js => contributing.md.K-hq0rsP.lean.js} (85%) rename assets/{glossary.md.IoE161Qp.js => glossary.md.BLHmERQ3.js} (98%) rename assets/{glossary.md.IoE161Qp.lean.js => glossary.md.BLHmERQ3.lean.js} (98%) rename assets/{guide_customization_color_schemes.md.7lrTkUoC.js => guide_customization_color_schemes.md.TQRO_IWD.js} (96%) rename assets/{guide_customization_color_schemes.md.7lrTkUoC.lean.js => guide_customization_color_schemes.md.TQRO_IWD.lean.js} (88%) rename assets/{guide_customization_key_bindings.md.VopMvquC.js => guide_customization_key_bindings.md.h1oO1BZ2.js} (99%) rename assets/{guide_customization_key_bindings.md.VopMvquC.lean.js => guide_customization_key_bindings.md.h1oO1BZ2.lean.js} (95%) rename assets/{guide_customization_menus.md.aQLYla-u.js => guide_customization_menus.md.uuRhXsWO.js} (99%) rename assets/{guide_customization_menus.md.aQLYla-u.lean.js => guide_customization_menus.md.uuRhXsWO.lean.js} (98%) rename assets/{guide_customization_settings.md.JypFhw0q.js => guide_customization_settings.md.43PLThv_.js} (99%) rename assets/{guide_customization_settings.md.JypFhw0q.lean.js => guide_customization_settings.md.43PLThv_.lean.js} (86%) rename assets/{guide_extensibility_command_palette.md.nOvsifqC.js => guide_extensibility_command_palette.md.n18YI6ic.js} (99%) rename assets/{guide_extensibility_command_palette.md.nOvsifqC.lean.js => guide_extensibility_command_palette.md.n18YI6ic.lean.js} (95%) rename assets/{guide_extensibility_commands.md.VqQYHsyV.js => guide_extensibility_commands.md.vIZiuU2z.js} (98%) rename assets/{guide_extensibility_commands.md.VqQYHsyV.lean.js => guide_extensibility_commands.md.vIZiuU2z.lean.js} (86%) rename assets/{guide_extensibility_completions.md.jFjMsa_P.js => guide_extensibility_completions.md.aGyOSXlO.js} (99%) rename assets/{guide_extensibility_completions.md.jFjMsa_P.lean.js => guide_extensibility_completions.md.aGyOSXlO.lean.js} (98%) rename assets/{guide_extensibility_macros.md.rjW-s84S.js => guide_extensibility_macros.md.fwrCmHxA.js} (99%) rename assets/{guide_extensibility_macros.md.rjW-s84S.lean.js => guide_extensibility_macros.md.fwrCmHxA.lean.js} (93%) rename assets/{guide_extensibility_packages.md.jI282U2z.js => guide_extensibility_packages.md.ch6hFOX-.js} (99%) rename assets/{guide_extensibility_packages.md.jI282U2z.lean.js => guide_extensibility_packages.md.ch6hFOX-.lean.js} (86%) rename assets/{guide_extensibility_plugins_index.md.qAJg8hrm.js => guide_extensibility_plugins_index.md.A-pg61q2.js} (99%) rename assets/{guide_extensibility_plugins_index.md.qAJg8hrm.lean.js => guide_extensibility_plugins_index.md.A-pg61q2.lean.js} (92%) rename assets/{guide_extensibility_plugins_input_handlers.md.temQxa84.js => guide_extensibility_plugins_input_handlers.md.uGNjntNQ.js} (99%) rename assets/{guide_extensibility_plugins_input_handlers.md.temQxa84.lean.js => guide_extensibility_plugins_input_handlers.md.uGNjntNQ.lean.js} (95%) rename assets/{guide_extensibility_snippets.md.vLzwQQiE.js => guide_extensibility_snippets.md.C5KSEI6v.js} (99%) rename assets/{guide_extensibility_snippets.md.vLzwQQiE.lean.js => guide_extensibility_snippets.md.C5KSEI6v.lean.js} (92%) rename assets/{guide_extensibility_syntaxdefs.md.R2Aw3-WM.js => guide_extensibility_syntaxdefs.md.of0BVWuM.js} (99%) rename assets/{guide_extensibility_syntaxdefs.md.R2Aw3-WM.lean.js => guide_extensibility_syntaxdefs.md.of0BVWuM.lean.js} (93%) rename assets/{guide_getting-started_basic-concepts.md.99oXwwUb.js => guide_getting-started_basic-concepts.md.Cdmunr1A.js} (99%) rename assets/{guide_getting-started_basic-concepts.md.99oXwwUb.lean.js => guide_getting-started_basic-concepts.md.Cdmunr1A.lean.js} (88%) rename assets/{guide_getting-started_installation.md.xQ0l5kUs.js => guide_getting-started_installation.md.FpPDrf_W.js} (99%) rename assets/{guide_getting-started_installation.md.xQ0l5kUs.lean.js => guide_getting-started_installation.md.FpPDrf_W.lean.js} (87%) rename assets/{guide_index.md.kY34JmTT.js => guide_index.md.Fs8iElNf.js} (98%) rename assets/{guide_index.md.kY34JmTT.lean.js => guide_index.md.Fs8iElNf.lean.js} (86%) rename assets/{guide_usage_build-systems.md.7hUFEMc8.js => guide_usage_build-systems.md.Np-FpCbs.js} (98%) rename assets/{guide_usage_build-systems.md.7hUFEMc8.lean.js => guide_usage_build-systems.md.Np-FpCbs.lean.js} (93%) rename assets/{guide_usage_editing.md.S0h4lqqn.js => guide_usage_editing.md.fI14jcHZ.js} (99%) rename assets/{guide_usage_editing.md.S0h4lqqn.lean.js => guide_usage_editing.md.fI14jcHZ.lean.js} (98%) rename assets/{guide_usage_file-management_index.md.bApegwB0.js => guide_usage_file-management_index.md.3T-rFP3g.js} (92%) rename assets/{guide_usage_file-management_index.md.bApegwB0.lean.js => guide_usage_file-management_index.md.3T-rFP3g.lean.js} (92%) rename assets/{guide_usage_file-management_navigation.md.0p963Cri.js => guide_usage_file-management_navigation.md.BOTCf4_c.js} (99%) rename assets/{guide_usage_file-management_navigation.md.0p963Cri.lean.js => guide_usage_file-management_navigation.md.BOTCf4_c.lean.js} (98%) rename assets/{guide_usage_file-management_projects.md.OEzFsdpY.js => guide_usage_file-management_projects.md.oJxgU_Ro.js} (99%) rename assets/{guide_usage_file-management_projects.md.OEzFsdpY.lean.js => guide_usage_file-management_projects.md.oJxgU_Ro.lean.js} (90%) rename assets/{guide_usage_search-and-replace.md.A5Ru6blb.js => guide_usage_search-and-replace.md.h_cG0MEn.js} (99%) rename assets/{guide_usage_search-and-replace.md.A5Ru6blb.lean.js => guide_usage_search-and-replace.md.h_cG0MEn.lean.js} (98%) rename assets/{index.md.fIw7cd8u.js => index.md.G8JQ3VSK.js} (82%) rename assets/{index.md.fIw7cd8u.lean.js => index.md.G8JQ3VSK.lean.js} (82%) rename assets/{other_question.md.lmnUHqXN.js => other_question.md.KGHgF6su.js} (93%) rename assets/{other_question.md.lmnUHqXN.lean.js => other_question.md.KGHgF6su.lean.js} (84%) rename assets/{reference_color_schemes_legacy.md.srh9jHBN.js => reference_color_schemes_legacy.md.DBAqIbKE.js} (99%) rename assets/{reference_color_schemes_legacy.md.srh9jHBN.lean.js => reference_color_schemes_legacy.md.DBAqIbKE.lean.js} (87%) rename assets/{reference_command_palette.md.encBsH8h.js => reference_command_palette.md.6osWM5j9.js} (99%) rename assets/{reference_command_palette.md.encBsH8h.lean.js => reference_command_palette.md.6osWM5j9.lean.js} (91%) rename assets/{reference_commands.md.riK0ex_J.js => reference_commands.md.uDHhfyWI.js} (99%) rename assets/{reference_commands.md.riK0ex_J.lean.js => reference_commands.md.uDHhfyWI.lean.js} (86%) rename assets/{reference_comments.md.FzDTffi2.js => reference_comments.md.C6uA-pVp.js} (99%) rename assets/{reference_comments.md.FzDTffi2.lean.js => reference_comments.md.C6uA-pVp.lean.js} (92%) rename assets/{reference_completions.md.dAoa8r2o.js => reference_completions.md.yYhZHeJr.js} (99%) rename assets/{reference_completions.md.dAoa8r2o.lean.js => reference_completions.md.yYhZHeJr.lean.js} (86%) rename assets/{reference_index.md.5ym4GuWZ.js => reference_index.md.QPkQ1nWf.js} (91%) rename assets/{reference_index.md.5ym4GuWZ.lean.js => reference_index.md.QPkQ1nWf.lean.js} (91%) rename assets/{reference_key_bindings.md.aRVdPX8Y.js => reference_key_bindings.md.FocxM_HK.js} (99%) rename assets/{reference_key_bindings.md.aRVdPX8Y.lean.js => reference_key_bindings.md.FocxM_HK.lean.js} (86%) rename assets/{reference_keyboard_shortcuts_osx.md._UKInUPX.js => reference_keyboard_shortcuts_osx.md.YWxghirF.js} (99%) rename assets/{reference_keyboard_shortcuts_osx.md._UKInUPX.lean.js => reference_keyboard_shortcuts_osx.md.YWxghirF.lean.js} (99%) rename assets/{reference_keyboard_shortcuts_win.md.9eDwNeRU.js => reference_keyboard_shortcuts_win.md.2W6q_BNW.js} (99%) rename assets/{reference_keyboard_shortcuts_win.md.9eDwNeRU.lean.js => reference_keyboard_shortcuts_win.md.2W6q_BNW.lean.js} (99%) rename assets/{reference_menus.md.hQYWrLru.js => reference_menus.md.eLErO9Gt.js} (99%) rename assets/{reference_menus.md.hQYWrLru.lean.js => reference_menus.md.eLErO9Gt.lean.js} (85%) rename assets/{reference_metadata.md.DqdXp5sB.js => reference_metadata.md.436MM5vk.js} (99%) rename assets/{reference_metadata.md.DqdXp5sB.lean.js => reference_metadata.md.436MM5vk.lean.js} (86%) rename assets/{reference_mouse_bindings.md.vweUacWW.js => reference_mouse_bindings.md.lxpYH4mL.js} (99%) rename assets/{reference_mouse_bindings.md.vweUacWW.lean.js => reference_mouse_bindings.md.lxpYH4mL.lean.js} (86%) rename assets/{reference_plugins.md.ntaE7vcS.js => reference_plugins.md._92VSgfX.js} (99%) rename assets/{reference_plugins.md.ntaE7vcS.lean.js => reference_plugins.md._92VSgfX.lean.js} (85%) rename assets/{reference_projects.md.6jFyUGxQ.js => reference_projects.md.keXLkGTk.js} (99%) rename assets/{reference_projects.md.6jFyUGxQ.lean.js => reference_projects.md.keXLkGTk.lean.js} (85%) rename assets/{reference_python_api.md.atI6Thij.js => reference_python_api.md.N8o2lw1s.js} (99%) rename assets/{reference_python_api.md.atI6Thij.lean.js => reference_python_api.md.N8o2lw1s.lean.js} (86%) rename assets/{reference_settings.md.CD7b_OSJ.js => reference_settings.md.JAvsN6m2.js} (99%) rename assets/{reference_settings.md.CD7b_OSJ.lean.js => reference_settings.md.JAvsN6m2.lean.js} (94%) rename assets/{reference_symbols.md.TjYzk43K.js => reference_symbols.md.rVZM5-IJ.js} (99%) rename assets/{reference_symbols.md.TjYzk43K.lean.js => reference_symbols.md.rVZM5-IJ.lean.js} (94%) rename assets/{reference_syntaxdefs_legacy.md.rHCEsfbY.js => reference_syntaxdefs_legacy.md.lDaXKVmv.js} (99%) rename assets/{reference_syntaxdefs_legacy.md.rHCEsfbY.lean.js => reference_syntaxdefs_legacy.md.lDaXKVmv.lean.js} (87%) rename assets/{style.uFazi2F0.css => style.zWldQL4n.css} (99%) diff --git a/404.html b/404.html index 771f3394..33a080a1 100644 --- a/404.html +++ b/404.html @@ -6,7 +6,7 @@ 404 | Sublime Text Community Documentation - + @@ -24,7 +24,7 @@
Skip to content

404

PAGE NOT FOUND

But if you don't change your direction, and if you keep looking, you may end up where you are heading.
- + \ No newline at end of file diff --git a/assets/backers.md.ubkaXlAg.js b/assets/backers.md.bWg8umWw.js similarity index 98% rename from assets/backers.md.ubkaXlAg.js rename to assets/backers.md.bWg8umWw.js index d5ea70d1..c95dea78 100644 --- a/assets/backers.md.ubkaXlAg.js +++ b/assets/backers.md.bWg8umWw.js @@ -1 +1 @@ -import{_ as e,o as r,c as l,R as t}from"./chunks/framework.e02z-eDF.js";const p=JSON.parse('{"title":"Backers","description":"","frontmatter":{"title":"Backers"},"headers":[],"relativePath":"backers.md","filePath":"backers.md","lastUpdated":1703773698000}'),a={name:"backers.md"},i=t('

Backers

The following people have financially supported the writers of this guide through a fundraiser in July-August 2014.

Thanks a bunch to all of you!


Even though their contribution arrived after the campaign's end, we'd like to make a special mention of Sublime Hq for their generous donation.



',10),n=[i];function o(h,s,f,b,c,u){return r(),l("div",null,n)}const _=e(a,[["render",o]]);export{p as __pageData,_ as default}; +import{_ as e,o as r,c as l,R as t}from"./chunks/framework.e02z-eDF.js";const p=JSON.parse('{"title":"Backers","description":"","frontmatter":{"title":"Backers"},"headers":[],"relativePath":"backers.md","filePath":"backers.md","lastUpdated":1703774098000}'),a={name:"backers.md"},i=t('

Backers

The following people have financially supported the writers of this guide through a fundraiser in July-August 2014.

Thanks a bunch to all of you!


Even though their contribution arrived after the campaign's end, we'd like to make a special mention of Sublime Hq for their generous donation.



',10),n=[i];function o(h,s,f,b,c,u){return r(),l("div",null,n)}const _=e(a,[["render",o]]);export{p as __pageData,_ as default}; diff --git a/assets/backers.md.ubkaXlAg.lean.js b/assets/backers.md.bWg8umWw.lean.js similarity index 84% rename from assets/backers.md.ubkaXlAg.lean.js rename to assets/backers.md.bWg8umWw.lean.js index 1df9be38..58cded8f 100644 --- a/assets/backers.md.ubkaXlAg.lean.js +++ b/assets/backers.md.bWg8umWw.lean.js @@ -1 +1 @@ -import{_ as e,o as r,c as l,R as t}from"./chunks/framework.e02z-eDF.js";const p=JSON.parse('{"title":"Backers","description":"","frontmatter":{"title":"Backers"},"headers":[],"relativePath":"backers.md","filePath":"backers.md","lastUpdated":1703773698000}'),a={name:"backers.md"},i=t("",10),n=[i];function o(h,s,f,b,c,u){return r(),l("div",null,n)}const _=e(a,[["render",o]]);export{p as __pageData,_ as default}; +import{_ as e,o as r,c as l,R as t}from"./chunks/framework.e02z-eDF.js";const p=JSON.parse('{"title":"Backers","description":"","frontmatter":{"title":"Backers"},"headers":[],"relativePath":"backers.md","filePath":"backers.md","lastUpdated":1703774098000}'),a={name:"backers.md"},i=t("",10),n=[i];function o(h,s,f,b,c,u){return r(),l("div",null,n)}const _=e(a,[["render",o]]);export{p as __pageData,_ as default}; diff --git a/assets/contributing.md.JNY_mCxi.js b/assets/contributing.md.K-hq0rsP.js similarity index 99% rename from assets/contributing.md.JNY_mCxi.js rename to assets/contributing.md.K-hq0rsP.js index b8fbdf9e..5e566fd6 100644 --- a/assets/contributing.md.JNY_mCxi.js +++ b/assets/contributing.md.K-hq0rsP.js @@ -1,4 +1,4 @@ -import{_ as e,o as s,c as i,R as a}from"./chunks/framework.e02z-eDF.js";const u=JSON.parse('{"title":"Contributing","description":"","frontmatter":{"title":"Contributing"},"headers":[],"relativePath":"contributing.md","filePath":"contributing.md","lastUpdated":1703773698000}'),t={name:"contributing.md"},n=a(`

Contribution Guidelines

Keywords in upper case follow the meanings specified in RFC-2119.

Issue

Even though it's very unlikely, please search through the existing issues and look for existing similar ones before submitting your own.

Pull request

Please try to group related changes into single pull requests and create additional ones if necessary. This will make reviewing and merging much easier and faster.

Markup Style guidelines

This project uses Markdown as its markup language.

Not all the files in this project follow these guidelines yet, as we established them after a large portion of this guide had been written already. If you find any style inconsistencies, please file a report or send a pull request to fix them.

When changing a file to use semantic linefeeds, please apply this in a separate commit and do not perform any other content changes in the same commit.

Markdown Parser

The markup parser is markdown-it, which can be extended by plugins and is furthermore accompanied by some of Vitepress's custom extensions. You can find the list of plugins we use in the markdown option in docs/.vitepress/config.ts.

Line Widths

Lines MUST NOT be longer than 80 characters, except for tables, urls and code blocks.

Split text using semantic linefeeds. Using those, you will hardly ever come near 80 characters on a single line. Even when you do, you should be able to add line breaks at fitting locations trivially. This file can serve as an example.

Whitespace

Blocks SHOULD be indented by 2 spaces, but visual indentation is preferred. Inline code should be using code fences, especially when syntax highlighting is desired.

Example:

md
- This sentence can be split
+import{_ as e,o as s,c as i,R as a}from"./chunks/framework.e02z-eDF.js";const u=JSON.parse('{"title":"Contributing","description":"","frontmatter":{"title":"Contributing"},"headers":[],"relativePath":"contributing.md","filePath":"contributing.md","lastUpdated":1703774098000}'),t={name:"contributing.md"},n=a(`

Contribution Guidelines

Keywords in upper case follow the meanings specified in RFC-2119.

Issue

Even though it's very unlikely, please search through the existing issues and look for existing similar ones before submitting your own.

Pull request

Please try to group related changes into single pull requests and create additional ones if necessary. This will make reviewing and merging much easier and faster.

Markup Style guidelines

This project uses Markdown as its markup language.

Not all the files in this project follow these guidelines yet, as we established them after a large portion of this guide had been written already. If you find any style inconsistencies, please file a report or send a pull request to fix them.

When changing a file to use semantic linefeeds, please apply this in a separate commit and do not perform any other content changes in the same commit.

Markdown Parser

The markup parser is markdown-it, which can be extended by plugins and is furthermore accompanied by some of Vitepress's custom extensions. You can find the list of plugins we use in the markdown option in docs/.vitepress/config.ts.

Line Widths

Lines MUST NOT be longer than 80 characters, except for tables, urls and code blocks.

Split text using semantic linefeeds. Using those, you will hardly ever come near 80 characters on a single line. Even when you do, you should be able to add line breaks at fitting locations trivially. This file can serve as an example.

Whitespace

Blocks SHOULD be indented by 2 spaces, but visual indentation is preferred. Inline code should be using code fences, especially when syntax highlighting is desired.

Example:

md
- This sentence can be split
   using a semantic linefeed,
   as mentioned earlier.
 
diff --git a/assets/contributing.md.JNY_mCxi.lean.js b/assets/contributing.md.K-hq0rsP.lean.js
similarity index 85%
rename from assets/contributing.md.JNY_mCxi.lean.js
rename to assets/contributing.md.K-hq0rsP.lean.js
index 5f412b28..e52be032 100644
--- a/assets/contributing.md.JNY_mCxi.lean.js
+++ b/assets/contributing.md.K-hq0rsP.lean.js
@@ -1 +1 @@
-import{_ as e,o as s,c as i,R as a}from"./chunks/framework.e02z-eDF.js";const u=JSON.parse('{"title":"Contributing","description":"","frontmatter":{"title":"Contributing"},"headers":[],"relativePath":"contributing.md","filePath":"contributing.md","lastUpdated":1703773698000}'),t={name:"contributing.md"},n=a("",54),l=[n];function h(p,r,o,d,k,c){return s(),i("div",null,l)}const E=e(t,[["render",h]]);export{u as __pageData,E as default};
+import{_ as e,o as s,c as i,R as a}from"./chunks/framework.e02z-eDF.js";const u=JSON.parse('{"title":"Contributing","description":"","frontmatter":{"title":"Contributing"},"headers":[],"relativePath":"contributing.md","filePath":"contributing.md","lastUpdated":1703774098000}'),t={name:"contributing.md"},n=a("",54),l=[n];function h(p,r,o,d,k,c){return s(),i("div",null,l)}const E=e(t,[["render",h]]);export{u as __pageData,E as default};
diff --git a/assets/glossary.md.IoE161Qp.js b/assets/glossary.md.BLHmERQ3.js
similarity index 98%
rename from assets/glossary.md.IoE161Qp.js
rename to assets/glossary.md.BLHmERQ3.js
index 46ea1133..fa6fa227 100644
--- a/assets/glossary.md.IoE161Qp.js
+++ b/assets/glossary.md.BLHmERQ3.js
@@ -1 +1 @@
-import{_ as m,o as i,c as o,F as f,E as h,k as c,t as u,a as g,I as b}from"./chunks/framework.e02z-eDF.js";function y(t,a){let e=a[l(t)];return e=e.replace(/:([\w+]*):([\w+]*):/g,(r,n,s)=>p(a[l(n)],s)),e=e.replace(/:([\w+]*):/g,(r,n,s)=>p(a[l(n)],n)),e}function p(t,a){let e=!0;t===void 0?(t="Term not found in the glossary",e=!1):t=_(t);const r=e?"":" term-not-found";return a=l(a),`${a}`}function _(t){return t.replace(/:[\w+]*:([\w+]*):/g,(a,e)=>e).replace(/:([\w+]*):/g,(a,e)=>e)}function l(t){return t.split("_").join(" ")}const k={props:{terms:{type:Object,required:!0}},methods:{definition(t){return y(t,this.terms)}}},v={class:"defined-term"},w=["innerHTML"];function x(t,a,e,r,n,s){return i(),o("dl",null,[(i(!0),o(f,null,h(Object.keys(e.terms),d=>(i(),o("div",null,[c("dt",v,u(d),1),c("dd",{class:"term-definition",innerHTML:s.definition(d,e.terms)},null,8,w)]))),256))])}const T=m(k,[["render",x]]),A={id:"frontmatter-title",tabindex:"-1"},S=c("a",{class:"header-anchor",href:"#frontmatter-title","aria-label":'Permalink to "{{ $frontmatter.title }}"'},"​",-1),I=JSON.parse(`{"title":"Glossary","description":"","frontmatter":{"title":"Glossary","terms":{"buffer":"Data of a loaded file and additional metadata, associated with one or more views. The distinction between buffer and :view: is technical. Most of the time, both terms can be used interchangeably.\\n","view":"Graphical display of a buffer. Multiple views can show the same buffer.","plugin":"A feature implemented in Python, which can consist of a single command or multiple commands. It can be contained in one or many .py files.\\n","panel":"An input/output widget, such as a search panel or output panel.\\n","overlay":"An input widget of a special kind. For example, Goto Anything is an overlay.\\n","package":"A group of resource files providing extended functionality, consisting of e.g. snippets, syntax definitions, or plugins. Can be a folder in the Packages folder or an archived .sublime-package file.\\n","user package":"A :package: installed or managed by the user.\\n","shipped package":"A :package: that is provided by Sublime Text on every installation.\\n","core package":"A :shipped_package: that provides core functionality for Sublime Text.\\n","installed package":"A :user_package: inside the Installed Packages folder in the .sublime-package archive format.\\n","override package":"A special package that can override individual resource files of an :installed_package: or :shipped_package:.\\n","file type":"In the context of Sublime Text, a file type refers to the type of file as determined by the applicable .sublime-syntax syntax definition. However, this is an ambiguous term and in some instances it could also be used with the broader meaning it has in technical texts.\\n","PackageDev":"An installable package that provides syntax highlighting, snippets, completions, and more for Sublime Text's resource files.\\n","Package Control":"The de-facto package manager for Sublime Text. https://packagecontrol.io/\\n","command":"A command is an action to be executed and can be referenced in many resource files. It may accept JSON-serializable arguments and can be defined in user plugins.\\n","Data directory":"Core concept and storage for all of Sublime Text's resources. Refer to the introduction for details.\\n","console":"Internal Sublime Text console for debug messages and plugin output. Open via *View → Show Console*.\\n"}},"headers":[],"relativePath":"glossary.md","filePath":"glossary.md","lastUpdated":1703773698000}`),$={name:"glossary.md"},O=Object.assign($,{setup(t){return(a,e)=>(i(),o("div",null,[c("h1",A,[g(u(a.$frontmatter.title)+" ",1),S]),b(T,{terms:a.$frontmatter.terms},null,8,["terms"])]))}});export{I as __pageData,O as default};
+import{_ as m,o as i,c as o,F as f,E as h,k as c,t as u,a as g,I as b}from"./chunks/framework.e02z-eDF.js";function y(t,a){let e=a[l(t)];return e=e.replace(/:([\w+]*):([\w+]*):/g,(r,n,s)=>p(a[l(n)],s)),e=e.replace(/:([\w+]*):/g,(r,n,s)=>p(a[l(n)],n)),e}function p(t,a){let e=!0;t===void 0?(t="Term not found in the glossary",e=!1):t=_(t);const r=e?"":" term-not-found";return a=l(a),`${a}`}function _(t){return t.replace(/:[\w+]*:([\w+]*):/g,(a,e)=>e).replace(/:([\w+]*):/g,(a,e)=>e)}function l(t){return t.split("_").join(" ")}const k={props:{terms:{type:Object,required:!0}},methods:{definition(t){return y(t,this.terms)}}},v={class:"defined-term"},w=["innerHTML"];function x(t,a,e,r,n,s){return i(),o("dl",null,[(i(!0),o(f,null,h(Object.keys(e.terms),d=>(i(),o("div",null,[c("dt",v,u(d),1),c("dd",{class:"term-definition",innerHTML:s.definition(d,e.terms)},null,8,w)]))),256))])}const T=m(k,[["render",x]]),A={id:"frontmatter-title",tabindex:"-1"},S=c("a",{class:"header-anchor",href:"#frontmatter-title","aria-label":'Permalink to "{{ $frontmatter.title }}"'},"​",-1),I=JSON.parse(`{"title":"Glossary","description":"","frontmatter":{"title":"Glossary","terms":{"buffer":"Data of a loaded file and additional metadata, associated with one or more views. The distinction between buffer and :view: is technical. Most of the time, both terms can be used interchangeably.\\n","view":"Graphical display of a buffer. Multiple views can show the same buffer.","plugin":"A feature implemented in Python, which can consist of a single command or multiple commands. It can be contained in one or many .py files.\\n","panel":"An input/output widget, such as a search panel or output panel.\\n","overlay":"An input widget of a special kind. For example, Goto Anything is an overlay.\\n","package":"A group of resource files providing extended functionality, consisting of e.g. snippets, syntax definitions, or plugins. Can be a folder in the Packages folder or an archived .sublime-package file.\\n","user package":"A :package: installed or managed by the user.\\n","shipped package":"A :package: that is provided by Sublime Text on every installation.\\n","core package":"A :shipped_package: that provides core functionality for Sublime Text.\\n","installed package":"A :user_package: inside the Installed Packages folder in the .sublime-package archive format.\\n","override package":"A special package that can override individual resource files of an :installed_package: or :shipped_package:.\\n","file type":"In the context of Sublime Text, a file type refers to the type of file as determined by the applicable .sublime-syntax syntax definition. However, this is an ambiguous term and in some instances it could also be used with the broader meaning it has in technical texts.\\n","PackageDev":"An installable package that provides syntax highlighting, snippets, completions, and more for Sublime Text's resource files.\\n","Package Control":"The de-facto package manager for Sublime Text. https://packagecontrol.io/\\n","command":"A command is an action to be executed and can be referenced in many resource files. It may accept JSON-serializable arguments and can be defined in user plugins.\\n","Data directory":"Core concept and storage for all of Sublime Text's resources. Refer to the introduction for details.\\n","console":"Internal Sublime Text console for debug messages and plugin output. Open via *View → Show Console*.\\n"}},"headers":[],"relativePath":"glossary.md","filePath":"glossary.md","lastUpdated":1703774098000}`),$={name:"glossary.md"},O=Object.assign($,{setup(t){return(a,e)=>(i(),o("div",null,[c("h1",A,[g(u(a.$frontmatter.title)+" ",1),S]),b(T,{terms:a.$frontmatter.terms},null,8,["terms"])]))}});export{I as __pageData,O as default};
diff --git a/assets/glossary.md.IoE161Qp.lean.js b/assets/glossary.md.BLHmERQ3.lean.js
similarity index 98%
rename from assets/glossary.md.IoE161Qp.lean.js
rename to assets/glossary.md.BLHmERQ3.lean.js
index 46ea1133..fa6fa227 100644
--- a/assets/glossary.md.IoE161Qp.lean.js
+++ b/assets/glossary.md.BLHmERQ3.lean.js
@@ -1 +1 @@
-import{_ as m,o as i,c as o,F as f,E as h,k as c,t as u,a as g,I as b}from"./chunks/framework.e02z-eDF.js";function y(t,a){let e=a[l(t)];return e=e.replace(/:([\w+]*):([\w+]*):/g,(r,n,s)=>p(a[l(n)],s)),e=e.replace(/:([\w+]*):/g,(r,n,s)=>p(a[l(n)],n)),e}function p(t,a){let e=!0;t===void 0?(t="Term not found in the glossary",e=!1):t=_(t);const r=e?"":" term-not-found";return a=l(a),`${a}`}function _(t){return t.replace(/:[\w+]*:([\w+]*):/g,(a,e)=>e).replace(/:([\w+]*):/g,(a,e)=>e)}function l(t){return t.split("_").join(" ")}const k={props:{terms:{type:Object,required:!0}},methods:{definition(t){return y(t,this.terms)}}},v={class:"defined-term"},w=["innerHTML"];function x(t,a,e,r,n,s){return i(),o("dl",null,[(i(!0),o(f,null,h(Object.keys(e.terms),d=>(i(),o("div",null,[c("dt",v,u(d),1),c("dd",{class:"term-definition",innerHTML:s.definition(d,e.terms)},null,8,w)]))),256))])}const T=m(k,[["render",x]]),A={id:"frontmatter-title",tabindex:"-1"},S=c("a",{class:"header-anchor",href:"#frontmatter-title","aria-label":'Permalink to "{{ $frontmatter.title }}"'},"​",-1),I=JSON.parse(`{"title":"Glossary","description":"","frontmatter":{"title":"Glossary","terms":{"buffer":"Data of a loaded file and additional metadata, associated with one or more views. The distinction between buffer and :view: is technical. Most of the time, both terms can be used interchangeably.\\n","view":"Graphical display of a buffer. Multiple views can show the same buffer.","plugin":"A feature implemented in Python, which can consist of a single command or multiple commands. It can be contained in one or many .py files.\\n","panel":"An input/output widget, such as a search panel or output panel.\\n","overlay":"An input widget of a special kind. For example, Goto Anything is an overlay.\\n","package":"A group of resource files providing extended functionality, consisting of e.g. snippets, syntax definitions, or plugins. Can be a folder in the Packages folder or an archived .sublime-package file.\\n","user package":"A :package: installed or managed by the user.\\n","shipped package":"A :package: that is provided by Sublime Text on every installation.\\n","core package":"A :shipped_package: that provides core functionality for Sublime Text.\\n","installed package":"A :user_package: inside the Installed Packages folder in the .sublime-package archive format.\\n","override package":"A special package that can override individual resource files of an :installed_package: or :shipped_package:.\\n","file type":"In the context of Sublime Text, a file type refers to the type of file as determined by the applicable .sublime-syntax syntax definition. However, this is an ambiguous term and in some instances it could also be used with the broader meaning it has in technical texts.\\n","PackageDev":"An installable package that provides syntax highlighting, snippets, completions, and more for Sublime Text's resource files.\\n","Package Control":"The de-facto package manager for Sublime Text. https://packagecontrol.io/\\n","command":"A command is an action to be executed and can be referenced in many resource files. It may accept JSON-serializable arguments and can be defined in user plugins.\\n","Data directory":"Core concept and storage for all of Sublime Text's resources. Refer to the introduction for details.\\n","console":"Internal Sublime Text console for debug messages and plugin output. Open via *View → Show Console*.\\n"}},"headers":[],"relativePath":"glossary.md","filePath":"glossary.md","lastUpdated":1703773698000}`),$={name:"glossary.md"},O=Object.assign($,{setup(t){return(a,e)=>(i(),o("div",null,[c("h1",A,[g(u(a.$frontmatter.title)+" ",1),S]),b(T,{terms:a.$frontmatter.terms},null,8,["terms"])]))}});export{I as __pageData,O as default};
+import{_ as m,o as i,c as o,F as f,E as h,k as c,t as u,a as g,I as b}from"./chunks/framework.e02z-eDF.js";function y(t,a){let e=a[l(t)];return e=e.replace(/:([\w+]*):([\w+]*):/g,(r,n,s)=>p(a[l(n)],s)),e=e.replace(/:([\w+]*):/g,(r,n,s)=>p(a[l(n)],n)),e}function p(t,a){let e=!0;t===void 0?(t="Term not found in the glossary",e=!1):t=_(t);const r=e?"":" term-not-found";return a=l(a),`${a}`}function _(t){return t.replace(/:[\w+]*:([\w+]*):/g,(a,e)=>e).replace(/:([\w+]*):/g,(a,e)=>e)}function l(t){return t.split("_").join(" ")}const k={props:{terms:{type:Object,required:!0}},methods:{definition(t){return y(t,this.terms)}}},v={class:"defined-term"},w=["innerHTML"];function x(t,a,e,r,n,s){return i(),o("dl",null,[(i(!0),o(f,null,h(Object.keys(e.terms),d=>(i(),o("div",null,[c("dt",v,u(d),1),c("dd",{class:"term-definition",innerHTML:s.definition(d,e.terms)},null,8,w)]))),256))])}const T=m(k,[["render",x]]),A={id:"frontmatter-title",tabindex:"-1"},S=c("a",{class:"header-anchor",href:"#frontmatter-title","aria-label":'Permalink to "{{ $frontmatter.title }}"'},"​",-1),I=JSON.parse(`{"title":"Glossary","description":"","frontmatter":{"title":"Glossary","terms":{"buffer":"Data of a loaded file and additional metadata, associated with one or more views. The distinction between buffer and :view: is technical. Most of the time, both terms can be used interchangeably.\\n","view":"Graphical display of a buffer. Multiple views can show the same buffer.","plugin":"A feature implemented in Python, which can consist of a single command or multiple commands. It can be contained in one or many .py files.\\n","panel":"An input/output widget, such as a search panel or output panel.\\n","overlay":"An input widget of a special kind. For example, Goto Anything is an overlay.\\n","package":"A group of resource files providing extended functionality, consisting of e.g. snippets, syntax definitions, or plugins. Can be a folder in the Packages folder or an archived .sublime-package file.\\n","user package":"A :package: installed or managed by the user.\\n","shipped package":"A :package: that is provided by Sublime Text on every installation.\\n","core package":"A :shipped_package: that provides core functionality for Sublime Text.\\n","installed package":"A :user_package: inside the Installed Packages folder in the .sublime-package archive format.\\n","override package":"A special package that can override individual resource files of an :installed_package: or :shipped_package:.\\n","file type":"In the context of Sublime Text, a file type refers to the type of file as determined by the applicable .sublime-syntax syntax definition. However, this is an ambiguous term and in some instances it could also be used with the broader meaning it has in technical texts.\\n","PackageDev":"An installable package that provides syntax highlighting, snippets, completions, and more for Sublime Text's resource files.\\n","Package Control":"The de-facto package manager for Sublime Text. https://packagecontrol.io/\\n","command":"A command is an action to be executed and can be referenced in many resource files. It may accept JSON-serializable arguments and can be defined in user plugins.\\n","Data directory":"Core concept and storage for all of Sublime Text's resources. Refer to the introduction for details.\\n","console":"Internal Sublime Text console for debug messages and plugin output. Open via *View → Show Console*.\\n"}},"headers":[],"relativePath":"glossary.md","filePath":"glossary.md","lastUpdated":1703774098000}`),$={name:"glossary.md"},O=Object.assign($,{setup(t){return(a,e)=>(i(),o("div",null,[c("h1",A,[g(u(a.$frontmatter.title)+" ",1),S]),b(T,{terms:a.$frontmatter.terms},null,8,["terms"])]))}});export{I as __pageData,O as default};
diff --git a/assets/guide_customization_color_schemes.md.7lrTkUoC.js b/assets/guide_customization_color_schemes.md.TQRO_IWD.js
similarity index 96%
rename from assets/guide_customization_color_schemes.md.7lrTkUoC.js
rename to assets/guide_customization_color_schemes.md.TQRO_IWD.js
index da85cba1..deb2d9a2 100644
--- a/assets/guide_customization_color_schemes.md.7lrTkUoC.js
+++ b/assets/guide_customization_color_schemes.md.TQRO_IWD.js
@@ -1 +1 @@
-import{_ as e,o,c as t,R as s}from"./chunks/framework.e02z-eDF.js";const c="/assets/color_schemes_main.wQYHV8wR.png",f=JSON.parse('{"title":"Color Schemes","description":"","frontmatter":{"title":"Color Schemes"},"headers":[],"relativePath":"guide/customization/color_schemes.md","filePath":"guide/customization/color_schemes.md","lastUpdated":1703773698000}'),r={name:"guide/customization/color_schemes.md"},a=s('

Color Schemes

Sublime Text uses color schemes to highlight source code and to define the colors of some items in the editing area: background, foreground, gutter, caret, selection...

Color schemes are fully customizable.

Let's look at a Python file as Sublime Text highlights it using the default color scheme Monokai:

Selecting a Color Scheme

You can change the current color scheme by means of the Preferences → Color Scheme menu.

A common way of selecting a color scheme is by associating it to a type of file using file-type-specific settings. Select Preferences → Settings - Syntax Specific to open the corresponding settings file and set the color_scheme setting.

For more information about settings, see settings.

See Also

Official Documentation for Color Schemes : Complete reference on color scheme settings.

',10),i=[a];function n(l,m,h,p,d,_){return o(),t("div",null,i)}const u=e(r,[["render",n]]);export{f as __pageData,u as default}; +import{_ as e,o,c as t,R as s}from"./chunks/framework.e02z-eDF.js";const c="/assets/color_schemes_main.wQYHV8wR.png",f=JSON.parse('{"title":"Color Schemes","description":"","frontmatter":{"title":"Color Schemes"},"headers":[],"relativePath":"guide/customization/color_schemes.md","filePath":"guide/customization/color_schemes.md","lastUpdated":1703774098000}'),r={name:"guide/customization/color_schemes.md"},a=s('

Color Schemes

Sublime Text uses color schemes to highlight source code and to define the colors of some items in the editing area: background, foreground, gutter, caret, selection...

Color schemes are fully customizable.

Let's look at a Python file as Sublime Text highlights it using the default color scheme Monokai:

Selecting a Color Scheme

You can change the current color scheme by means of the Preferences → Color Scheme menu.

A common way of selecting a color scheme is by associating it to a type of file using file-type-specific settings. Select Preferences → Settings - Syntax Specific to open the corresponding settings file and set the color_scheme setting.

For more information about settings, see settings.

See Also

Official Documentation for Color Schemes : Complete reference on color scheme settings.

',10),i=[a];function n(l,m,h,p,d,_){return o(),t("div",null,i)}const u=e(r,[["render",n]]);export{f as __pageData,u as default}; diff --git a/assets/guide_customization_color_schemes.md.7lrTkUoC.lean.js b/assets/guide_customization_color_schemes.md.TQRO_IWD.lean.js similarity index 88% rename from assets/guide_customization_color_schemes.md.7lrTkUoC.lean.js rename to assets/guide_customization_color_schemes.md.TQRO_IWD.lean.js index 09fe4de4..68907d51 100644 --- a/assets/guide_customization_color_schemes.md.7lrTkUoC.lean.js +++ b/assets/guide_customization_color_schemes.md.TQRO_IWD.lean.js @@ -1 +1 @@ -import{_ as e,o,c as t,R as s}from"./chunks/framework.e02z-eDF.js";const c="/assets/color_schemes_main.wQYHV8wR.png",f=JSON.parse('{"title":"Color Schemes","description":"","frontmatter":{"title":"Color Schemes"},"headers":[],"relativePath":"guide/customization/color_schemes.md","filePath":"guide/customization/color_schemes.md","lastUpdated":1703773698000}'),r={name:"guide/customization/color_schemes.md"},a=s("",10),i=[a];function n(l,m,h,p,d,_){return o(),t("div",null,i)}const u=e(r,[["render",n]]);export{f as __pageData,u as default}; +import{_ as e,o,c as t,R as s}from"./chunks/framework.e02z-eDF.js";const c="/assets/color_schemes_main.wQYHV8wR.png",f=JSON.parse('{"title":"Color Schemes","description":"","frontmatter":{"title":"Color Schemes"},"headers":[],"relativePath":"guide/customization/color_schemes.md","filePath":"guide/customization/color_schemes.md","lastUpdated":1703774098000}'),r={name:"guide/customization/color_schemes.md"},a=s("",10),i=[a];function n(l,m,h,p,d,_){return o(),t("div",null,i)}const u=e(r,[["render",n]]);export{f as __pageData,u as default}; diff --git a/assets/guide_customization_key_bindings.md.VopMvquC.js b/assets/guide_customization_key_bindings.md.h1oO1BZ2.js similarity index 99% rename from assets/guide_customization_key_bindings.md.VopMvquC.js rename to assets/guide_customization_key_bindings.md.h1oO1BZ2.js index 86499e0a..f66889ff 100644 --- a/assets/guide_customization_key_bindings.md.VopMvquC.js +++ b/assets/guide_customization_key_bindings.md.h1oO1BZ2.js @@ -1,4 +1,4 @@ -import{_ as n,D as h,o as l,c as p,k as i,a as s,I as e,R as t}from"./chunks/framework.e02z-eDF.js";const v=JSON.parse('{"title":"Key Bindings","description":"","frontmatter":{"title":"Key Bindings"},"headers":[],"relativePath":"guide/customization/key_bindings.md","filePath":"guide/customization/key_bindings.md","lastUpdated":1703773698000}'),k={name:"guide/customization/key_bindings.md"},o=t(`

Key Bindings

See Also

Reference for key bindings : Complete documentation on key bindings.

Key bindings let you map sequences of key presses to commands.

File Format

Key bindings are defined in JSON and stored in .sublime-keymap files.

In the same package, separate keymap files for Linux, OSX and Windows may exist for better OS integration.

Example

json
[
+import{_ as n,D as h,o as l,c as p,k as i,a as s,I as e,R as t}from"./chunks/framework.e02z-eDF.js";const v=JSON.parse('{"title":"Key Bindings","description":"","frontmatter":{"title":"Key Bindings"},"headers":[],"relativePath":"guide/customization/key_bindings.md","filePath":"guide/customization/key_bindings.md","lastUpdated":1703774098000}'),k={name:"guide/customization/key_bindings.md"},o=t(`

Key Bindings

See Also

Reference for key bindings : Complete documentation on key bindings.

Key bindings let you map sequences of key presses to commands.

File Format

Key bindings are defined in JSON and stored in .sublime-keymap files.

In the same package, separate keymap files for Linux, OSX and Windows may exist for better OS integration.

Example

json
[
    { "keys": ["ctrl+shift+n"], "command": "new_window" },
    { "keys": ["ctrl+o"], "command": "prompt_open_file" }
 ]

Defining and Overriding Key Bindings

Sublime Text ships with default key bindings (for example, Packages/Default/Default (Windows).sublime-keymap). In order to override default key bindings or add new ones, use a separate keymap file with higher precedence: for example, Packages/User/Default (Windows).sublime-keymap.

Advanced Key Bindings

Simple key bindings consist of a sequence of one or more keys mapped to a command. However, there are more complex syntaxes for passing arguments to commands and restricting key bindings to specific contexts.

Passing Arguments

Use the args key to specify arguments:

json
{ "keys": ["shift+enter"], "command": "insert", "args": {"characters": "\\n"} }
`,15),d=i("code",null,"\\n",-1),r=i("code",null,"insert",-1),E=t(`

Contexts

Contexts determine whether a given key binding is enabled based on the caret's position or some other state.

json
{ "keys": ["escape"], "command": "clear_fields", "context":
diff --git a/assets/guide_customization_key_bindings.md.VopMvquC.lean.js b/assets/guide_customization_key_bindings.md.h1oO1BZ2.lean.js
similarity index 95%
rename from assets/guide_customization_key_bindings.md.VopMvquC.lean.js
rename to assets/guide_customization_key_bindings.md.h1oO1BZ2.lean.js
index 78eb7768..6bc2224f 100644
--- a/assets/guide_customization_key_bindings.md.VopMvquC.lean.js
+++ b/assets/guide_customization_key_bindings.md.h1oO1BZ2.lean.js
@@ -1 +1 @@
-import{_ as n,D as h,o as l,c as p,k as i,a as s,I as e,R as t}from"./chunks/framework.e02z-eDF.js";const v=JSON.parse('{"title":"Key Bindings","description":"","frontmatter":{"title":"Key Bindings"},"headers":[],"relativePath":"guide/customization/key_bindings.md","filePath":"guide/customization/key_bindings.md","lastUpdated":1703773698000}'),k={name:"guide/customization/key_bindings.md"},o=t("",15),d=i("code",null,"\\n",-1),r=i("code",null,"insert",-1),E=t("",3),g=i("em",null,"clear snippet fields and resume normal editing if there is a next snippet field available",-1),c=t("",4),u=i("code",null,"paste_from_history",-1),y=i("p",null,"Note: This example is a default key binding, so you can try it out for yourself.",-1);function m(F,q,_,f,C,b){const a=h("Key");return l(),p("div",null,[o,i("p",null,[s("Here, "),d,s(" is passed to the "),r,s(" command whenever "),e(a,{k:"shift+enter"}),s(" is pressed.")]),E,i("p",null,[s("This key binding translates to "),g,s(". Thus, pressing "),e(a,{k:"escape"}),s(" will only trigger this key binding if you are cycling through snippet fields.")]),c,i("p",null,[s("Here, to trigger the command "),u,s(", you have to press "),e(a,{k:"ctrl+k"}),s(" first, then release "),e(a,{k:"k"}),s(", and finally press "),e(a,{k:"v"}),s(".")]),y])}const x=n(k,[["render",m]]);export{v as __pageData,x as default};
+import{_ as n,D as h,o as l,c as p,k as i,a as s,I as e,R as t}from"./chunks/framework.e02z-eDF.js";const v=JSON.parse('{"title":"Key Bindings","description":"","frontmatter":{"title":"Key Bindings"},"headers":[],"relativePath":"guide/customization/key_bindings.md","filePath":"guide/customization/key_bindings.md","lastUpdated":1703774098000}'),k={name:"guide/customization/key_bindings.md"},o=t("",15),d=i("code",null,"\\n",-1),r=i("code",null,"insert",-1),E=t("",3),g=i("em",null,"clear snippet fields and resume normal editing if there is a next snippet field available",-1),c=t("",4),u=i("code",null,"paste_from_history",-1),y=i("p",null,"Note: This example is a default key binding, so you can try it out for yourself.",-1);function m(F,q,_,f,C,b){const a=h("Key");return l(),p("div",null,[o,i("p",null,[s("Here, "),d,s(" is passed to the "),r,s(" command whenever "),e(a,{k:"shift+enter"}),s(" is pressed.")]),E,i("p",null,[s("This key binding translates to "),g,s(". Thus, pressing "),e(a,{k:"escape"}),s(" will only trigger this key binding if you are cycling through snippet fields.")]),c,i("p",null,[s("Here, to trigger the command "),u,s(", you have to press "),e(a,{k:"ctrl+k"}),s(" first, then release "),e(a,{k:"k"}),s(", and finally press "),e(a,{k:"v"}),s(".")]),y])}const x=n(k,[["render",m]]);export{v as __pageData,x as default};
diff --git a/assets/guide_customization_menus.md.aQLYla-u.js b/assets/guide_customization_menus.md.uuRhXsWO.js
similarity index 99%
rename from assets/guide_customization_menus.md.aQLYla-u.js
rename to assets/guide_customization_menus.md.uuRhXsWO.js
index 1a64889d..c2bd2daa 100644
--- a/assets/guide_customization_menus.md.aQLYla-u.js
+++ b/assets/guide_customization_menus.md.uuRhXsWO.js
@@ -1,4 +1,4 @@
-import{_ as i,o as s,c as e,R as t}from"./chunks/framework.e02z-eDF.js";const a="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOIAAADOCAIAAACsHEnNAAAMCklEQVR42u2dK2wc1xqAT0F4gR0lUu+SWxBFViNzK5JVYGKQXhIQKUZB1cqgOKj4gpVVBVzkSAEhbYCJQRQpMo9yFVUBDvCSVJHBTYFRwN15nvfsbLzec/7d70Pjmd0zZ2Y+n8fs/P988+TJEwWQN99MNH348GHqagBEefr0KZpC7liafvnyZY5Ff/777398993nz59THyMI5tq1awpNIXPQFASApiAANAUBoCkIIJGm739//OxNubT54Nd/3Sr+fnl9/+ettbns0yltvoXPuveW85PfRsd/lYs3dsrtC66YYFJoWlyvTz8WdhbLJ+dbW7eWXdNS0ZsPqmO+oqNeZlJoGrg6y62p+X/Z/UkIk6TTL7r8jzvm9Skv2IM7b58VveKNdpPRT7aDgz9vV9fbuMaTj71e+1lbENO0XNi5eXxcjDeaveh9tLswxiNrlmFtSe6XdDE3diY7eGvJF7M0ctTugEgFqx3Zo1sxv6IiSTWFqk9fc+7KS1NdgWJRtcJUS+XH396ZbD5vPH3/+28vP6o79ytnnqv7rvRhTZ+92bTLNsS3ab51bv1nlItG+ZNqnN8tP1RXtTwwteNoatfP2IV/1F4FgtU2low9ehVbex05OmEknenrEZspVrOs3IasOOFr9SU/n1yF23fevpws33rvWtDZmgb2YmulW7PWoPY/o1DSaEpLJgLdPTeq4HXl3a2pU5+1YAVC1fb3qEIVc/9pRJL4hlRzBVVfTW9VTdOPn55PjJkI+nrt/vWXbltlN1/akogWTdtud/K6kGrpvnqu/3a0Oz/p0rTX2NQ/6rbQmTQN7EcfndhWNckU6uRkbas8wWZf7gvkdPr1BSiu3lvVdvevP938eP2u01qYg1+jlKimqjVt0kvq0WdZtWrA9/zTTaVu1+Pf4Ng63unX299sds30jTGGW4H33SfH7vSditlHN/m/rk5jez6jLX1eJJtCVb2aNUvwBdLdq545KEegdtnCv0mpwns5dyYs7cRkc1N9vF63V879JKt4Z+YVmEL5XwncN/VmZ7oCU8YGkSlUWbHbf1pH59uJphX8CnXlCFHtMqCpeKI9/RKBpkLxhx3LDJqCANAUBICmIAA0BQGgKQgATUEAaAoCQFMQwII0PTs7S32kIJj19XW1AE1THybI5uLiQtHpQ+YwNgUBoCkIAE1BAGgKAkBTEACaggDQFASQUNPx4U8/7L8qF7dH//1jb5D6XEC2JNK0VHTj6H+/btV/Ho739rZSnwzIlSSaFpKe/tI4CjCNFJp2WGoMBIZ1W3vy+Nt/f39078Vusb4cHSjr++V2xgzLTSJN99UoINbEuF1V2Vn4+uJeYV+x8qAavLYrx4+/Pd5pLW4WYWnJqTUdu61k6Z/VWhorKzlPHv/04RFN6bKT09h0uqb6E1WLPFL74XYZlotEM/2yJx+6M32n06+ELFa+q25YmR4Xnp5uqHffY+kKkO6+qTFb0vdN9cp2VdGaqqE6OChWa7OtkSwsOfn/ChWdyTN5Wh3Eahq9XQBLiERNq5EBP7CuEPlrCoCmIAE0BQGgKQgATUEAaAoCQFMQAJqCANAUBICmIAAiS0EA+UeWEusEWT29HwZNIatYKMvIavmX0x92D6qNQ56AXl1yiyx1NK0iS2lNV53MW1M0hYKsxqZoCmGyiiw19NXxpGgKuUWWlvoWa4bD4cG7ys56HVOoFYZfoUAAaAoCQFMQAJqCANAUBICmIAA0BQGgKQgATUEAaAoCQFMQAJqCANAUBJBE0/Y5KEVQKfQhlab1I6T6LWXTS+LB09UlsaazyIemq0tGmuqhwFC/G6p6cHp4dKR27RBTcyPPSy87GXb6zdax80KdSBvM6yBXgORTKKMt1KvbFz3vKz3DMtQ0A1QU7enyk7zTb3BfR1pvrYQsPXQ07Z02BeSTjabtOm8c0Gg7tjv95kWmsAJko2nbkW8Ph9ULc8fulMoKMTX7fTr9ZYdfoUAAaAoCQFMQAJqCANAUBICmIAA0BQGgKQgATUEAaAoCQFMQwII0PTs7S32kIJj19XW1AE1THybI5uLiQtHpQ+YwNgUBoCkIAE1BAGgKAkBTEACaggDQFASQ8tW65VIsKnRuGaOKXamjUPYUklKJIYWmZjKI+t3P/vdmcij+4SLI/3SjiqgeOB9GUzGk0LSXHvPRtEpFMVL7Oo8KmgokWQ4pN2eJm2EvmDGqHSF0JuuzCi39VGa+HzSVR6opVO1Z45WfYW8ckKnepLw0fhHhdDYqMy8Vmsoj6Uy/dHVjYurAz7CnaoeUt+nRBy/PWVg4001jPIym8kh8Q6q2p8M85SXfC6TjCwpnpqescIYTaCqGJFOow8PBXtvGld332ButmjI5m8a9On13XWs3msojdRrewKTI7vQHKpR8z73vaiXra/bhONh4qtBUHPwKBQJAUxAAmoIA0BQEgKYgADQFAaApCABNQQBoCgJAUxAAmoIAyMgHAiAjHwiAjHwgAMamIAA0BQGgKQgATUEAaAoCQFMQAJqCANJpaoSXbo+uIr7TCEid7w78AOz+W6dg5RaI1zqWl2BpA2UTJo5sg+8vdWHDtPlUtuo/I3n/YqS65D33i6aL0NTLWxJIZHIZLl8cmuZF6vymelWV7qk810f3XuwW3bXu9YL5+kYb+/tFD7kdSO4XsdQYCFhZ1qyixk62Cy9nsJ03xa1G91Zdh+3RZNsLW6yQarE627k2rNJCp0sN1cHBxtHc2oKFkkhTI91os6rNnLN7UF1SPRYI5uvbPdAJT6xs0KHyK4yPWoX7RXU3V1bioPh3Y1vrpdIlNXI11WPT9n8kVGe9C6+08Ol6dyUTgAWRZWvanM/JH8c7nfn6rESQHeUH1teFb52EirLL1PJsj1xLOr4b2hrOtNpWccqxuHUOlqa6T5dIchubmtepWTvoTsEXzxblePp1mupv+f9L2WraK7GmIBLO9Nue2pz2G8uWu7F8fSqajq/pbwvqmb7Tgfr/GCHD2sVwnzujpoOpnb4vbkedY51+/HS1hfgLqV3sIIv7pk4ivXKw/8pa35GvryNVdPuVbfPeV7WyXRU23kjx14w5tofD+lUTl9FUH/jsU6hQnYOlTUlviKYeM/4KJb57mgEJfmQCmibjRPr0e4Gg6YIJ5BSGqeSmKUAANAUBoCkIAE1BAGgKAkBTEACaggDQFASApiAANAUBJNT0iiI/veDM7VeBKIBeX+9ZraX/gTc9iTS9bORnBx3S9NS0/kxnwOu0B15hruTx9P48mZumvYtC0ysnk1goc1MoitKKNVVu4IUlSUfkRiAg03tMqfMpadU+ZWw+0a3C0bAwPzKJLK2IR346sabjOiZI6fAgqxAvODP+XH0dexmIxwh1+rEn85sa+mGuMA9yak2nh9SZKys5Xct6taaB2Mst48Ot5XbwSzi4VDEAWAA5jU2na+pGeY7Uvtcu99Q0NjaORSPFgksVmi6AhJGl/SM//VjTauRwulHH0DlFTx2bdsR3ROJUo8GlCk0XQLr7prNEfgZiTZ0gas2sUyi/0/c9G3vBpWboaY8wV7gc+f8KFb3w3uQJlhaxmkZvF8ASIlHTqgvmBuUKkb+mAGgKEkBTEACaggDQFASApiAANAUBoCkIAE1BAGgKAkiiqf+A/Rx3GHwZSL93TTrvKQt/cdbwVJLtzoFUmppvOJhvVMbXPkpnP8waj3SdMe6PBPvzILWm839A82sL7Pu9OYanQl9Sa+qGkLTRno8+BMNHvYjQ+AtF/d11vum0++1TvV4NGjlAI7rQr6roV4kujNRjU319vWjPf/7HCx/tExHarWn8TacFtXfeG2x7vhp0EDjAwNC0T6wLWCRtTZUd2xR406YdPjoORYR2xXzauxv064t1RpZZXw0ailQx52HTqwphEnf6+hn80FTDDR/1PzMl5tPZXd8hY1OqmqZpn/BU/82rHVWFMKnHpt09YB0+qnb+8N9uapcUjvl0PtSp6cnh4WCvFavJWjHTq0FDB+gX1lVVCJNcU6NXDER7OinR/IjQjheK+rvrbk39EfOsrwYN5qTwoma7qgph+BUKBICmIAA0BQGgKQgATUEAaAoCQFMQQEBTgDxBUxBArWnqagBM4f+8FRzb1EUDqgAAAABJRU5ErkJggg==",n="/assets/context_menu_modified.NKRLaQdY.png",l="/assets/statusbar_menu.G9BKhcnx.gif",f=JSON.parse('{"title":"Menus","description":"","frontmatter":{"title":"Menus"},"headers":[],"relativePath":"guide/customization/menus.md","filePath":"guide/customization/menus.md","lastUpdated":1703773698000}'),o={name:"guide/customization/menus.md"},h=t(`

Menus

Sublime Text provides several menus that can be modified, for example, by adding menu items.

File Format

FormatDescription
FormatJSON (with comments)
Extension.sublime-menu
NameOne out of the list of available menus. See menu-types for the complete name list and what menu each name represents.
LocationAny under Packages
ContentA list of menu-items

Example

The following is an excerpt from the default Main.sublime-menu file.

json
[
+import{_ as i,o as s,c as e,R as t}from"./chunks/framework.e02z-eDF.js";const a="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOIAAADOCAIAAACsHEnNAAAMCklEQVR42u2dK2wc1xqAT0F4gR0lUu+SWxBFViNzK5JVYGKQXhIQKUZB1cqgOKj4gpVVBVzkSAEhbYCJQRQpMo9yFVUBDvCSVJHBTYFRwN15nvfsbLzec/7d70Pjmd0zZ2Y+n8fs/P988+TJEwWQN99MNH348GHqagBEefr0KZpC7liafvnyZY5Ff/777398993nz59THyMI5tq1awpNIXPQFASApiAANAUBoCkIIJGm739//OxNubT54Nd/3Sr+fnl9/+ettbns0yltvoXPuveW85PfRsd/lYs3dsrtC66YYFJoWlyvTz8WdhbLJ+dbW7eWXdNS0ZsPqmO+oqNeZlJoGrg6y62p+X/Z/UkIk6TTL7r8jzvm9Skv2IM7b58VveKNdpPRT7aDgz9vV9fbuMaTj71e+1lbENO0XNi5eXxcjDeaveh9tLswxiNrlmFtSe6XdDE3diY7eGvJF7M0ctTugEgFqx3Zo1sxv6IiSTWFqk9fc+7KS1NdgWJRtcJUS+XH396ZbD5vPH3/+28vP6o79ytnnqv7rvRhTZ+92bTLNsS3ab51bv1nlItG+ZNqnN8tP1RXtTwwteNoatfP2IV/1F4FgtU2low9ehVbex05OmEknenrEZspVrOs3IasOOFr9SU/n1yF23fevpws33rvWtDZmgb2YmulW7PWoPY/o1DSaEpLJgLdPTeq4HXl3a2pU5+1YAVC1fb3qEIVc/9pRJL4hlRzBVVfTW9VTdOPn55PjJkI+nrt/vWXbltlN1/akogWTdtud/K6kGrpvnqu/3a0Oz/p0rTX2NQ/6rbQmTQN7EcfndhWNckU6uRkbas8wWZf7gvkdPr1BSiu3lvVdvevP938eP2u01qYg1+jlKimqjVt0kvq0WdZtWrA9/zTTaVu1+Pf4Ng63unX299sds30jTGGW4H33SfH7vSditlHN/m/rk5jez6jLX1eJJtCVb2aNUvwBdLdq545KEegdtnCv0mpwns5dyYs7cRkc1N9vF63V879JKt4Z+YVmEL5XwncN/VmZ7oCU8YGkSlUWbHbf1pH59uJphX8CnXlCFHtMqCpeKI9/RKBpkLxhx3LDJqCANAUBICmIAA0BQGgKQgATUEAaAoCQFMQwII0PTs7S32kIJj19XW1AE1THybI5uLiQtHpQ+YwNgUBoCkIAE1BAGgKAkBTEACaggDQFASQUNPx4U8/7L8qF7dH//1jb5D6XEC2JNK0VHTj6H+/btV/Ho739rZSnwzIlSSaFpKe/tI4CjCNFJp2WGoMBIZ1W3vy+Nt/f39078Vusb4cHSjr++V2xgzLTSJN99UoINbEuF1V2Vn4+uJeYV+x8qAavLYrx4+/Pd5pLW4WYWnJqTUdu61k6Z/VWhorKzlPHv/04RFN6bKT09h0uqb6E1WLPFL74XYZlotEM/2yJx+6M32n06+ELFa+q25YmR4Xnp5uqHffY+kKkO6+qTFb0vdN9cp2VdGaqqE6OChWa7OtkSwsOfn/ChWdyTN5Wh3Eahq9XQBLiERNq5EBP7CuEPlrCoCmIAE0BQGgKQgATUEAaAoCQFMQAJqCANAUBICmIAAiS0EA+UeWEusEWT29HwZNIatYKMvIavmX0x92D6qNQ56AXl1yiyx1NK0iS2lNV53MW1M0hYKsxqZoCmGyiiw19NXxpGgKuUWWlvoWa4bD4cG7ys56HVOoFYZfoUAAaAoCQFMQAJqCANAUBICmIAA0BQGgKQgATUEAaAoCQFMQAJqCANAUBJBE0/Y5KEVQKfQhlab1I6T6LWXTS+LB09UlsaazyIemq0tGmuqhwFC/G6p6cHp4dKR27RBTcyPPSy87GXb6zdax80KdSBvM6yBXgORTKKMt1KvbFz3vKz3DMtQ0A1QU7enyk7zTb3BfR1pvrYQsPXQ07Z02BeSTjabtOm8c0Gg7tjv95kWmsAJko2nbkW8Ph9ULc8fulMoKMTX7fTr9ZYdfoUAAaAoCQFMQAJqCANAUBICmIAA0BQGgKQgATUEAaAoCQFMQwII0PTs7S32kIJj19XW1AE1THybI5uLiQtHpQ+YwNgUBoCkIAE1BAGgKAkBTEACaggDQFASQ8tW65VIsKnRuGaOKXamjUPYUklKJIYWmZjKI+t3P/vdmcij+4SLI/3SjiqgeOB9GUzGk0LSXHvPRtEpFMVL7Oo8KmgokWQ4pN2eJm2EvmDGqHSF0JuuzCi39VGa+HzSVR6opVO1Z45WfYW8ckKnepLw0fhHhdDYqMy8Vmsoj6Uy/dHVjYurAz7CnaoeUt+nRBy/PWVg4001jPIym8kh8Q6q2p8M85SXfC6TjCwpnpqescIYTaCqGJFOow8PBXtvGld332ButmjI5m8a9On13XWs3msojdRrewKTI7vQHKpR8z73vaiXra/bhONh4qtBUHPwKBQJAUxAAmoIA0BQEgKYgADQFAaApCABNQQBoCgJAUxAAmoIAyMgHAiAjHwiAjHwgAMamIAA0BQGgKQgATUEAaAoCQFMQAJqCANJpaoSXbo+uIr7TCEid7w78AOz+W6dg5RaI1zqWl2BpA2UTJo5sg+8vdWHDtPlUtuo/I3n/YqS65D33i6aL0NTLWxJIZHIZLl8cmuZF6vymelWV7qk810f3XuwW3bXu9YL5+kYb+/tFD7kdSO4XsdQYCFhZ1qyixk62Cy9nsJ03xa1G91Zdh+3RZNsLW6yQarE627k2rNJCp0sN1cHBxtHc2oKFkkhTI91os6rNnLN7UF1SPRYI5uvbPdAJT6xs0KHyK4yPWoX7RXU3V1bioPh3Y1vrpdIlNXI11WPT9n8kVGe9C6+08Ol6dyUTgAWRZWvanM/JH8c7nfn6rESQHeUH1teFb52EirLL1PJsj1xLOr4b2hrOtNpWccqxuHUOlqa6T5dIchubmtepWTvoTsEXzxblePp1mupv+f9L2WraK7GmIBLO9Nue2pz2G8uWu7F8fSqajq/pbwvqmb7Tgfr/GCHD2sVwnzujpoOpnb4vbkedY51+/HS1hfgLqV3sIIv7pk4ivXKw/8pa35GvryNVdPuVbfPeV7WyXRU23kjx14w5tofD+lUTl9FUH/jsU6hQnYOlTUlviKYeM/4KJb57mgEJfmQCmibjRPr0e4Gg6YIJ5BSGqeSmKUAANAUBoCkIAE1BAGgKAkBTEACaggDQFASApiAANAUBJNT0iiI/veDM7VeBKIBeX+9ZraX/gTc9iTS9bORnBx3S9NS0/kxnwOu0B15hruTx9P48mZumvYtC0ysnk1goc1MoitKKNVVu4IUlSUfkRiAg03tMqfMpadU+ZWw+0a3C0bAwPzKJLK2IR346sabjOiZI6fAgqxAvODP+XH0dexmIxwh1+rEn85sa+mGuMA9yak2nh9SZKys5Xct6taaB2Mst48Ot5XbwSzi4VDEAWAA5jU2na+pGeY7Uvtcu99Q0NjaORSPFgksVmi6AhJGl/SM//VjTauRwulHH0DlFTx2bdsR3ROJUo8GlCk0XQLr7prNEfgZiTZ0gas2sUyi/0/c9G3vBpWboaY8wV7gc+f8KFb3w3uQJlhaxmkZvF8ASIlHTqgvmBuUKkb+mAGgKEkBTEACaggDQFASApiAANAUBoCkIAE1BAGgKAkiiqf+A/Rx3GHwZSL93TTrvKQt/cdbwVJLtzoFUmppvOJhvVMbXPkpnP8waj3SdMe6PBPvzILWm839A82sL7Pu9OYanQl9Sa+qGkLTRno8+BMNHvYjQ+AtF/d11vum0++1TvV4NGjlAI7rQr6roV4kujNRjU319vWjPf/7HCx/tExHarWn8TacFtXfeG2x7vhp0EDjAwNC0T6wLWCRtTZUd2xR406YdPjoORYR2xXzauxv064t1RpZZXw0ailQx52HTqwphEnf6+hn80FTDDR/1PzMl5tPZXd8hY1OqmqZpn/BU/82rHVWFMKnHpt09YB0+qnb+8N9uapcUjvl0PtSp6cnh4WCvFavJWjHTq0FDB+gX1lVVCJNcU6NXDER7OinR/IjQjheK+rvrbk39EfOsrwYN5qTwoma7qgph+BUKBICmIAA0BQGgKQgATUEAaAoCQFMQQEBTgDxBUxBArWnqagBM4f+8FRzb1EUDqgAAAABJRU5ErkJggg==",n="/assets/context_menu_modified.NKRLaQdY.png",l="/assets/statusbar_menu.G9BKhcnx.gif",f=JSON.parse('{"title":"Menus","description":"","frontmatter":{"title":"Menus"},"headers":[],"relativePath":"guide/customization/menus.md","filePath":"guide/customization/menus.md","lastUpdated":1703774098000}'),o={name:"guide/customization/menus.md"},h=t(`

Menus

Sublime Text provides several menus that can be modified, for example, by adding menu items.

File Format

FormatDescription
FormatJSON (with comments)
Extension.sublime-menu
NameOne out of the list of available menus. See menu-types for the complete name list and what menu each name represents.
LocationAny under Packages
ContentA list of menu-items

Example

The following is an excerpt from the default Main.sublime-menu file.

json
[
     {
         "caption": "Edit",
         "mnemonic": "E",
diff --git a/assets/guide_customization_menus.md.aQLYla-u.lean.js b/assets/guide_customization_menus.md.uuRhXsWO.lean.js
similarity index 98%
rename from assets/guide_customization_menus.md.aQLYla-u.lean.js
rename to assets/guide_customization_menus.md.uuRhXsWO.lean.js
index 149c1828..d9f14022 100644
--- a/assets/guide_customization_menus.md.aQLYla-u.lean.js
+++ b/assets/guide_customization_menus.md.uuRhXsWO.lean.js
@@ -1 +1 @@
-import{_ as i,o as s,c as e,R as t}from"./chunks/framework.e02z-eDF.js";const a="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOIAAADOCAIAAACsHEnNAAAMCklEQVR42u2dK2wc1xqAT0F4gR0lUu+SWxBFViNzK5JVYGKQXhIQKUZB1cqgOKj4gpVVBVzkSAEhbYCJQRQpMo9yFVUBDvCSVJHBTYFRwN15nvfsbLzec/7d70Pjmd0zZ2Y+n8fs/P988+TJEwWQN99MNH348GHqagBEefr0KZpC7liafvnyZY5Ff/777398993nz59THyMI5tq1awpNIXPQFASApiAANAUBoCkIIJGm739//OxNubT54Nd/3Sr+fnl9/+ettbns0yltvoXPuveW85PfRsd/lYs3dsrtC66YYFJoWlyvTz8WdhbLJ+dbW7eWXdNS0ZsPqmO+oqNeZlJoGrg6y62p+X/Z/UkIk6TTL7r8jzvm9Skv2IM7b58VveKNdpPRT7aDgz9vV9fbuMaTj71e+1lbENO0XNi5eXxcjDeaveh9tLswxiNrlmFtSe6XdDE3diY7eGvJF7M0ctTugEgFqx3Zo1sxv6IiSTWFqk9fc+7KS1NdgWJRtcJUS+XH396ZbD5vPH3/+28vP6o79ytnnqv7rvRhTZ+92bTLNsS3ab51bv1nlItG+ZNqnN8tP1RXtTwwteNoatfP2IV/1F4FgtU2low9ehVbex05OmEknenrEZspVrOs3IasOOFr9SU/n1yF23fevpws33rvWtDZmgb2YmulW7PWoPY/o1DSaEpLJgLdPTeq4HXl3a2pU5+1YAVC1fb3qEIVc/9pRJL4hlRzBVVfTW9VTdOPn55PjJkI+nrt/vWXbltlN1/akogWTdtud/K6kGrpvnqu/3a0Oz/p0rTX2NQ/6rbQmTQN7EcfndhWNckU6uRkbas8wWZf7gvkdPr1BSiu3lvVdvevP938eP2u01qYg1+jlKimqjVt0kvq0WdZtWrA9/zTTaVu1+Pf4Ng63unX299sds30jTGGW4H33SfH7vSditlHN/m/rk5jez6jLX1eJJtCVb2aNUvwBdLdq545KEegdtnCv0mpwns5dyYs7cRkc1N9vF63V879JKt4Z+YVmEL5XwncN/VmZ7oCU8YGkSlUWbHbf1pH59uJphX8CnXlCFHtMqCpeKI9/RKBpkLxhx3LDJqCANAUBICmIAA0BQGgKQgATUEAaAoCQFMQwII0PTs7S32kIJj19XW1AE1THybI5uLiQtHpQ+YwNgUBoCkIAE1BAGgKAkBTEACaggDQFASQUNPx4U8/7L8qF7dH//1jb5D6XEC2JNK0VHTj6H+/btV/Ho739rZSnwzIlSSaFpKe/tI4CjCNFJp2WGoMBIZ1W3vy+Nt/f39078Vusb4cHSjr++V2xgzLTSJN99UoINbEuF1V2Vn4+uJeYV+x8qAavLYrx4+/Pd5pLW4WYWnJqTUdu61k6Z/VWhorKzlPHv/04RFN6bKT09h0uqb6E1WLPFL74XYZlotEM/2yJx+6M32n06+ELFa+q25YmR4Xnp5uqHffY+kKkO6+qTFb0vdN9cp2VdGaqqE6OChWa7OtkSwsOfn/ChWdyTN5Wh3Eahq9XQBLiERNq5EBP7CuEPlrCoCmIAE0BQGgKQgATUEAaAoCQFMQAJqCANAUBICmIAAiS0EA+UeWEusEWT29HwZNIatYKMvIavmX0x92D6qNQ56AXl1yiyx1NK0iS2lNV53MW1M0hYKsxqZoCmGyiiw19NXxpGgKuUWWlvoWa4bD4cG7ys56HVOoFYZfoUAAaAoCQFMQAJqCANAUBICmIAA0BQGgKQgATUEAaAoCQFMQAJqCANAUBJBE0/Y5KEVQKfQhlab1I6T6LWXTS+LB09UlsaazyIemq0tGmuqhwFC/G6p6cHp4dKR27RBTcyPPSy87GXb6zdax80KdSBvM6yBXgORTKKMt1KvbFz3vKz3DMtQ0A1QU7enyk7zTb3BfR1pvrYQsPXQ07Z02BeSTjabtOm8c0Gg7tjv95kWmsAJko2nbkW8Ph9ULc8fulMoKMTX7fTr9ZYdfoUAAaAoCQFMQAJqCANAUBICmIAA0BQGgKQgATUEAaAoCQFMQwII0PTs7S32kIJj19XW1AE1THybI5uLiQtHpQ+YwNgUBoCkIAE1BAGgKAkBTEACaggDQFASQ8tW65VIsKnRuGaOKXamjUPYUklKJIYWmZjKI+t3P/vdmcij+4SLI/3SjiqgeOB9GUzGk0LSXHvPRtEpFMVL7Oo8KmgokWQ4pN2eJm2EvmDGqHSF0JuuzCi39VGa+HzSVR6opVO1Z45WfYW8ckKnepLw0fhHhdDYqMy8Vmsoj6Uy/dHVjYurAz7CnaoeUt+nRBy/PWVg4001jPIym8kh8Q6q2p8M85SXfC6TjCwpnpqescIYTaCqGJFOow8PBXtvGld332ButmjI5m8a9On13XWs3msojdRrewKTI7vQHKpR8z73vaiXra/bhONh4qtBUHPwKBQJAUxAAmoIA0BQEgKYgADQFAaApCABNQQBoCgJAUxAAmoIAyMgHAiAjHwiAjHwgAMamIAA0BQGgKQgATUEAaAoCQFMQAJqCANJpaoSXbo+uIr7TCEid7w78AOz+W6dg5RaI1zqWl2BpA2UTJo5sg+8vdWHDtPlUtuo/I3n/YqS65D33i6aL0NTLWxJIZHIZLl8cmuZF6vymelWV7qk810f3XuwW3bXu9YL5+kYb+/tFD7kdSO4XsdQYCFhZ1qyixk62Cy9nsJ03xa1G91Zdh+3RZNsLW6yQarE627k2rNJCp0sN1cHBxtHc2oKFkkhTI91os6rNnLN7UF1SPRYI5uvbPdAJT6xs0KHyK4yPWoX7RXU3V1bioPh3Y1vrpdIlNXI11WPT9n8kVGe9C6+08Ol6dyUTgAWRZWvanM/JH8c7nfn6rESQHeUH1teFb52EirLL1PJsj1xLOr4b2hrOtNpWccqxuHUOlqa6T5dIchubmtepWTvoTsEXzxblePp1mupv+f9L2WraK7GmIBLO9Nue2pz2G8uWu7F8fSqajq/pbwvqmb7Tgfr/GCHD2sVwnzujpoOpnb4vbkedY51+/HS1hfgLqV3sIIv7pk4ivXKw/8pa35GvryNVdPuVbfPeV7WyXRU23kjx14w5tofD+lUTl9FUH/jsU6hQnYOlTUlviKYeM/4KJb57mgEJfmQCmibjRPr0e4Gg6YIJ5BSGqeSmKUAANAUBoCkIAE1BAGgKAkBTEACaggDQFASApiAANAUBJNT0iiI/veDM7VeBKIBeX+9ZraX/gTc9iTS9bORnBx3S9NS0/kxnwOu0B15hruTx9P48mZumvYtC0ysnk1goc1MoitKKNVVu4IUlSUfkRiAg03tMqfMpadU+ZWw+0a3C0bAwPzKJLK2IR346sabjOiZI6fAgqxAvODP+XH0dexmIxwh1+rEn85sa+mGuMA9yak2nh9SZKys5Xct6taaB2Mst48Ot5XbwSzi4VDEAWAA5jU2na+pGeY7Uvtcu99Q0NjaORSPFgksVmi6AhJGl/SM//VjTauRwulHH0DlFTx2bdsR3ROJUo8GlCk0XQLr7prNEfgZiTZ0gas2sUyi/0/c9G3vBpWboaY8wV7gc+f8KFb3w3uQJlhaxmkZvF8ASIlHTqgvmBuUKkb+mAGgKEkBTEACaggDQFASApiAANAUBoCkIAE1BAGgKAkiiqf+A/Rx3GHwZSL93TTrvKQt/cdbwVJLtzoFUmppvOJhvVMbXPkpnP8waj3SdMe6PBPvzILWm839A82sL7Pu9OYanQl9Sa+qGkLTRno8+BMNHvYjQ+AtF/d11vum0++1TvV4NGjlAI7rQr6roV4kujNRjU319vWjPf/7HCx/tExHarWn8TacFtXfeG2x7vhp0EDjAwNC0T6wLWCRtTZUd2xR406YdPjoORYR2xXzauxv064t1RpZZXw0ailQx52HTqwphEnf6+hn80FTDDR/1PzMl5tPZXd8hY1OqmqZpn/BU/82rHVWFMKnHpt09YB0+qnb+8N9uapcUjvl0PtSp6cnh4WCvFavJWjHTq0FDB+gX1lVVCJNcU6NXDER7OinR/IjQjheK+rvrbk39EfOsrwYN5qTwoma7qgph+BUKBICmIAA0BQGgKQgATUEAaAoCQFMQQEBTgDxBUxBArWnqagBM4f+8FRzb1EUDqgAAAABJRU5ErkJggg==",n="/assets/context_menu_modified.NKRLaQdY.png",l="/assets/statusbar_menu.G9BKhcnx.gif",f=JSON.parse('{"title":"Menus","description":"","frontmatter":{"title":"Menus"},"headers":[],"relativePath":"guide/customization/menus.md","filePath":"guide/customization/menus.md","lastUpdated":1703773698000}'),o={name:"guide/customization/menus.md"},h=t("",53),r=[h];function p(d,k,m,u,E,c){return s(),e("div",null,r)}const q=i(o,[["render",p]]);export{f as __pageData,q as default};
+import{_ as i,o as s,c as e,R as t}from"./chunks/framework.e02z-eDF.js";const a="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOIAAADOCAIAAACsHEnNAAAMCklEQVR42u2dK2wc1xqAT0F4gR0lUu+SWxBFViNzK5JVYGKQXhIQKUZB1cqgOKj4gpVVBVzkSAEhbYCJQRQpMo9yFVUBDvCSVJHBTYFRwN15nvfsbLzec/7d70Pjmd0zZ2Y+n8fs/P988+TJEwWQN99MNH348GHqagBEefr0KZpC7liafvnyZY5Ff/777398993nz59THyMI5tq1awpNIXPQFASApiAANAUBoCkIIJGm739//OxNubT54Nd/3Sr+fnl9/+ettbns0yltvoXPuveW85PfRsd/lYs3dsrtC66YYFJoWlyvTz8WdhbLJ+dbW7eWXdNS0ZsPqmO+oqNeZlJoGrg6y62p+X/Z/UkIk6TTL7r8jzvm9Skv2IM7b58VveKNdpPRT7aDgz9vV9fbuMaTj71e+1lbENO0XNi5eXxcjDeaveh9tLswxiNrlmFtSe6XdDE3diY7eGvJF7M0ctTugEgFqx3Zo1sxv6IiSTWFqk9fc+7KS1NdgWJRtcJUS+XH396ZbD5vPH3/+28vP6o79ytnnqv7rvRhTZ+92bTLNsS3ab51bv1nlItG+ZNqnN8tP1RXtTwwteNoatfP2IV/1F4FgtU2low9ehVbex05OmEknenrEZspVrOs3IasOOFr9SU/n1yF23fevpws33rvWtDZmgb2YmulW7PWoPY/o1DSaEpLJgLdPTeq4HXl3a2pU5+1YAVC1fb3qEIVc/9pRJL4hlRzBVVfTW9VTdOPn55PjJkI+nrt/vWXbltlN1/akogWTdtud/K6kGrpvnqu/3a0Oz/p0rTX2NQ/6rbQmTQN7EcfndhWNckU6uRkbas8wWZf7gvkdPr1BSiu3lvVdvevP938eP2u01qYg1+jlKimqjVt0kvq0WdZtWrA9/zTTaVu1+Pf4Ng63unX299sds30jTGGW4H33SfH7vSditlHN/m/rk5jez6jLX1eJJtCVb2aNUvwBdLdq545KEegdtnCv0mpwns5dyYs7cRkc1N9vF63V879JKt4Z+YVmEL5XwncN/VmZ7oCU8YGkSlUWbHbf1pH59uJphX8CnXlCFHtMqCpeKI9/RKBpkLxhx3LDJqCANAUBICmIAA0BQGgKQgATUEAaAoCQFMQwII0PTs7S32kIJj19XW1AE1THybI5uLiQtHpQ+YwNgUBoCkIAE1BAGgKAkBTEACaggDQFASQUNPx4U8/7L8qF7dH//1jb5D6XEC2JNK0VHTj6H+/btV/Ho739rZSnwzIlSSaFpKe/tI4CjCNFJp2WGoMBIZ1W3vy+Nt/f39078Vusb4cHSjr++V2xgzLTSJN99UoINbEuF1V2Vn4+uJeYV+x8qAavLYrx4+/Pd5pLW4WYWnJqTUdu61k6Z/VWhorKzlPHv/04RFN6bKT09h0uqb6E1WLPFL74XYZlotEM/2yJx+6M32n06+ELFa+q25YmR4Xnp5uqHffY+kKkO6+qTFb0vdN9cp2VdGaqqE6OChWa7OtkSwsOfn/ChWdyTN5Wh3Eahq9XQBLiERNq5EBP7CuEPlrCoCmIAE0BQGgKQgATUEAaAoCQFMQAJqCANAUBICmIAAiS0EA+UeWEusEWT29HwZNIatYKMvIavmX0x92D6qNQ56AXl1yiyx1NK0iS2lNV53MW1M0hYKsxqZoCmGyiiw19NXxpGgKuUWWlvoWa4bD4cG7ys56HVOoFYZfoUAAaAoCQFMQAJqCANAUBICmIAA0BQGgKQgATUEAaAoCQFMQAJqCANAUBJBE0/Y5KEVQKfQhlab1I6T6LWXTS+LB09UlsaazyIemq0tGmuqhwFC/G6p6cHp4dKR27RBTcyPPSy87GXb6zdax80KdSBvM6yBXgORTKKMt1KvbFz3vKz3DMtQ0A1QU7enyk7zTb3BfR1pvrYQsPXQ07Z02BeSTjabtOm8c0Gg7tjv95kWmsAJko2nbkW8Ph9ULc8fulMoKMTX7fTr9ZYdfoUAAaAoCQFMQAJqCANAUBICmIAA0BQGgKQgATUEAaAoCQFMQwII0PTs7S32kIJj19XW1AE1THybI5uLiQtHpQ+YwNgUBoCkIAE1BAGgKAkBTEACaggDQFASQ8tW65VIsKnRuGaOKXamjUPYUklKJIYWmZjKI+t3P/vdmcij+4SLI/3SjiqgeOB9GUzGk0LSXHvPRtEpFMVL7Oo8KmgokWQ4pN2eJm2EvmDGqHSF0JuuzCi39VGa+HzSVR6opVO1Z45WfYW8ckKnepLw0fhHhdDYqMy8Vmsoj6Uy/dHVjYurAz7CnaoeUt+nRBy/PWVg4001jPIym8kh8Q6q2p8M85SXfC6TjCwpnpqescIYTaCqGJFOow8PBXtvGld332ButmjI5m8a9On13XWs3msojdRrewKTI7vQHKpR8z73vaiXra/bhONh4qtBUHPwKBQJAUxAAmoIA0BQEgKYgADQFAaApCABNQQBoCgJAUxAAmoIAyMgHAiAjHwiAjHwgAMamIAA0BQGgKQgATUEAaAoCQFMQAJqCANJpaoSXbo+uIr7TCEid7w78AOz+W6dg5RaI1zqWl2BpA2UTJo5sg+8vdWHDtPlUtuo/I3n/YqS65D33i6aL0NTLWxJIZHIZLl8cmuZF6vymelWV7qk810f3XuwW3bXu9YL5+kYb+/tFD7kdSO4XsdQYCFhZ1qyixk62Cy9nsJ03xa1G91Zdh+3RZNsLW6yQarE627k2rNJCp0sN1cHBxtHc2oKFkkhTI91os6rNnLN7UF1SPRYI5uvbPdAJT6xs0KHyK4yPWoX7RXU3V1bioPh3Y1vrpdIlNXI11WPT9n8kVGe9C6+08Ol6dyUTgAWRZWvanM/JH8c7nfn6rESQHeUH1teFb52EirLL1PJsj1xLOr4b2hrOtNpWccqxuHUOlqa6T5dIchubmtepWTvoTsEXzxblePp1mupv+f9L2WraK7GmIBLO9Nue2pz2G8uWu7F8fSqajq/pbwvqmb7Tgfr/GCHD2sVwnzujpoOpnb4vbkedY51+/HS1hfgLqV3sIIv7pk4ivXKw/8pa35GvryNVdPuVbfPeV7WyXRU23kjx14w5tofD+lUTl9FUH/jsU6hQnYOlTUlviKYeM/4KJb57mgEJfmQCmibjRPr0e4Gg6YIJ5BSGqeSmKUAANAUBoCkIAE1BAGgKAkBTEACaggDQFASApiAANAUBJNT0iiI/veDM7VeBKIBeX+9ZraX/gTc9iTS9bORnBx3S9NS0/kxnwOu0B15hruTx9P48mZumvYtC0ysnk1goc1MoitKKNVVu4IUlSUfkRiAg03tMqfMpadU+ZWw+0a3C0bAwPzKJLK2IR346sabjOiZI6fAgqxAvODP+XH0dexmIxwh1+rEn85sa+mGuMA9yak2nh9SZKys5Xct6taaB2Mst48Ot5XbwSzi4VDEAWAA5jU2na+pGeY7Uvtcu99Q0NjaORSPFgksVmi6AhJGl/SM//VjTauRwulHH0DlFTx2bdsR3ROJUo8GlCk0XQLr7prNEfgZiTZ0gas2sUyi/0/c9G3vBpWboaY8wV7gc+f8KFb3w3uQJlhaxmkZvF8ASIlHTqgvmBuUKkb+mAGgKEkBTEACaggDQFASApiAANAUBoCkIAE1BAGgKAkiiqf+A/Rx3GHwZSL93TTrvKQt/cdbwVJLtzoFUmppvOJhvVMbXPkpnP8waj3SdMe6PBPvzILWm839A82sL7Pu9OYanQl9Sa+qGkLTRno8+BMNHvYjQ+AtF/d11vum0++1TvV4NGjlAI7rQr6roV4kujNRjU319vWjPf/7HCx/tExHarWn8TacFtXfeG2x7vhp0EDjAwNC0T6wLWCRtTZUd2xR406YdPjoORYR2xXzauxv064t1RpZZXw0ailQx52HTqwphEnf6+hn80FTDDR/1PzMl5tPZXd8hY1OqmqZpn/BU/82rHVWFMKnHpt09YB0+qnb+8N9uapcUjvl0PtSp6cnh4WCvFavJWjHTq0FDB+gX1lVVCJNcU6NXDER7OinR/IjQjheK+rvrbk39EfOsrwYN5qTwoma7qgph+BUKBICmIAA0BQGgKQgATUEAaAoCQFMQQEBTgDxBUxBArWnqagBM4f+8FRzb1EUDqgAAAABJRU5ErkJggg==",n="/assets/context_menu_modified.NKRLaQdY.png",l="/assets/statusbar_menu.G9BKhcnx.gif",f=JSON.parse('{"title":"Menus","description":"","frontmatter":{"title":"Menus"},"headers":[],"relativePath":"guide/customization/menus.md","filePath":"guide/customization/menus.md","lastUpdated":1703774098000}'),o={name:"guide/customization/menus.md"},h=t("",53),r=[h];function p(d,k,m,u,E,c){return s(),e("div",null,r)}const q=i(o,[["render",p]]);export{f as __pageData,q as default};
diff --git a/assets/guide_customization_settings.md.JypFhw0q.js b/assets/guide_customization_settings.md.43PLThv_.js
similarity index 99%
rename from assets/guide_customization_settings.md.JypFhw0q.js
rename to assets/guide_customization_settings.md.43PLThv_.js
index 5ea735f7..c245b9d0 100644
--- a/assets/guide_customization_settings.md.JypFhw0q.js
+++ b/assets/guide_customization_settings.md.43PLThv_.js
@@ -1 +1 @@
-import{_ as e,o as t,c as s,R as i}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"Settings","description":"","frontmatter":{"title":"Settings"},"headers":[],"relativePath":"guide/customization/settings.md","filePath":"guide/customization/settings.md","lastUpdated":1703773698000}'),o={name:"guide/customization/settings.md"},a=i('

Settings

Sublime Text stores configuration data in .sublime-settings files. Flexibility comes at the price of a slightly complex system for applying settings. However, here's a rule of thumb:

Always place your personal settings files under Packages/User to guarantee they will take precedence over any other conflicting settings files.

With that out of the way, let's unveil, to please masochistic readers, the mysteries of how settings work.

Format

Settings files use JSON and have the .sublime-settings extension.

Types of Settings

The name of each .sublime-settings file determines its purpose. Names can be descriptive (like Preferences (Windows).sublime-settings or Minimap.sublime-settings), or they can be related to what the settings file is controlling. For example, file type settings need to carry the name of the .tmLanguage syntax definition for the file type. Thus, for the .py file type, whose syntax definition is contained in Python.tmLanguage, the corresponding settings files would be called Python.sublime-settings.

Also, some settings files only apply to specific platforms. This can be inferred from the file names, e.g. Preferences ({platform}).sublime-settings. Valid names for platform are Windows, Linux, OSX.

This is important: Platform-specific settings files in the Packages/User folder are ignored. This way, you can be sure a single settings file overrides all the others.

Settings changes are usually updated in real time, but you may have to restart Sublime Text in order to load new settings files.

How to Access and Edit Common Settings Files

Unless you need very fine-grained control over settings, you can access the main configuration files through the Preferences | Settings - User and Preferences | Settings - More menu items. Editing Preferences | Settings - Default is discouraged, because changes will be reverted with every update to the software. However, you can use that file for reference: it contains comments explaining the purpose of all available global and file type settings.

Order of Precedence of .sublime-settings Files

The same settings file (such as Python.sublime-settings) can appear in multiple places. All settings defined in identically named files will be merged together and overwritten according to predefined rules. See merging-and-order-of-precedence for more information.

Let us remember again that any given settings file in Packages/User ultimately overrides every other settings file of the same name.

In addition to settings files, Sublime Text maintains session data, which is configuration for the particular set of files being currently edited. Session data is updated as you work on files, so if you adjust settings for a particular file in any way (mainly through API calls), they will be recorded in the session and will take precedence over any applicable .sublime-settings files.

To check the value of a setting for a particular file being edited, use view.settings().get("setting_name") from the console.

Finally, it's also worth noting that some settings may be automatically adjusted for you. Keep this in mind if you're puzzled about some setting's value. For instance, this is the case for certain whitespace-related settings and the syntax setting.

Below, you can see the order in which Sublime Text would process a hypothetical hierarchy of settings for Python files on Windows:

  • Packages/Default/Preferences.sublime-settings
  • Packages/Default/Preferences (Windows).sublime-settings
  • Packages/User/Preferences.sublime-settings
  • Packages/Python/Python.sublime-settings
  • Packages/User/Python.sublime-settings
  • Session data for the current file
  • Auto adjusted settings

This list is not exhaustive. See The Settings Hierarchy for a full example of the order of precedence.

Global Editor Settings and Global File Settings

These settings are stored in Preferences.sublime-settings and Preferences ({platform}).sublime-settings files. The defaults can be found in Packages/Default.

Valid names for platform are Windows, Linux, OSX.

File Type Settings

If you want to target a specific file type, name the .sublime-settings file after the file type's syntax definition. For example, if our syntax definition +was called Python.tmLanguage, we'd need to call our settings file Python.sublime-settings.

Settings files for specific file types usually live in packages, like +Packages/Python, but there can be multiple settings files in separate locations for the same file type.

Similarly to global settings, one can establish platform-specific settings for file types. For example, Python (Linux).sublime-settings would only be consulted under Linux.

Also, let us emphasize that under Packages/User only Python.sublime-settings would be read, but not any Python ({platform}).sublime-settings variant.

Regardless of its location, any file-type-specific settings file has precedence over a global settings file affecting file types.

The Settings Hierarchy

Below, you can see the exhaustive settings sources that Sublime Text would process for Python files on Windows. As always, later specifications override earlier ones.

  • Global settings
    • Packages/Default/Preferences.sublime-settings
    • Packages/Default/Preferences (Windows).sublime-settings
    • Packages/AnyOtherPackage/Preferences.sublime-settings
    • Packages/AnyOtherPackage/Preferences (Windows).sublime-settings
    • Packages/User/Preferences.sublime-settings
  • Settings from the current project
  • Syntax-specific settings
    • Packages/Python/Python.sublime-settings
    • Packages/Python/Python (Windows).sublime-settings
    • Packages/User/Python.sublime-settings
  • Session data for the current file (View-specific settings)
  • Auto-adjusted settings

Note that settings files may also appear in package subdirectories, which have been excluded for brevity.

Where to Store User Settings (Once Again)

Whenever you want to save settings, especially if they should be preserved between software updates, place the corresponding .sublime-settings file in Packages/User.

',37),n=[a];function l(r,c,d,g,h,f){return t(),s("div",null,n)}const p=e(o,[["render",l]]);export{m as __pageData,p as default}; +import{_ as e,o as t,c as s,R as i}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"Settings","description":"","frontmatter":{"title":"Settings"},"headers":[],"relativePath":"guide/customization/settings.md","filePath":"guide/customization/settings.md","lastUpdated":1703774098000}'),o={name:"guide/customization/settings.md"},a=i('

Settings

Sublime Text stores configuration data in .sublime-settings files. Flexibility comes at the price of a slightly complex system for applying settings. However, here's a rule of thumb:

Always place your personal settings files under Packages/User to guarantee they will take precedence over any other conflicting settings files.

With that out of the way, let's unveil, to please masochistic readers, the mysteries of how settings work.

Format

Settings files use JSON and have the .sublime-settings extension.

Types of Settings

The name of each .sublime-settings file determines its purpose. Names can be descriptive (like Preferences (Windows).sublime-settings or Minimap.sublime-settings), or they can be related to what the settings file is controlling. For example, file type settings need to carry the name of the .tmLanguage syntax definition for the file type. Thus, for the .py file type, whose syntax definition is contained in Python.tmLanguage, the corresponding settings files would be called Python.sublime-settings.

Also, some settings files only apply to specific platforms. This can be inferred from the file names, e.g. Preferences ({platform}).sublime-settings. Valid names for platform are Windows, Linux, OSX.

This is important: Platform-specific settings files in the Packages/User folder are ignored. This way, you can be sure a single settings file overrides all the others.

Settings changes are usually updated in real time, but you may have to restart Sublime Text in order to load new settings files.

How to Access and Edit Common Settings Files

Unless you need very fine-grained control over settings, you can access the main configuration files through the Preferences | Settings - User and Preferences | Settings - More menu items. Editing Preferences | Settings - Default is discouraged, because changes will be reverted with every update to the software. However, you can use that file for reference: it contains comments explaining the purpose of all available global and file type settings.

Order of Precedence of .sublime-settings Files

The same settings file (such as Python.sublime-settings) can appear in multiple places. All settings defined in identically named files will be merged together and overwritten according to predefined rules. See merging-and-order-of-precedence for more information.

Let us remember again that any given settings file in Packages/User ultimately overrides every other settings file of the same name.

In addition to settings files, Sublime Text maintains session data, which is configuration for the particular set of files being currently edited. Session data is updated as you work on files, so if you adjust settings for a particular file in any way (mainly through API calls), they will be recorded in the session and will take precedence over any applicable .sublime-settings files.

To check the value of a setting for a particular file being edited, use view.settings().get("setting_name") from the console.

Finally, it's also worth noting that some settings may be automatically adjusted for you. Keep this in mind if you're puzzled about some setting's value. For instance, this is the case for certain whitespace-related settings and the syntax setting.

Below, you can see the order in which Sublime Text would process a hypothetical hierarchy of settings for Python files on Windows:

  • Packages/Default/Preferences.sublime-settings
  • Packages/Default/Preferences (Windows).sublime-settings
  • Packages/User/Preferences.sublime-settings
  • Packages/Python/Python.sublime-settings
  • Packages/User/Python.sublime-settings
  • Session data for the current file
  • Auto adjusted settings

This list is not exhaustive. See The Settings Hierarchy for a full example of the order of precedence.

Global Editor Settings and Global File Settings

These settings are stored in Preferences.sublime-settings and Preferences ({platform}).sublime-settings files. The defaults can be found in Packages/Default.

Valid names for platform are Windows, Linux, OSX.

File Type Settings

If you want to target a specific file type, name the .sublime-settings file after the file type's syntax definition. For example, if our syntax definition +was called Python.tmLanguage, we'd need to call our settings file Python.sublime-settings.

Settings files for specific file types usually live in packages, like +Packages/Python, but there can be multiple settings files in separate locations for the same file type.

Similarly to global settings, one can establish platform-specific settings for file types. For example, Python (Linux).sublime-settings would only be consulted under Linux.

Also, let us emphasize that under Packages/User only Python.sublime-settings would be read, but not any Python ({platform}).sublime-settings variant.

Regardless of its location, any file-type-specific settings file has precedence over a global settings file affecting file types.

The Settings Hierarchy

Below, you can see the exhaustive settings sources that Sublime Text would process for Python files on Windows. As always, later specifications override earlier ones.

  • Global settings
    • Packages/Default/Preferences.sublime-settings
    • Packages/Default/Preferences (Windows).sublime-settings
    • Packages/AnyOtherPackage/Preferences.sublime-settings
    • Packages/AnyOtherPackage/Preferences (Windows).sublime-settings
    • Packages/User/Preferences.sublime-settings
  • Settings from the current project
  • Syntax-specific settings
    • Packages/Python/Python.sublime-settings
    • Packages/Python/Python (Windows).sublime-settings
    • Packages/User/Python.sublime-settings
  • Session data for the current file (View-specific settings)
  • Auto-adjusted settings

Note that settings files may also appear in package subdirectories, which have been excluded for brevity.

Where to Store User Settings (Once Again)

Whenever you want to save settings, especially if they should be preserved between software updates, place the corresponding .sublime-settings file in Packages/User.

',37),n=[a];function l(r,c,d,g,h,f){return t(),s("div",null,n)}const p=e(o,[["render",l]]);export{m as __pageData,p as default}; diff --git a/assets/guide_customization_settings.md.JypFhw0q.lean.js b/assets/guide_customization_settings.md.43PLThv_.lean.js similarity index 86% rename from assets/guide_customization_settings.md.JypFhw0q.lean.js rename to assets/guide_customization_settings.md.43PLThv_.lean.js index e7a05f9e..15485de0 100644 --- a/assets/guide_customization_settings.md.JypFhw0q.lean.js +++ b/assets/guide_customization_settings.md.43PLThv_.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as s,R as i}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"Settings","description":"","frontmatter":{"title":"Settings"},"headers":[],"relativePath":"guide/customization/settings.md","filePath":"guide/customization/settings.md","lastUpdated":1703773698000}'),o={name:"guide/customization/settings.md"},a=i("",37),n=[a];function l(r,c,d,g,h,f){return t(),s("div",null,n)}const p=e(o,[["render",l]]);export{m as __pageData,p as default}; +import{_ as e,o as t,c as s,R as i}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"Settings","description":"","frontmatter":{"title":"Settings"},"headers":[],"relativePath":"guide/customization/settings.md","filePath":"guide/customization/settings.md","lastUpdated":1703774098000}'),o={name:"guide/customization/settings.md"},a=i("",37),n=[a];function l(r,c,d,g,h,f){return t(),s("div",null,n)}const p=e(o,[["render",l]]);export{m as __pageData,p as default}; diff --git a/assets/guide_extensibility_command_palette.md.nOvsifqC.js b/assets/guide_extensibility_command_palette.md.n18YI6ic.js similarity index 99% rename from assets/guide_extensibility_command_palette.md.nOvsifqC.js rename to assets/guide_extensibility_command_palette.md.n18YI6ic.js index e2043612..cf11ea4b 100644 --- a/assets/guide_extensibility_command_palette.md.nOvsifqC.js +++ b/assets/guide_extensibility_command_palette.md.n18YI6ic.js @@ -1,4 +1,4 @@ -import{_ as n,D as l,o as h,c as k,k as s,a as i,I as t,R as e}from"./chunks/framework.e02z-eDF.js";const b=JSON.parse('{"title":"Command Palette","description":"","frontmatter":{"title":"Command Palette"},"headers":[],"relativePath":"guide/extensibility/command_palette.md","filePath":"guide/extensibility/command_palette.md","lastUpdated":1703773698000}'),p={name:"guide/extensibility/command_palette.md"},o=e('

Command Palette

See Also

Reference for Command Palette : Complete documentation on the command palette options.

Overview

',3),E=s("em",null,"command palette",-1),d=s("code",null,".sublime-commands",-1),r=s("code",null,".sublime-commands",-1),c=e(`

By default, the command palette includes many useful commands, and provides convenient access to individual settings as well as settings files.

File Format (Commands Files)

Commands files use JSON and have the .sublime-commands extension.

Here's an excerpt from Packages/Default/Default.sublime-commands:

json
[
+import{_ as n,D as l,o as h,c as k,k as s,a as i,I as t,R as e}from"./chunks/framework.e02z-eDF.js";const b=JSON.parse('{"title":"Command Palette","description":"","frontmatter":{"title":"Command Palette"},"headers":[],"relativePath":"guide/extensibility/command_palette.md","filePath":"guide/extensibility/command_palette.md","lastUpdated":1703774098000}'),p={name:"guide/extensibility/command_palette.md"},o=e('

Command Palette

See Also

Reference for Command Palette : Complete documentation on the command palette options.

Overview

',3),E=s("em",null,"command palette",-1),d=s("code",null,".sublime-commands",-1),r=s("code",null,".sublime-commands",-1),c=e(`

By default, the command palette includes many useful commands, and provides convenient access to individual settings as well as settings files.

File Format (Commands Files)

Commands files use JSON and have the .sublime-commands extension.

Here's an excerpt from Packages/Default/Default.sublime-commands:

json
[
     { "caption": "Project: Save As", "command": "save_project_as" },
     { "caption": "Project: Close", "command": "close_project" },
     { "caption": "Project: Add Folder", "command": "prompt_add_folder" },
diff --git a/assets/guide_extensibility_command_palette.md.nOvsifqC.lean.js b/assets/guide_extensibility_command_palette.md.n18YI6ic.lean.js
similarity index 95%
rename from assets/guide_extensibility_command_palette.md.nOvsifqC.lean.js
rename to assets/guide_extensibility_command_palette.md.n18YI6ic.lean.js
index 7f9743f3..610ed278 100644
--- a/assets/guide_extensibility_command_palette.md.nOvsifqC.lean.js
+++ b/assets/guide_extensibility_command_palette.md.n18YI6ic.lean.js
@@ -1 +1 @@
-import{_ as n,D as l,o as h,c as k,k as s,a as i,I as t,R as e}from"./chunks/framework.e02z-eDF.js";const b=JSON.parse('{"title":"Command Palette","description":"","frontmatter":{"title":"Command Palette"},"headers":[],"relativePath":"guide/extensibility/command_palette.md","filePath":"guide/extensibility/command_palette.md","lastUpdated":1703773698000}'),p={name:"guide/extensibility/command_palette.md"},o=e("",3),E=s("em",null,"command palette",-1),d=s("code",null,".sublime-commands",-1),r=s("code",null,".sublime-commands",-1),c=e("",9),u=s("li",null,"Select command",-1),g=s("p",null,[i("The command palette filters entries by context. This means that whenever you open it, you won't always see all the commands defined in every "),s("code",null,".sublime-commands"),i(" file.")],-1);function m(F,y,q,C,_,f){const a=l("Key");return h(),k("div",null,[o,s("p",null,[i("The "),E,i(" bound to "),t(a,{k:"ctrl+shift+p"}),i(" is an interactive list whose purpose is to execute commands. The command palette is fed by entries in "),d,i(" files. Usually, commands that don't warrant creating a key binding of their own are good candidates for inclusion in a "),r,i(" files.")]),c,s("ol",null,[s("li",null,[i("Press "),t(a,{k:"ctrl+shift+p"})]),u]),g])}const P=n(p,[["render",m]]);export{b as __pageData,P as default};
+import{_ as n,D as l,o as h,c as k,k as s,a as i,I as t,R as e}from"./chunks/framework.e02z-eDF.js";const b=JSON.parse('{"title":"Command Palette","description":"","frontmatter":{"title":"Command Palette"},"headers":[],"relativePath":"guide/extensibility/command_palette.md","filePath":"guide/extensibility/command_palette.md","lastUpdated":1703774098000}'),p={name:"guide/extensibility/command_palette.md"},o=e("",3),E=s("em",null,"command palette",-1),d=s("code",null,".sublime-commands",-1),r=s("code",null,".sublime-commands",-1),c=e("",9),u=s("li",null,"Select command",-1),g=s("p",null,[i("The command palette filters entries by context. This means that whenever you open it, you won't always see all the commands defined in every "),s("code",null,".sublime-commands"),i(" file.")],-1);function m(F,y,q,C,_,f){const a=l("Key");return h(),k("div",null,[o,s("p",null,[i("The "),E,i(" bound to "),t(a,{k:"ctrl+shift+p"}),i(" is an interactive list whose purpose is to execute commands. The command palette is fed by entries in "),d,i(" files. Usually, commands that don't warrant creating a key binding of their own are good candidates for inclusion in a "),r,i(" files.")]),c,s("ol",null,[s("li",null,[i("Press "),t(a,{k:"ctrl+shift+p"})]),u]),g])}const P=n(p,[["render",m]]);export{b as __pageData,P as default};
diff --git a/assets/guide_extensibility_commands.md.VqQYHsyV.js b/assets/guide_extensibility_commands.md.vIZiuU2z.js
similarity index 98%
rename from assets/guide_extensibility_commands.md.VqQYHsyV.js
rename to assets/guide_extensibility_commands.md.vIZiuU2z.js
index a123a3d0..3ad1be5d 100644
--- a/assets/guide_extensibility_commands.md.VqQYHsyV.js
+++ b/assets/guide_extensibility_commands.md.vIZiuU2z.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as i,R as t}from"./chunks/framework.e02z-eDF.js";const u=JSON.parse('{"title":"Commands","description":"","frontmatter":{"title":"Commands"},"headers":[],"relativePath":"guide/extensibility/commands.md","filePath":"guide/extensibility/commands.md","lastUpdated":1703773698000}'),e={name:"guide/extensibility/commands.md"},n=t(`

Commands

Commands are ubiquitous in Sublime Text: key bindings, menu items and macros all work through the command system. They are found in other places too.

Some commands are implemented in the editor's core, but many of them are provided as Python plugins. Every command can be called from a Python plugin.

Command Dispatching

Normally, commands are bound to the application object, a window object or a view object. Window objects, however, will dispatch commands based on input focus, so you can issue a view command from a window object and the correct view instance will be found for you.

Anatomy of a Command

Commands have a name separated by underscores (snake_case) like hot_exit, and can take a dictionary of arguments whose keys must be strings and whose values must be JSON types. Here are a few examples of commands run from the Python console:

py
view.run_command("goto_line", {"line": 10})
+import{_ as s,o as a,c as i,R as t}from"./chunks/framework.e02z-eDF.js";const u=JSON.parse('{"title":"Commands","description":"","frontmatter":{"title":"Commands"},"headers":[],"relativePath":"guide/extensibility/commands.md","filePath":"guide/extensibility/commands.md","lastUpdated":1703774098000}'),e={name:"guide/extensibility/commands.md"},n=t(`

Commands

Commands are ubiquitous in Sublime Text: key bindings, menu items and macros all work through the command system. They are found in other places too.

Some commands are implemented in the editor's core, but many of them are provided as Python plugins. Every command can be called from a Python plugin.

Command Dispatching

Normally, commands are bound to the application object, a window object or a view object. Window objects, however, will dispatch commands based on input focus, so you can issue a view command from a window object and the correct view instance will be found for you.

Anatomy of a Command

Commands have a name separated by underscores (snake_case) like hot_exit, and can take a dictionary of arguments whose keys must be strings and whose values must be JSON types. Here are a few examples of commands run from the Python console:

py
view.run_command("goto_line", {"line": 10})
 view.run_command('insert_snippet', {"contents": "<$SELECTION>"})
 view.window().run_command("prompt_select_project")

From command line (CLI)

Commands may be passed to Sublime Text directly from the command line of the operating system. Usage:

bash
subl --command 'show_overlay {"overlay": "command_palette", "text": "hello"}'
 # on Windows:
diff --git a/assets/guide_extensibility_commands.md.VqQYHsyV.lean.js b/assets/guide_extensibility_commands.md.vIZiuU2z.lean.js
similarity index 86%
rename from assets/guide_extensibility_commands.md.VqQYHsyV.lean.js
rename to assets/guide_extensibility_commands.md.vIZiuU2z.lean.js
index 60bf9672..7a4c84a5 100644
--- a/assets/guide_extensibility_commands.md.VqQYHsyV.lean.js
+++ b/assets/guide_extensibility_commands.md.vIZiuU2z.lean.js
@@ -1 +1 @@
-import{_ as s,o as a,c as i,R as t}from"./chunks/framework.e02z-eDF.js";const u=JSON.parse('{"title":"Commands","description":"","frontmatter":{"title":"Commands"},"headers":[],"relativePath":"guide/extensibility/commands.md","filePath":"guide/extensibility/commands.md","lastUpdated":1703773698000}'),e={name:"guide/extensibility/commands.md"},n=t("",12),o=[n];function h(l,p,d,k,r,m){return a(),i("div",null,o)}const F=s(e,[["render",h]]);export{u as __pageData,F as default};
+import{_ as s,o as a,c as i,R as t}from"./chunks/framework.e02z-eDF.js";const u=JSON.parse('{"title":"Commands","description":"","frontmatter":{"title":"Commands"},"headers":[],"relativePath":"guide/extensibility/commands.md","filePath":"guide/extensibility/commands.md","lastUpdated":1703774098000}'),e={name:"guide/extensibility/commands.md"},n=t("",12),o=[n];function h(l,p,d,k,r,m){return a(),i("div",null,o)}const F=s(e,[["render",h]]);export{u as __pageData,F as default};
diff --git a/assets/guide_extensibility_completions.md.jFjMsa_P.js b/assets/guide_extensibility_completions.md.aGyOSXlO.js
similarity index 99%
rename from assets/guide_extensibility_completions.md.jFjMsa_P.js
rename to assets/guide_extensibility_completions.md.aGyOSXlO.js
index 8f3ed5b5..9267543e 100644
--- a/assets/guide_extensibility_completions.md.jFjMsa_P.js
+++ b/assets/guide_extensibility_completions.md.aGyOSXlO.js
@@ -1,4 +1,4 @@
-import{_ as a,D as n,o as l,c as r,k as e,a as t,I as i,R as s}from"./chunks/framework.e02z-eDF.js";const c="/assets/completions_hint.uAbRxX1X.png",p="/assets/completions_contents.-5Vq944a.gif",$=JSON.parse('{"title":"Completions","description":"","frontmatter":{"title":"Completions"},"headers":[],"relativePath":"guide/extensibility/completions.md","filePath":"guide/extensibility/completions.md","lastUpdated":1703773698000}'),h={name:"guide/extensibility/completions.md"},d=e("h1",{id:"completions",tabindex:"-1"},[t("Completions "),e("a",{class:"header-anchor",href:"#completions","aria-label":'Permalink to "Completions"'},"​")],-1),m=e("p",null,"In the spirit of IDEs, Sublime Text suggests completions that aggregate code or content while writing by catching everything that you have written, like variable names.",-1),u=e("p",null,"There are however several ways to extend the list of completions (for example, depending on the current syntax).",-1),f=e("p",null,"This topic deals with how completions are used and where they come from.",-1),g=e("h2",{id:"how-to-use-completions",tabindex:"-1"},[t("How to Use Completions "),e("a",{class:"header-anchor",href:"#how-to-use-completions","aria-label":'Permalink to "How to Use Completions"'},"​")],-1),_=e("p",null,"There are two methods for using completions. Even though, when screening them, the priority given to completions always stays the same, the two methods produce different results.",-1),b=e("p",null,"Completions can be inserted in two ways:",-1),y=e("h3",{id:"the-completions-list",tabindex:"-1"},[t("The Completions List "),e("a",{class:"header-anchor",href:"#the-completions-list","aria-label":'Permalink to "The Completions List"'},"​")],-1),w=e("p",null,"To use the completions list:",-1),x=e("em",null,"up",-1),k=e("em",null,"down",-1),T=e("code",null,"auto_complete_commit_on_tab",-1),v=s('

Note

If the completions list was opened explicitly, the current selection in the completions list can also be validated with any punctuation sign that isn't itself bound to a snippet (e.g. .).

When the list of completion candidates can be narrowed down to one unambiguous choice given the current prefix, this one completion will be validated automatically the moment you trigger the completion list.

Hints

Additionally, you may see a trigger hint on the right side of a completion's trigger in the completions list. This can be used as a preview of the completion's content.

image

The above is in fact a snippet and expands to $arrayName = array('' => , );.

Triggers and Contents

Completions not sourced from the text in the current file may provide a trigger that is different to the content they will insert if selected. This is commonly used for function completions where the content also includes the function's signature.

For example, completing array_map from the PHP completions will result in array_map({callback}, {arr1}):

image

You may notice in the animation that the cursor automatically selected callback. This is because completions support the same features as snippets with fields and placeholders. For more details, refer to Snippet Features.

Completions with multiple cursors

Sublime Text can also handle completions with multiple cursors but will only open the completion list when all cursors share the same text between the current cursor positions and the last word separator character (e.g. . or a line break).

Working example (| represents one cursor):

l|
+import{_ as a,D as n,o as l,c as r,k as e,a as t,I as i,R as s}from"./chunks/framework.e02z-eDF.js";const c="/assets/completions_hint.uAbRxX1X.png",p="/assets/completions_contents.-5Vq944a.gif",$=JSON.parse('{"title":"Completions","description":"","frontmatter":{"title":"Completions"},"headers":[],"relativePath":"guide/extensibility/completions.md","filePath":"guide/extensibility/completions.md","lastUpdated":1703774098000}'),h={name:"guide/extensibility/completions.md"},d=e("h1",{id:"completions",tabindex:"-1"},[t("Completions "),e("a",{class:"header-anchor",href:"#completions","aria-label":'Permalink to "Completions"'},"​")],-1),m=e("p",null,"In the spirit of IDEs, Sublime Text suggests completions that aggregate code or content while writing by catching everything that you have written, like variable names.",-1),u=e("p",null,"There are however several ways to extend the list of completions (for example, depending on the current syntax).",-1),f=e("p",null,"This topic deals with how completions are used and where they come from.",-1),g=e("h2",{id:"how-to-use-completions",tabindex:"-1"},[t("How to Use Completions "),e("a",{class:"header-anchor",href:"#how-to-use-completions","aria-label":'Permalink to "How to Use Completions"'},"​")],-1),_=e("p",null,"There are two methods for using completions. Even though, when screening them, the priority given to completions always stays the same, the two methods produce different results.",-1),b=e("p",null,"Completions can be inserted in two ways:",-1),y=e("h3",{id:"the-completions-list",tabindex:"-1"},[t("The Completions List "),e("a",{class:"header-anchor",href:"#the-completions-list","aria-label":'Permalink to "The Completions List"'},"​")],-1),w=e("p",null,"To use the completions list:",-1),x=e("em",null,"up",-1),k=e("em",null,"down",-1),T=e("code",null,"auto_complete_commit_on_tab",-1),v=s('

Note

If the completions list was opened explicitly, the current selection in the completions list can also be validated with any punctuation sign that isn't itself bound to a snippet (e.g. .).

When the list of completion candidates can be narrowed down to one unambiguous choice given the current prefix, this one completion will be validated automatically the moment you trigger the completion list.

Hints

Additionally, you may see a trigger hint on the right side of a completion's trigger in the completions list. This can be used as a preview of the completion's content.

image

The above is in fact a snippet and expands to $arrayName = array('' => , );.

Triggers and Contents

Completions not sourced from the text in the current file may provide a trigger that is different to the content they will insert if selected. This is commonly used for function completions where the content also includes the function's signature.

For example, completing array_map from the PHP completions will result in array_map({callback}, {arr1}):

image

You may notice in the animation that the cursor automatically selected callback. This is because completions support the same features as snippets with fields and placeholders. For more details, refer to Snippet Features.

Completions with multiple cursors

Sublime Text can also handle completions with multiple cursors but will only open the completion list when all cursors share the same text between the current cursor positions and the last word separator character (e.g. . or a line break).

Working example (| represents one cursor):

l|
 some text with l|
 l| and.l|
 

Not working example:

l|
diff --git a/assets/guide_extensibility_completions.md.jFjMsa_P.lean.js b/assets/guide_extensibility_completions.md.aGyOSXlO.lean.js
similarity index 98%
rename from assets/guide_extensibility_completions.md.jFjMsa_P.lean.js
rename to assets/guide_extensibility_completions.md.aGyOSXlO.lean.js
index 44121fdc..e143c585 100644
--- a/assets/guide_extensibility_completions.md.jFjMsa_P.lean.js
+++ b/assets/guide_extensibility_completions.md.aGyOSXlO.lean.js
@@ -1 +1 @@
-import{_ as a,D as n,o as l,c as r,k as e,a as t,I as i,R as s}from"./chunks/framework.e02z-eDF.js";const c="/assets/completions_hint.uAbRxX1X.png",p="/assets/completions_contents.-5Vq944a.gif",$=JSON.parse('{"title":"Completions","description":"","frontmatter":{"title":"Completions"},"headers":[],"relativePath":"guide/extensibility/completions.md","filePath":"guide/extensibility/completions.md","lastUpdated":1703773698000}'),h={name:"guide/extensibility/completions.md"},d=e("h1",{id:"completions",tabindex:"-1"},[t("Completions "),e("a",{class:"header-anchor",href:"#completions","aria-label":'Permalink to "Completions"'},"​")],-1),m=e("p",null,"In the spirit of IDEs, Sublime Text suggests completions that aggregate code or content while writing by catching everything that you have written, like variable names.",-1),u=e("p",null,"There are however several ways to extend the list of completions (for example, depending on the current syntax).",-1),f=e("p",null,"This topic deals with how completions are used and where they come from.",-1),g=e("h2",{id:"how-to-use-completions",tabindex:"-1"},[t("How to Use Completions "),e("a",{class:"header-anchor",href:"#how-to-use-completions","aria-label":'Permalink to "How to Use Completions"'},"​")],-1),_=e("p",null,"There are two methods for using completions. Even though, when screening them, the priority given to completions always stays the same, the two methods produce different results.",-1),b=e("p",null,"Completions can be inserted in two ways:",-1),y=e("h3",{id:"the-completions-list",tabindex:"-1"},[t("The Completions List "),e("a",{class:"header-anchor",href:"#the-completions-list","aria-label":'Permalink to "The Completions List"'},"​")],-1),w=e("p",null,"To use the completions list:",-1),x=e("em",null,"up",-1),k=e("em",null,"down",-1),T=e("code",null,"auto_complete_commit_on_tab",-1),v=s("",18),C={id:"completed-completions",tabindex:"-1"},P=e("a",{class:"header-anchor",href:"#completed-completions","aria-label":'Permalink to "-Completed Completions"'},"​",-1),S=e("p",null,[t("If you want to be able to tab-complete completions, the setting "),e("code",null,"tab_completion"),t(" must be set to "),e("code",null,"true"),t(" (default). Snippet tab-completion is unaffected by this setting: They will always be completed according to their tab trigger.")],-1),q=e("code",null,"tab_completion",-1),I=e("h4",{id:"inserting-a-literal-tab-character",tabindex:"-1"},[t("Inserting a Literal tab Character "),e("a",{class:"header-anchor",href:"#inserting-a-literal-tab-character","aria-label":'Permalink to "Inserting a Literal tab Character"'},"​")],-1),A=e("code",null,"tab_completion",-1),N=s("",12);function V(W,z,B,D,E,F){const o=n("Key");return l(),r("div",null,[d,m,u,f,g,_,b,e("ul",null,[e("li",null,[t("through the completions list ("),i(o,{k:"ctrl+space"}),t("), or")]),e("li",null,[t("by pressing "),i(o,{k:"tab"}),t(".")])]),y,w,e("ol",null,[e("li",null,[t("Press "),i(o,{k:"ctrl+space"}),t(" or just type something.")]),e("li",null,[t("Optionally, press "),i(o,{k:"ctrl+space"}),t(" again to select the next entry or use "),x,t(" and "),k,t(" arrow keys.")]),e("li",null,[t("Press "),i(o,{k:"enter"}),t(" or "),i(o,{k:"tab"}),t(" to validate selection (depending on the "),T,t(" setting).")]),e("li",null,[t("Optionally, press "),i(o,{k:"tab"}),t(" repeatedly to insert the next available completion.")])]),v,e("h3",C,[i(o,{k:"tab"}),t("-Completed Completions "),P]),S,e("p",null,[t("With "),q,t(" enabled, completion of items is always automatic. This means, unlike the case of the completions list, that Sublime Text will always make the decision for you. The rules for selecting the best completion are the same as described above, but in case of ambiguity, Sublime Text will insert the item it deems most suitable. You can press the "),i(o,{k:"tab"}),t(" key multiple times to walk through other available options.")]),I,e("p",null,[t("When "),A,t(" is enabled, you can press "),i(o,{k:"shift+tab"}),t(" to insert a literal tab character.")]),N])}const L=a(h,[["render",V]]);export{$ as __pageData,L as default};
+import{_ as a,D as n,o as l,c as r,k as e,a as t,I as i,R as s}from"./chunks/framework.e02z-eDF.js";const c="/assets/completions_hint.uAbRxX1X.png",p="/assets/completions_contents.-5Vq944a.gif",$=JSON.parse('{"title":"Completions","description":"","frontmatter":{"title":"Completions"},"headers":[],"relativePath":"guide/extensibility/completions.md","filePath":"guide/extensibility/completions.md","lastUpdated":1703774098000}'),h={name:"guide/extensibility/completions.md"},d=e("h1",{id:"completions",tabindex:"-1"},[t("Completions "),e("a",{class:"header-anchor",href:"#completions","aria-label":'Permalink to "Completions"'},"​")],-1),m=e("p",null,"In the spirit of IDEs, Sublime Text suggests completions that aggregate code or content while writing by catching everything that you have written, like variable names.",-1),u=e("p",null,"There are however several ways to extend the list of completions (for example, depending on the current syntax).",-1),f=e("p",null,"This topic deals with how completions are used and where they come from.",-1),g=e("h2",{id:"how-to-use-completions",tabindex:"-1"},[t("How to Use Completions "),e("a",{class:"header-anchor",href:"#how-to-use-completions","aria-label":'Permalink to "How to Use Completions"'},"​")],-1),_=e("p",null,"There are two methods for using completions. Even though, when screening them, the priority given to completions always stays the same, the two methods produce different results.",-1),b=e("p",null,"Completions can be inserted in two ways:",-1),y=e("h3",{id:"the-completions-list",tabindex:"-1"},[t("The Completions List "),e("a",{class:"header-anchor",href:"#the-completions-list","aria-label":'Permalink to "The Completions List"'},"​")],-1),w=e("p",null,"To use the completions list:",-1),x=e("em",null,"up",-1),k=e("em",null,"down",-1),T=e("code",null,"auto_complete_commit_on_tab",-1),v=s("",18),C={id:"completed-completions",tabindex:"-1"},P=e("a",{class:"header-anchor",href:"#completed-completions","aria-label":'Permalink to "-Completed Completions"'},"​",-1),S=e("p",null,[t("If you want to be able to tab-complete completions, the setting "),e("code",null,"tab_completion"),t(" must be set to "),e("code",null,"true"),t(" (default). Snippet tab-completion is unaffected by this setting: They will always be completed according to their tab trigger.")],-1),q=e("code",null,"tab_completion",-1),I=e("h4",{id:"inserting-a-literal-tab-character",tabindex:"-1"},[t("Inserting a Literal tab Character "),e("a",{class:"header-anchor",href:"#inserting-a-literal-tab-character","aria-label":'Permalink to "Inserting a Literal tab Character"'},"​")],-1),A=e("code",null,"tab_completion",-1),N=s("",12);function V(W,z,B,D,E,F){const o=n("Key");return l(),r("div",null,[d,m,u,f,g,_,b,e("ul",null,[e("li",null,[t("through the completions list ("),i(o,{k:"ctrl+space"}),t("), or")]),e("li",null,[t("by pressing "),i(o,{k:"tab"}),t(".")])]),y,w,e("ol",null,[e("li",null,[t("Press "),i(o,{k:"ctrl+space"}),t(" or just type something.")]),e("li",null,[t("Optionally, press "),i(o,{k:"ctrl+space"}),t(" again to select the next entry or use "),x,t(" and "),k,t(" arrow keys.")]),e("li",null,[t("Press "),i(o,{k:"enter"}),t(" or "),i(o,{k:"tab"}),t(" to validate selection (depending on the "),T,t(" setting).")]),e("li",null,[t("Optionally, press "),i(o,{k:"tab"}),t(" repeatedly to insert the next available completion.")])]),v,e("h3",C,[i(o,{k:"tab"}),t("-Completed Completions "),P]),S,e("p",null,[t("With "),q,t(" enabled, completion of items is always automatic. This means, unlike the case of the completions list, that Sublime Text will always make the decision for you. The rules for selecting the best completion are the same as described above, but in case of ambiguity, Sublime Text will insert the item it deems most suitable. You can press the "),i(o,{k:"tab"}),t(" key multiple times to walk through other available options.")]),I,e("p",null,[t("When "),A,t(" is enabled, you can press "),i(o,{k:"shift+tab"}),t(" to insert a literal tab character.")]),N])}const L=a(h,[["render",V]]);export{$ as __pageData,L as default};
diff --git a/assets/guide_extensibility_macros.md.rjW-s84S.js b/assets/guide_extensibility_macros.md.fwrCmHxA.js
similarity index 99%
rename from assets/guide_extensibility_macros.md.rjW-s84S.js
rename to assets/guide_extensibility_macros.md.fwrCmHxA.js
index a50d13c8..e5b5a377 100644
--- a/assets/guide_extensibility_macros.md.rjW-s84S.js
+++ b/assets/guide_extensibility_macros.md.fwrCmHxA.js
@@ -1,4 +1,4 @@
-import{_ as o,D as n,o as r,c as l,k as e,a as s,I as i,R as t}from"./chunks/framework.e02z-eDF.js";const q=JSON.parse('{"title":"Macros","description":"","frontmatter":{"title":"Macros"},"headers":[],"relativePath":"guide/extensibility/macros.md","filePath":"guide/extensibility/macros.md","lastUpdated":1703773698000}'),h={name:"guide/extensibility/macros.md"},c=t('

Macros

Macros are a basic automation facility comprising sequences of commands. Use them whenever you need to repeat the exact same steps to perform an operation.

Macro files are JSON files with the extension .sublime-macro. Sublime Text ships with a few macros providing core functionality, such as line and word deletion. You can find these under Tools | Macros or in Packages/Default.

How to Record Macros

',4),p=e("strong",null,"Tools | Save macro...",-1),d=t(`

Note that the macro buffer will remember only the latest recorded macro. Also, macros only record commands sent to the buffer: window-level commands, such creating a new file, will be ignored.

How to Edit Macros

As an alternative to recording a macro, you can edit it by hand. Just save a new file with the .sublime-macro extension under Packages/User and add commands to it. Macro files have this format:

json
[
+import{_ as o,D as n,o as r,c as l,k as e,a as s,I as i,R as t}from"./chunks/framework.e02z-eDF.js";const q=JSON.parse('{"title":"Macros","description":"","frontmatter":{"title":"Macros"},"headers":[],"relativePath":"guide/extensibility/macros.md","filePath":"guide/extensibility/macros.md","lastUpdated":1703774098000}'),h={name:"guide/extensibility/macros.md"},c=t('

Macros

Macros are a basic automation facility comprising sequences of commands. Use them whenever you need to repeat the exact same steps to perform an operation.

Macro files are JSON files with the extension .sublime-macro. Sublime Text ships with a few macros providing core functionality, such as line and word deletion. You can find these under Tools | Macros or in Packages/Default.

How to Record Macros

',4),p=e("strong",null,"Tools | Save macro...",-1),d=t(`

Note that the macro buffer will remember only the latest recorded macro. Also, macros only record commands sent to the buffer: window-level commands, such creating a new file, will be ignored.

How to Edit Macros

As an alternative to recording a macro, you can edit it by hand. Just save a new file with the .sublime-macro extension under Packages/User and add commands to it. Macro files have this format:

json
[
    { "command": "move_to", "args": {"to": "hardeol"} },
    { "command": "insert", "args": {"characters": "\\n"} },
 ]

See the Commands section for more information on commands.

If you're editing a macro by hand, you need to escape quotation marks, blank spaces and backslashes by preceding them with \\.

Where to Store Macros

Macro files can be stored in any package folder, and then will show up under Tools | Macros | <PackageName>.

Key Binding for Macros

Macro files can be bound to key combinations by passing the macro file path to the run_macro_file command like so:

json
{
diff --git a/assets/guide_extensibility_macros.md.rjW-s84S.lean.js b/assets/guide_extensibility_macros.md.fwrCmHxA.lean.js
similarity index 93%
rename from assets/guide_extensibility_macros.md.rjW-s84S.lean.js
rename to assets/guide_extensibility_macros.md.fwrCmHxA.lean.js
index 2098c0cd..1a556db9 100644
--- a/assets/guide_extensibility_macros.md.rjW-s84S.lean.js
+++ b/assets/guide_extensibility_macros.md.fwrCmHxA.lean.js
@@ -1 +1 @@
-import{_ as o,D as n,o as r,c as l,k as e,a as s,I as i,R as t}from"./chunks/framework.e02z-eDF.js";const q=JSON.parse('{"title":"Macros","description":"","frontmatter":{"title":"Macros"},"headers":[],"relativePath":"guide/extensibility/macros.md","filePath":"guide/extensibility/macros.md","lastUpdated":1703773698000}'),h={name:"guide/extensibility/macros.md"},c=t("",4),p=e("strong",null,"Tools | Save macro...",-1),d=t("",11);function k(E,u,m,g,y,b){const a=n("Key");return r(),l("div",null,[c,e("p",null,[s("To start recording a macro, press "),i(a,{k:"ctrl+alt+q"}),s(" and subsequently execute the desired steps one by one. When you're done, press "),i(a,{k:"ctrl+alt+q"}),s(" again to stop the macro recorder. Your new macro won't be saved to a file, but kept in the macro buffer instead. Now you will be able to run the recorded macro by pressing "),i(a,{k:"ctrl+shift+alt+q"}),s(", or save it to a file by selecting "),p]),d])}const _=o(h,[["render",k]]);export{q as __pageData,_ as default};
+import{_ as o,D as n,o as r,c as l,k as e,a as s,I as i,R as t}from"./chunks/framework.e02z-eDF.js";const q=JSON.parse('{"title":"Macros","description":"","frontmatter":{"title":"Macros"},"headers":[],"relativePath":"guide/extensibility/macros.md","filePath":"guide/extensibility/macros.md","lastUpdated":1703774098000}'),h={name:"guide/extensibility/macros.md"},c=t("",4),p=e("strong",null,"Tools | Save macro...",-1),d=t("",11);function k(E,u,m,g,y,b){const a=n("Key");return r(),l("div",null,[c,e("p",null,[s("To start recording a macro, press "),i(a,{k:"ctrl+alt+q"}),s(" and subsequently execute the desired steps one by one. When you're done, press "),i(a,{k:"ctrl+alt+q"}),s(" again to stop the macro recorder. Your new macro won't be saved to a file, but kept in the macro buffer instead. Now you will be able to run the recorded macro by pressing "),i(a,{k:"ctrl+shift+alt+q"}),s(", or save it to a file by selecting "),p]),d])}const _=o(h,[["render",k]]);export{q as __pageData,_ as default};
diff --git a/assets/guide_extensibility_packages.md.jI282U2z.js b/assets/guide_extensibility_packages.md.ch6hFOX-.js
similarity index 99%
rename from assets/guide_extensibility_packages.md.jI282U2z.js
rename to assets/guide_extensibility_packages.md.ch6hFOX-.js
index b8ec1b6d..9b33fe81 100644
--- a/assets/guide_extensibility_packages.md.jI282U2z.js
+++ b/assets/guide_extensibility_packages.md.ch6hFOX-.js
@@ -1 +1 @@
-import{_ as e,o as a,c as i,R as o}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"Packages","description":"","frontmatter":{"title":"Packages"},"headers":[],"relativePath":"guide/extensibility/packages.md","filePath":"guide/extensibility/packages.md","lastUpdated":1703773698000}'),t={name:"guide/extensibility/packages.md"},s=o('

Packages

A package is a container for resources.

Package Locations (and Abbreviations)

There are three locations for storing packages for different purposes.

  • Packages can be folders under Data/Packages (short: Packages)

  • or zip archives with the .sublime-package extension located under Data/Installed Packages (short: Installed Packages) or any of its subdirectories.

  • Additionally, Sublime Text provides a set of default packages as zip archives in Application/Packages (short: Shipped Packages), where Application refers to the folder where the Sublime Text executable resides.

    This folder is not intended to be modified by the user.

Note

For simplicity, we will occasionally refer to all these directories simply as Packages, and to a package in any folder (.sublime-package or not) as Packages/PackageName. Consequently, a file inside a package may also be referred to as PackageName/a_file.extension.

.sublime-package Packages

Packages distributed as .sublime-package zip archives should be considered read-only containers of resources and never be modified manually. Since they are usually updated as a whole, any manual changes made to them will be lost in the process.

If you do want to modify files in these archives, see overriding-packages.

Interactions Between Packages with the Same Name

If two packages with the same name exist in both Installed Packages and Shipped Packages, the one in Installed Packages will be used and the one in Shipped Packages will be ignored.

Any file in Packages/PackageName takes precedence over an identically named file in Installed Packages/PackageName.sublime-package or Shipped Packages/PackageName.sublime-package.

See also overriding-packages.

Package Contents

Typical resources found in packages include:

  • build systems (.sublime-build)
  • color schemes (.sublime-color-scheme, .tmTheme)
  • key maps (.sublime-keymap)
  • macros (.sublime-macro)
  • menus (.sublime-menu)
  • metadata (.tmPreferences)
  • mouse maps (.sublime-mousemap)
  • plugins (.py)
  • settings (.sublime-settings)
  • snippets (.sublime-snippet)
  • syntax definitions (.sublime-syntax, .tmLanguage)
  • themes (.sublime-theme)

Some packages may hold support files for other packages or for core features. For example, the spell checker uses Installed Packages/Language - English.sublime-package as a data store for English dictionaries.

Package Types

In this guide, we categorize packages for clarity when discussing this topic, but Sublime Text doesn't use this terminology and you don't need to learn it.

shipped packages or default packages : A set of packages that Sublime Text ships with. Some of these packages are core packages, while others enhance Sublime Text to support common programming languages out of the box.

Examples: Default, Python, Java, C++, Markdown.

Located in Shipped Packages.

core packages : Sublime Text requires these packages in order to function properly.

Complete list: Default, Theme - Default, Color Scheme - Default, Text, Language - English.

They are part of the shipped packages and located in Shipped Packages.

user packages : Installed or created by the user to extend Sublime Text's functionality. They are not part of Sublime Text, and are always contributed by users or third parties.

Example: User.

Located in Packages and Installed Packages.

installed packages : A subtype of user packages.

Installed packages are .sublime-package archives and usually maintained by a package manager.

Located in Installed Packages.

Note

Due to the unfortunate name of this folder, talking about installing packages in Sublime Text is confusing.

Sometimes, in this guide, by installing we mean "adding a user/third party package to Sublime Text" (in any form), and sometimes we use the term in its stricter sense of "copying a .sublime-package archive to Installed Packages".

override packages : A special type of user packages.

Override packages serve the purpose of customizing packages that are distributed as .sublime-package files. They are effectively injected into the original package and do not stand-alone.

See Customizing or Overriding Packages for details.

Located in Packages.

Note that by third party we also refer to users of other editors, notably Textmate, as Sublime Text and Textmate share some types of resource files that can be reused without modification.

Managing Packages

Installing Packages

Note

Regular users rarely need to know how to install packages by hand, as automatic package managers are available.

The de facto package manager for Sublime Text is Package Control.

Packages can be installed in two main ways:

  • by copying Sublime Text resources to a folder under Packages, or
  • by copying a .sublime-package file to Installed Packages.

Disabling Packages

To temporarily disable packages, you can add them to the ignored_packages list in your Packages/User/Preferences.sublime-settings file. Packages will be loaded or unloaded as needed when the settings file is saved.

Enabling Packages

To re-enable a package, remove the package's name from the ignored_packages list in your Packages/User/Preferences.sublime-settings file.

Removing Packages

If you installed a package with a package manager, remove it using the method provided by the package manager.

If you installed a package manually, follow this procedure to safely remove a package:

  1. Disable the package while Sublime Text is running.
  2. Close Sublime Text.
  3. Remove the package's resources from the disk.
  4. Remove the package's name from the ignored_packages list.

In addition to the resources you have placed initially in a Packages folder or in Installed Packages, plugins may create configuration files (such as .sublime-settings files) or other files to store package-related data. Frequently, you will find them in the User package. Therefore, if you want to remove all traces of a package, you will need to find and remove all the additional files that it may have installed.

WARNING

Shipped packages are reinstated during every Sublime Text update, so you can't delete them forever. If you want to stop using a shipped package, disable it.

Customizing or Overriding Packages

Since packages in .sublime-package zip archives are read-only, you cannot modify them directly. However, Sublime Text allows you to create an :override_package: that will effectively inject files into the original archive without modifying the archive itself.

To create an override package, create a new folder under Packages and name it after the .sublime-package file you want to override, excluding the extension. Any file you create in this package will take precedence over any identically named file in the original package.

Python plugins in override packages are able to use relative imports for accessing other modules in the corresponding .sublime-package file as if they were part of it.

WARNING

Files in override packages override entire files. If the overridden file in the corresponding .sublime-package is updated, you will not be notified.

The OverrideAudit package provides monitoring of override files and will notify you when the file it overrides has been updated.

Merging and Order of Precedence

Package precedence is important for merging certain resources, for example, .sublime-keymap and .sublime-settings files, and for loading plugins (.py files).

If an :override_package: exists for a .sublime-package package, it will be loaded at the same time as the .sublime-package archive.

Sublime Text loads packages in this order:

  1. Packages/Default;
  2. :shipped_package:shipped_packages: in lexicographical order;
  3. :installed_package:installed_packages: in lexicographical order;
  4. all remaining :user_package:user_packages:, except for Packages/User, that did not override anything, in lexicographical order;
  5. Packages/User

Reverting Sublime Text to Its Default Configuration

Reverting Sublime Text to a fresh state solves many problems that appear to be bugs in Sublime Text but are in fact caused by misbehaving packages and plugins.

To revert Sublime Text to its default configuration and remove all your settings and configurations, delete the Data directory and restart the editor. Keep in mind that the Installed Packages folder will be deleted too, so you'll lose all your installed packages.

Always make sure to back up your data before taking an extreme measure like this one!

',66),c=[s];function r(n,l,d,p,g,u){return a(),i("div",null,c)}const k=e(t,[["render",r]]);export{m as __pageData,k as default}; +import{_ as e,o as a,c as i,R as o}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"Packages","description":"","frontmatter":{"title":"Packages"},"headers":[],"relativePath":"guide/extensibility/packages.md","filePath":"guide/extensibility/packages.md","lastUpdated":1703774098000}'),t={name:"guide/extensibility/packages.md"},s=o('

Packages

A package is a container for resources.

Package Locations (and Abbreviations)

There are three locations for storing packages for different purposes.

  • Packages can be folders under Data/Packages (short: Packages)

  • or zip archives with the .sublime-package extension located under Data/Installed Packages (short: Installed Packages) or any of its subdirectories.

  • Additionally, Sublime Text provides a set of default packages as zip archives in Application/Packages (short: Shipped Packages), where Application refers to the folder where the Sublime Text executable resides.

    This folder is not intended to be modified by the user.

Note

For simplicity, we will occasionally refer to all these directories simply as Packages, and to a package in any folder (.sublime-package or not) as Packages/PackageName. Consequently, a file inside a package may also be referred to as PackageName/a_file.extension.

.sublime-package Packages

Packages distributed as .sublime-package zip archives should be considered read-only containers of resources and never be modified manually. Since they are usually updated as a whole, any manual changes made to them will be lost in the process.

If you do want to modify files in these archives, see overriding-packages.

Interactions Between Packages with the Same Name

If two packages with the same name exist in both Installed Packages and Shipped Packages, the one in Installed Packages will be used and the one in Shipped Packages will be ignored.

Any file in Packages/PackageName takes precedence over an identically named file in Installed Packages/PackageName.sublime-package or Shipped Packages/PackageName.sublime-package.

See also overriding-packages.

Package Contents

Typical resources found in packages include:

  • build systems (.sublime-build)
  • color schemes (.sublime-color-scheme, .tmTheme)
  • key maps (.sublime-keymap)
  • macros (.sublime-macro)
  • menus (.sublime-menu)
  • metadata (.tmPreferences)
  • mouse maps (.sublime-mousemap)
  • plugins (.py)
  • settings (.sublime-settings)
  • snippets (.sublime-snippet)
  • syntax definitions (.sublime-syntax, .tmLanguage)
  • themes (.sublime-theme)

Some packages may hold support files for other packages or for core features. For example, the spell checker uses Installed Packages/Language - English.sublime-package as a data store for English dictionaries.

Package Types

In this guide, we categorize packages for clarity when discussing this topic, but Sublime Text doesn't use this terminology and you don't need to learn it.

shipped packages or default packages : A set of packages that Sublime Text ships with. Some of these packages are core packages, while others enhance Sublime Text to support common programming languages out of the box.

Examples: Default, Python, Java, C++, Markdown.

Located in Shipped Packages.

core packages : Sublime Text requires these packages in order to function properly.

Complete list: Default, Theme - Default, Color Scheme - Default, Text, Language - English.

They are part of the shipped packages and located in Shipped Packages.

user packages : Installed or created by the user to extend Sublime Text's functionality. They are not part of Sublime Text, and are always contributed by users or third parties.

Example: User.

Located in Packages and Installed Packages.

installed packages : A subtype of user packages.

Installed packages are .sublime-package archives and usually maintained by a package manager.

Located in Installed Packages.

Note

Due to the unfortunate name of this folder, talking about installing packages in Sublime Text is confusing.

Sometimes, in this guide, by installing we mean "adding a user/third party package to Sublime Text" (in any form), and sometimes we use the term in its stricter sense of "copying a .sublime-package archive to Installed Packages".

override packages : A special type of user packages.

Override packages serve the purpose of customizing packages that are distributed as .sublime-package files. They are effectively injected into the original package and do not stand-alone.

See Customizing or Overriding Packages for details.

Located in Packages.

Note that by third party we also refer to users of other editors, notably Textmate, as Sublime Text and Textmate share some types of resource files that can be reused without modification.

Managing Packages

Installing Packages

Note

Regular users rarely need to know how to install packages by hand, as automatic package managers are available.

The de facto package manager for Sublime Text is Package Control.

Packages can be installed in two main ways:

  • by copying Sublime Text resources to a folder under Packages, or
  • by copying a .sublime-package file to Installed Packages.

Disabling Packages

To temporarily disable packages, you can add them to the ignored_packages list in your Packages/User/Preferences.sublime-settings file. Packages will be loaded or unloaded as needed when the settings file is saved.

Enabling Packages

To re-enable a package, remove the package's name from the ignored_packages list in your Packages/User/Preferences.sublime-settings file.

Removing Packages

If you installed a package with a package manager, remove it using the method provided by the package manager.

If you installed a package manually, follow this procedure to safely remove a package:

  1. Disable the package while Sublime Text is running.
  2. Close Sublime Text.
  3. Remove the package's resources from the disk.
  4. Remove the package's name from the ignored_packages list.

In addition to the resources you have placed initially in a Packages folder or in Installed Packages, plugins may create configuration files (such as .sublime-settings files) or other files to store package-related data. Frequently, you will find them in the User package. Therefore, if you want to remove all traces of a package, you will need to find and remove all the additional files that it may have installed.

WARNING

Shipped packages are reinstated during every Sublime Text update, so you can't delete them forever. If you want to stop using a shipped package, disable it.

Customizing or Overriding Packages

Since packages in .sublime-package zip archives are read-only, you cannot modify them directly. However, Sublime Text allows you to create an :override_package: that will effectively inject files into the original archive without modifying the archive itself.

To create an override package, create a new folder under Packages and name it after the .sublime-package file you want to override, excluding the extension. Any file you create in this package will take precedence over any identically named file in the original package.

Python plugins in override packages are able to use relative imports for accessing other modules in the corresponding .sublime-package file as if they were part of it.

WARNING

Files in override packages override entire files. If the overridden file in the corresponding .sublime-package is updated, you will not be notified.

The OverrideAudit package provides monitoring of override files and will notify you when the file it overrides has been updated.

Merging and Order of Precedence

Package precedence is important for merging certain resources, for example, .sublime-keymap and .sublime-settings files, and for loading plugins (.py files).

If an :override_package: exists for a .sublime-package package, it will be loaded at the same time as the .sublime-package archive.

Sublime Text loads packages in this order:

  1. Packages/Default;
  2. :shipped_package:shipped_packages: in lexicographical order;
  3. :installed_package:installed_packages: in lexicographical order;
  4. all remaining :user_package:user_packages:, except for Packages/User, that did not override anything, in lexicographical order;
  5. Packages/User

Reverting Sublime Text to Its Default Configuration

Reverting Sublime Text to a fresh state solves many problems that appear to be bugs in Sublime Text but are in fact caused by misbehaving packages and plugins.

To revert Sublime Text to its default configuration and remove all your settings and configurations, delete the Data directory and restart the editor. Keep in mind that the Installed Packages folder will be deleted too, so you'll lose all your installed packages.

Always make sure to back up your data before taking an extreme measure like this one!

',66),c=[s];function r(n,l,d,p,g,u){return a(),i("div",null,c)}const k=e(t,[["render",r]]);export{m as __pageData,k as default}; diff --git a/assets/guide_extensibility_packages.md.jI282U2z.lean.js b/assets/guide_extensibility_packages.md.ch6hFOX-.lean.js similarity index 86% rename from assets/guide_extensibility_packages.md.jI282U2z.lean.js rename to assets/guide_extensibility_packages.md.ch6hFOX-.lean.js index b264dad3..bfac8bda 100644 --- a/assets/guide_extensibility_packages.md.jI282U2z.lean.js +++ b/assets/guide_extensibility_packages.md.ch6hFOX-.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as i,R as o}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"Packages","description":"","frontmatter":{"title":"Packages"},"headers":[],"relativePath":"guide/extensibility/packages.md","filePath":"guide/extensibility/packages.md","lastUpdated":1703773698000}'),t={name:"guide/extensibility/packages.md"},s=o("",66),c=[s];function r(n,l,d,p,g,u){return a(),i("div",null,c)}const k=e(t,[["render",r]]);export{m as __pageData,k as default}; +import{_ as e,o as a,c as i,R as o}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"Packages","description":"","frontmatter":{"title":"Packages"},"headers":[],"relativePath":"guide/extensibility/packages.md","filePath":"guide/extensibility/packages.md","lastUpdated":1703774098000}'),t={name:"guide/extensibility/packages.md"},s=o("",66),c=[s];function r(n,l,d,p,g,u){return a(),i("div",null,c)}const k=e(t,[["render",r]]);export{m as __pageData,k as default}; diff --git a/assets/guide_extensibility_plugins_index.md.qAJg8hrm.js b/assets/guide_extensibility_plugins_index.md.A-pg61q2.js similarity index 99% rename from assets/guide_extensibility_plugins_index.md.qAJg8hrm.js rename to assets/guide_extensibility_plugins_index.md.A-pg61q2.js index cdd043d8..f0e2f4aa 100644 --- a/assets/guide_extensibility_plugins_index.md.qAJg8hrm.js +++ b/assets/guide_extensibility_plugins_index.md.A-pg61q2.js @@ -1,4 +1,4 @@ -import{_ as t,D as o,o as l,c as r,k as s,a as e,I as a,R as n}from"./chunks/framework.e02z-eDF.js";const w=JSON.parse('{"title":"Plugins","description":"","frontmatter":{"title":"Plugins"},"headers":[],"relativePath":"guide/extensibility/plugins/index.md","filePath":"guide/extensibility/plugins/index.md","lastUpdated":1703773698000}'),h={name:"guide/extensibility/plugins/index.md"},p=n('

Plugins

INFO

API Reference : More information on the Python API.

Plugins Reference : More information about plugins.

This section is intended for users with programming skills.

Sublime Text can be extended through Python plugins. Plugins build features by reusing existing commands or creating new ones. Plugins are a logical entity, rather than a physical one.

Prerequisites

In order to write plugins, you must be able to program in Python. At the time of this writing, Sublime Text uses Python 3.3.

Where to Store Plugins

Sublime Text will look for plugins only in these places:

  • Installed Packages (only .sublime-package files)
  • Packages
  • Packages/<pkg_name>/

As a consequence, any plugin nested deeper in Packages won't be loaded.

Keeping plugins directly under Packages is discouraged. Sublime Text sorts packages in a predefined way before loading them, so if you save plugin files directly under Packages you might get confusing results.

Your First Plugin

Let's write a "Hello, World!" plugin for Sublime Text:

  1. Select Tools | Developer | New Plugin... in the menu.
  2. Save to Packages/User/hello_world.py.

You've just written your first plugin! Let's put it to use:

',15),d=s("li",null,[e("Type: "),s("code",null,'view.run_command("example")'),e(" and press enter.")],-1),c=n(`

You should see the text "Hello, World!" in the newly created buffer.

Analyzing Your First Plugin

The plugin created in the previous section should look roughly like this:

py
import sublime
+import{_ as t,D as o,o as l,c as r,k as s,a as e,I as a,R as n}from"./chunks/framework.e02z-eDF.js";const w=JSON.parse('{"title":"Plugins","description":"","frontmatter":{"title":"Plugins"},"headers":[],"relativePath":"guide/extensibility/plugins/index.md","filePath":"guide/extensibility/plugins/index.md","lastUpdated":1703774098000}'),h={name:"guide/extensibility/plugins/index.md"},p=n('

Plugins

INFO

API Reference : More information on the Python API.

Plugins Reference : More information about plugins.

This section is intended for users with programming skills.

Sublime Text can be extended through Python plugins. Plugins build features by reusing existing commands or creating new ones. Plugins are a logical entity, rather than a physical one.

Prerequisites

In order to write plugins, you must be able to program in Python. At the time of this writing, Sublime Text uses Python 3.3.

Where to Store Plugins

Sublime Text will look for plugins only in these places:

  • Installed Packages (only .sublime-package files)
  • Packages
  • Packages/<pkg_name>/

As a consequence, any plugin nested deeper in Packages won't be loaded.

Keeping plugins directly under Packages is discouraged. Sublime Text sorts packages in a predefined way before loading them, so if you save plugin files directly under Packages you might get confusing results.

Your First Plugin

Let's write a "Hello, World!" plugin for Sublime Text:

  1. Select Tools | Developer | New Plugin... in the menu.
  2. Save to Packages/User/hello_world.py.

You've just written your first plugin! Let's put it to use:

',15),d=s("li",null,[e("Type: "),s("code",null,'view.run_command("example")'),e(" and press enter.")],-1),c=n(`

You should see the text "Hello, World!" in the newly created buffer.

Analyzing Your First Plugin

The plugin created in the previous section should look roughly like this:

py
import sublime
 import sublime_plugin
 
 
diff --git a/assets/guide_extensibility_plugins_index.md.qAJg8hrm.lean.js b/assets/guide_extensibility_plugins_index.md.A-pg61q2.lean.js
similarity index 92%
rename from assets/guide_extensibility_plugins_index.md.qAJg8hrm.lean.js
rename to assets/guide_extensibility_plugins_index.md.A-pg61q2.lean.js
index 9ed6ecf6..52834631 100644
--- a/assets/guide_extensibility_plugins_index.md.qAJg8hrm.lean.js
+++ b/assets/guide_extensibility_plugins_index.md.A-pg61q2.lean.js
@@ -1 +1 @@
-import{_ as t,D as o,o as l,c as r,k as s,a as e,I as a,R as n}from"./chunks/framework.e02z-eDF.js";const w=JSON.parse('{"title":"Plugins","description":"","frontmatter":{"title":"Plugins"},"headers":[],"relativePath":"guide/extensibility/plugins/index.md","filePath":"guide/extensibility/plugins/index.md","lastUpdated":1703773698000}'),h={name:"guide/extensibility/plugins/index.md"},p=n("",15),d=s("li",null,[e("Type: "),s("code",null,'view.run_command("example")'),e(" and press enter.")],-1),c=n("",41);function m(k,u,g,y,E,f){const i=o("Key");return l(),r("div",null,[p,s("ol",null,[s("li",null,[e("Create a new buffer ("),a(i,{k:"ctrl+n"}),e(").")]),s("li",null,[e("Open the Python console ("),a(i,{k:"ctrl+`"}),e(").")]),d]),c])}const F=t(h,[["render",m]]);export{w as __pageData,F as default};
+import{_ as t,D as o,o as l,c as r,k as s,a as e,I as a,R as n}from"./chunks/framework.e02z-eDF.js";const w=JSON.parse('{"title":"Plugins","description":"","frontmatter":{"title":"Plugins"},"headers":[],"relativePath":"guide/extensibility/plugins/index.md","filePath":"guide/extensibility/plugins/index.md","lastUpdated":1703774098000}'),h={name:"guide/extensibility/plugins/index.md"},p=n("",15),d=s("li",null,[e("Type: "),s("code",null,'view.run_command("example")'),e(" and press enter.")],-1),c=n("",41);function m(k,u,g,y,E,f){const i=o("Key");return l(),r("div",null,[p,s("ol",null,[s("li",null,[e("Create a new buffer ("),a(i,{k:"ctrl+n"}),e(").")]),s("li",null,[e("Open the Python console ("),a(i,{k:"ctrl+`"}),e(").")]),d]),c])}const F=t(h,[["render",m]]);export{w as __pageData,F as default};
diff --git a/assets/guide_extensibility_plugins_input_handlers.md.temQxa84.js b/assets/guide_extensibility_plugins_input_handlers.md.uGNjntNQ.js
similarity index 99%
rename from assets/guide_extensibility_plugins_input_handlers.md.temQxa84.js
rename to assets/guide_extensibility_plugins_input_handlers.md.uGNjntNQ.js
index 272c5eff..ebb687e7 100644
--- a/assets/guide_extensibility_plugins_input_handlers.md.temQxa84.js
+++ b/assets/guide_extensibility_plugins_input_handlers.md.uGNjntNQ.js
@@ -1,4 +1,4 @@
-import{_ as e,D as t,o as l,c as h,k as s,a as i,I as p,R as a}from"./chunks/framework.e02z-eDF.js";const k="/assets/arithmetic.7s0twvAj.png",r="/assets/simple_input_handler.FErrbtR2.mp4",d="/assets/simple_input_handler_preview.sza6An3g.mp4",o="/assets/list_input_handler.CFwY5sl1.mp4",E="/assets/multiply_input.ThO1aGRS.mp4",c="/assets/multiply_next_input.ctKm5F7_.mp4",T=JSON.parse('{"title":"Input Handlers","description":"","frontmatter":{"title":"Input Handlers"},"headers":[],"relativePath":"guide/extensibility/plugins/input_handlers.md","filePath":"guide/extensibility/plugins/input_handlers.md","lastUpdated":1703773698000}'),g={name:"guide/extensibility/plugins/input_handlers.md"},u=a('

Input Handlers

Arithmetic command using an input handler

Input handlers are a mechanism to query a user for one or multiple input parameters via the Command Palette. They replace the older method of input and quick panels (Window.show_input_panel and Window.show_quick_panel) for a unified user experience in a single component.

Input Handlers have been added in build 3154 and were first available on the stable channel in version 3.1.

Examples

The following commands provided by Sublime Text's Default package use input handlers (command names are for the Command Palette):

Command nameFileDescription
ArithmeticDefault/arithmetic.pyEvaluates a given Python expression (usually numeric).
View Package FileDefault/ui.pyProvides a list of all resource files inside the Packages folder to open.
Rename FileDefault/rename.pyQueries the user for a new file name for the active view.

You can use the above View Package File command to view the source code of these files.

Input Handler Kinds

There are currently two types of input handlers:

  1. text input handlers accepting arbitrary text input,
  2. list input handlers providing a list of options for the user to choose from.

Text input handlers always forward the entered text to the command, while list input handlers can handle any JSON-serializable value, accompanied by a caption for their respective list entry.

Implementing an Input Handler

Because input handlers are using a rather generic interface, adding one to your command may require careful thinking and may not be the most intuitive process.

We will implement an example input handler and explain more gears you can tweak for advanced configuration.

Important

To use an input handler for a command, the command must have an entry in the Command Palette. This is easy to forget, so make sure to remember!

Let's start with a very simple command that inserts the given text into the view. The following two files can be placed in any package folder, including "User".

simple_plugin.py:

py
import sublime_plugin
+import{_ as e,D as t,o as l,c as h,k as s,a as i,I as p,R as a}from"./chunks/framework.e02z-eDF.js";const k="/assets/arithmetic.7s0twvAj.png",r="/assets/simple_input_handler.FErrbtR2.mp4",d="/assets/simple_input_handler_preview.sza6An3g.mp4",o="/assets/list_input_handler.CFwY5sl1.mp4",E="/assets/multiply_input.ThO1aGRS.mp4",c="/assets/multiply_next_input.ctKm5F7_.mp4",T=JSON.parse('{"title":"Input Handlers","description":"","frontmatter":{"title":"Input Handlers"},"headers":[],"relativePath":"guide/extensibility/plugins/input_handlers.md","filePath":"guide/extensibility/plugins/input_handlers.md","lastUpdated":1703774098000}'),g={name:"guide/extensibility/plugins/input_handlers.md"},u=a('

Input Handlers

Arithmetic command using an input handler

Input handlers are a mechanism to query a user for one or multiple input parameters via the Command Palette. They replace the older method of input and quick panels (Window.show_input_panel and Window.show_quick_panel) for a unified user experience in a single component.

Input Handlers have been added in build 3154 and were first available on the stable channel in version 3.1.

Examples

The following commands provided by Sublime Text's Default package use input handlers (command names are for the Command Palette):

Command nameFileDescription
ArithmeticDefault/arithmetic.pyEvaluates a given Python expression (usually numeric).
View Package FileDefault/ui.pyProvides a list of all resource files inside the Packages folder to open.
Rename FileDefault/rename.pyQueries the user for a new file name for the active view.

You can use the above View Package File command to view the source code of these files.

Input Handler Kinds

There are currently two types of input handlers:

  1. text input handlers accepting arbitrary text input,
  2. list input handlers providing a list of options for the user to choose from.

Text input handlers always forward the entered text to the command, while list input handlers can handle any JSON-serializable value, accompanied by a caption for their respective list entry.

Implementing an Input Handler

Because input handlers are using a rather generic interface, adding one to your command may require careful thinking and may not be the most intuitive process.

We will implement an example input handler and explain more gears you can tweak for advanced configuration.

Important

To use an input handler for a command, the command must have an entry in the Command Palette. This is easy to forget, so make sure to remember!

Let's start with a very simple command that inserts the given text into the view. The following two files can be placed in any package folder, including "User".

simple_plugin.py:

py
import sublime_plugin
 
 
 class SimpleCommand(sublime_plugin.TextCommand):
diff --git a/assets/guide_extensibility_plugins_input_handlers.md.temQxa84.lean.js b/assets/guide_extensibility_plugins_input_handlers.md.uGNjntNQ.lean.js
similarity index 95%
rename from assets/guide_extensibility_plugins_input_handlers.md.temQxa84.lean.js
rename to assets/guide_extensibility_plugins_input_handlers.md.uGNjntNQ.lean.js
index 1a9d5d04..b60fe976 100644
--- a/assets/guide_extensibility_plugins_input_handlers.md.temQxa84.lean.js
+++ b/assets/guide_extensibility_plugins_input_handlers.md.uGNjntNQ.lean.js
@@ -1 +1 @@
-import{_ as e,D as t,o as l,c as h,k as s,a as i,I as p,R as a}from"./chunks/framework.e02z-eDF.js";const k="/assets/arithmetic.7s0twvAj.png",r="/assets/simple_input_handler.FErrbtR2.mp4",d="/assets/simple_input_handler_preview.sza6An3g.mp4",o="/assets/list_input_handler.CFwY5sl1.mp4",E="/assets/multiply_input.ThO1aGRS.mp4",c="/assets/multiply_next_input.ctKm5F7_.mp4",T=JSON.parse('{"title":"Input Handlers","description":"","frontmatter":{"title":"Input Handlers"},"headers":[],"relativePath":"guide/extensibility/plugins/input_handlers.md","filePath":"guide/extensibility/plugins/input_handlers.md","lastUpdated":1703773698000}'),g={name:"guide/extensibility/plugins/input_handlers.md"},u=a("",67),y={class:"tip custom-block"},m=s("p",{class:"custom-block-title"},"TIP",-1),F=s("code",null,"NumberInputHandler",-1),f=s("code",null,"MultiNumberInputHandler",-1),C=s("code",null,"validate",-1),b=a("",9);function v(B,_,w,x,A,D){const n=t("Key");return l(),h("div",null,[u,s("div",y,[m,s("p",null,[i("Both "),F,i(" and "),f,i(" implement a "),C,i(" method that returns a boolean if the passed text can be parsed into a floating point number. The effect is that for non-numeric text the input is rejected and nothing happens when pressing "),p(n,{k:"enter"}),i(". Try for yourself!")])]),b])}const I=e(g,[["render",v]]);export{T as __pageData,I as default};
+import{_ as e,D as t,o as l,c as h,k as s,a as i,I as p,R as a}from"./chunks/framework.e02z-eDF.js";const k="/assets/arithmetic.7s0twvAj.png",r="/assets/simple_input_handler.FErrbtR2.mp4",d="/assets/simple_input_handler_preview.sza6An3g.mp4",o="/assets/list_input_handler.CFwY5sl1.mp4",E="/assets/multiply_input.ThO1aGRS.mp4",c="/assets/multiply_next_input.ctKm5F7_.mp4",T=JSON.parse('{"title":"Input Handlers","description":"","frontmatter":{"title":"Input Handlers"},"headers":[],"relativePath":"guide/extensibility/plugins/input_handlers.md","filePath":"guide/extensibility/plugins/input_handlers.md","lastUpdated":1703774098000}'),g={name:"guide/extensibility/plugins/input_handlers.md"},u=a("",67),y={class:"tip custom-block"},m=s("p",{class:"custom-block-title"},"TIP",-1),F=s("code",null,"NumberInputHandler",-1),f=s("code",null,"MultiNumberInputHandler",-1),C=s("code",null,"validate",-1),b=a("",9);function v(B,_,w,x,A,D){const n=t("Key");return l(),h("div",null,[u,s("div",y,[m,s("p",null,[i("Both "),F,i(" and "),f,i(" implement a "),C,i(" method that returns a boolean if the passed text can be parsed into a floating point number. The effect is that for non-numeric text the input is rejected and nothing happens when pressing "),p(n,{k:"enter"}),i(". Try for yourself!")])]),b])}const I=e(g,[["render",v]]);export{T as __pageData,I as default};
diff --git a/assets/guide_extensibility_snippets.md.vLzwQQiE.js b/assets/guide_extensibility_snippets.md.C5KSEI6v.js
similarity index 99%
rename from assets/guide_extensibility_snippets.md.vLzwQQiE.js
rename to assets/guide_extensibility_snippets.md.C5KSEI6v.js
index 3c7598c6..c014dad1 100644
--- a/assets/guide_extensibility_snippets.md.vLzwQQiE.js
+++ b/assets/guide_extensibility_snippets.md.C5KSEI6v.js
@@ -1,4 +1,4 @@
-import{_ as n,D as l,o as p,c as o,k as s,a as e,I as i,R as a}from"./chunks/framework.e02z-eDF.js";const S=JSON.parse('{"title":"Snippets","description":"","frontmatter":{"title":"Snippets"},"headers":[],"relativePath":"guide/extensibility/snippets.md","filePath":"guide/extensibility/snippets.md","lastUpdated":1703773698000}'),r={name:"guide/extensibility/snippets.md"},h=a(`

Snippets

Whether you are coding or writing the next vampire best-seller, you're likely to need certain short fragments of text again and again. Use snippets to save yourself tedious typing. Snippets are smart templates that will insert text for you and adapt it to their context.

To create a new snippet, select Tools | Developer | New Snippet... Sublime Text will present you with a skeleton for it.

Snippets can be stored under any package's folder, but to keep it simple while you're learning, you can save them to your Packages/User folder.

Snippets File Format

Snippets typically live in a Sublime Text package. They are simplified XML files with the extension .sublime-snippet. For instance, you could have a greeting.sublime-snippet inside an Email package.

The structure of a typical snippet is as follows (including the default hints Sublime Text inserts for your convenience):

xml
<snippet>
+import{_ as n,D as l,o as p,c as o,k as s,a as e,I as i,R as a}from"./chunks/framework.e02z-eDF.js";const S=JSON.parse('{"title":"Snippets","description":"","frontmatter":{"title":"Snippets"},"headers":[],"relativePath":"guide/extensibility/snippets.md","filePath":"guide/extensibility/snippets.md","lastUpdated":1703774098000}'),r={name:"guide/extensibility/snippets.md"},h=a(`

Snippets

Whether you are coding or writing the next vampire best-seller, you're likely to need certain short fragments of text again and again. Use snippets to save yourself tedious typing. Snippets are smart templates that will insert text for you and adapt it to their context.

To create a new snippet, select Tools | Developer | New Snippet... Sublime Text will present you with a skeleton for it.

Snippets can be stored under any package's folder, but to keep it simple while you're learning, you can save them to your Packages/User folder.

Snippets File Format

Snippets typically live in a Sublime Text package. They are simplified XML files with the extension .sublime-snippet. For instance, you could have a greeting.sublime-snippet inside an Email package.

The structure of a typical snippet is as follows (including the default hints Sublime Text inserts for your convenience):

xml
<snippet>
     <content><![CDATA[Type your snippet here]]></content>
     <!-- Optional: Tab trigger to activate the snippet -->
     <tabTrigger>xyzzy</tabTrigger>
diff --git a/assets/guide_extensibility_snippets.md.vLzwQQiE.lean.js b/assets/guide_extensibility_snippets.md.C5KSEI6v.lean.js
similarity index 92%
rename from assets/guide_extensibility_snippets.md.vLzwQQiE.lean.js
rename to assets/guide_extensibility_snippets.md.C5KSEI6v.lean.js
index 9dbf462f..ecb508ee 100644
--- a/assets/guide_extensibility_snippets.md.vLzwQQiE.lean.js
+++ b/assets/guide_extensibility_snippets.md.C5KSEI6v.lean.js
@@ -1 +1 @@
-import{_ as n,D as l,o as p,c as o,k as s,a as e,I as i,R as a}from"./chunks/framework.e02z-eDF.js";const S=JSON.parse('{"title":"Snippets","description":"","frontmatter":{"title":"Snippets"},"headers":[],"relativePath":"guide/extensibility/snippets.md","filePath":"guide/extensibility/snippets.md","lastUpdated":1703773698000}'),r={name:"guide/extensibility/snippets.md"},h=a("",12),d=s("code",null,"tabTrigger",-1),c=a("",11),k=a("",1),E=s("code",null,"$1",-1),g=s("code",null,"$2",-1),u=s("p",null,"end of the snippet's content so that you can resume normal editing.",-1),y=s("p",null,[e("If you want to control where the exit point should be, use the "),s("code",null,"$0"),e(" mark. By default, this is the end of the snippet.")],-1),m=a("",29);function b(_,f,T,v,w,A){const t=l("Key");return p(),o("div",null,[h,s("p",null,[d,e(" : Defines the sequence of keys that must be pressed to insert this snippet. After typing this sequence, the snippet will kick in as soon as you hit the "),i(t,{k:"tab"}),e(" key.")]),c,s("p",null,[e("With the help of field markers, you can cycle through positions within the snippet by pressing the "),i(t,{k:"tab"}),e(" key. Fields are used to walk you through the customization of a snippet after it's been inserted.")]),k,s("p",null,[e("In the example above, the cursor will jump to "),E,e(" if you press "),i(t,{k:"tab"}),e(" once. If you press "),i(t,{k:"tab"}),e(" a second time, it will advance to "),g,e(", etc. You can also move backwards in the series with "),i(t,{k:"shift+tab"}),e(". If you press")]),i(t,{k:"tab"}),e(" after the highest tab stop, Sublime Text will place the cursor at the"),u,y,s("p",null,[e("You can break out of the field cycle any time by pressing "),i(t,{k:"escape"}),e(".")]),m])}const $=n(r,[["render",b]]);export{S as __pageData,$ as default};
+import{_ as n,D as l,o as p,c as o,k as s,a as e,I as i,R as a}from"./chunks/framework.e02z-eDF.js";const S=JSON.parse('{"title":"Snippets","description":"","frontmatter":{"title":"Snippets"},"headers":[],"relativePath":"guide/extensibility/snippets.md","filePath":"guide/extensibility/snippets.md","lastUpdated":1703774098000}'),r={name:"guide/extensibility/snippets.md"},h=a("",12),d=s("code",null,"tabTrigger",-1),c=a("",11),k=a("",1),E=s("code",null,"$1",-1),g=s("code",null,"$2",-1),u=s("p",null,"end of the snippet's content so that you can resume normal editing.",-1),y=s("p",null,[e("If you want to control where the exit point should be, use the "),s("code",null,"$0"),e(" mark. By default, this is the end of the snippet.")],-1),m=a("",29);function b(_,f,T,v,w,A){const t=l("Key");return p(),o("div",null,[h,s("p",null,[d,e(" : Defines the sequence of keys that must be pressed to insert this snippet. After typing this sequence, the snippet will kick in as soon as you hit the "),i(t,{k:"tab"}),e(" key.")]),c,s("p",null,[e("With the help of field markers, you can cycle through positions within the snippet by pressing the "),i(t,{k:"tab"}),e(" key. Fields are used to walk you through the customization of a snippet after it's been inserted.")]),k,s("p",null,[e("In the example above, the cursor will jump to "),E,e(" if you press "),i(t,{k:"tab"}),e(" once. If you press "),i(t,{k:"tab"}),e(" a second time, it will advance to "),g,e(", etc. You can also move backwards in the series with "),i(t,{k:"shift+tab"}),e(". If you press")]),i(t,{k:"tab"}),e(" after the highest tab stop, Sublime Text will place the cursor at the"),u,y,s("p",null,[e("You can break out of the field cycle any time by pressing "),i(t,{k:"escape"}),e(".")]),m])}const $=n(r,[["render",b]]);export{S as __pageData,$ as default};
diff --git a/assets/guide_extensibility_syntaxdefs.md.R2Aw3-WM.js b/assets/guide_extensibility_syntaxdefs.md.of0BVWuM.js
similarity index 99%
rename from assets/guide_extensibility_syntaxdefs.md.R2Aw3-WM.js
rename to assets/guide_extensibility_syntaxdefs.md.of0BVWuM.js
index fe927b85..d790c9e8 100644
--- a/assets/guide_extensibility_syntaxdefs.md.R2Aw3-WM.js
+++ b/assets/guide_extensibility_syntaxdefs.md.of0BVWuM.js
@@ -1,4 +1,4 @@
-import{_ as n,D as t,o as l,c as h,k as s,a as i,I as p,R as e}from"./chunks/framework.e02z-eDF.js";const x=JSON.parse('{"title":"Syntax Definitions","description":"","frontmatter":{"title":"Syntax Definitions"},"headers":[],"relativePath":"guide/extensibility/syntaxdefs.md","filePath":"guide/extensibility/syntaxdefs.md","lastUpdated":1703773698000}'),o={name:"guide/extensibility/syntaxdefs.md"},r=e(`

Syntax Definitions

Syntax definitions make Sublime Text aware of programming and markup languages. Most noticeably, they work together with colors to provide syntax highlighting. Syntax definitions define scopes that divide the text in a buffer into named regions. Several editing features in Sublime Text make extensive use of this fine-grained contextual information.

Essentially, syntax definitions consist of regular expressions used to find text, as well as more or less arbitrary, dot-separated strings called scopes or scope names. For every occurrence of a given regular expression, Sublime Text gives the matching text its corresponding scope name.

Deprecation Notice

For Sublime Text 3 (Build 3084), a new syntax definition format has been added with the .sublime-syntax extension.

It is highly encouraged to be used in favor of the legacy TextMate format described in this document, unless compatibility with older versions or other editors is desired.

Documentation is available at the official documentation.

Prerequisites

In order to follow this tutorial, you will need to install PackageDev, a package intended to ease the creation of new syntax definitions for Sublime Text. Follow the installation notes in the "Getting Started" section of the readme.

File format

Sublime Text uses property list (Plist) files to store syntax definitions. However, because editing XML files is a cumbersome task, we'll use YAML instead and convert it to Plist format afterwards. This is where the :PackageDev: package (mentioned above) comes in.

Note

If you experience unexpected errors during this tutorial, chances are :PackageDev: or YAML is to blame. Don't immediately think your problem is due to a bug in Sublime Text.

By all means, do edit the Plist files by hand if you prefer to work in XML, but always keep in mind their differing needs in regards to escape sequences, many XML tags etc.

Scopes

Scopes are a key concept in Sublime Text. Essentially, they are named text regions in a buffer. They don't do anything by themselves, but Sublime Text peeks at them when it needs contextual information.

For instance, when you trigger a snippet, Sublime Text checks the scope bound to the snippet and looks at the caret's position in the file. If the caret's current position matches the snippet's scope selector, Sublime Text fires it off. Otherwise, nothing happens.

Info

There's a slight difference between scopes and scope selectors: Scopes are the names defined in a syntax definition, while scope selectors are used in items like snippets and key bindings to target scopes. When creating a new syntax definition, you care about scopes; when you want to constrain a snippet to a certain scope, you use a scope selector.

Scopes can be nested to allow for a high degree of granularity. You can drill down the hierarchy very much like with CSS selectors. For instance, thanks to scope selectors, you could have a key binding activated only within single quoted strings in Python source code, but not inside single quoted strings in any other language.

Sublime Text inherits the idea of scopes from Textmate, a text editor for Mac. Textmate's online manual contains further information about scope selectors that's useful for Sublime Text users too. In particular, Color Schemes make extensive use of scopes to style every aspect of a language in the desired color.

How Syntax Definitions Work

At their core, syntax definitions are arrays of regular expressions paired with scope names. Sublime Text will try to match these patterns against a buffer's text and attach the corresponding scope name to all occurrences. These pairs of regular expressions and scope names are known as rules.

Rules are applied in order, one line at a time. Rules are applied in the following order:

  1. The rule that matches at the first position in a line
  2. The rule that comes first in the array

Each rule consumes the matched text region, which therefore will be excluded from the next rule's matching attempt (save for a few exceptions). In practical terms, this means that you should take care to go from more specific rules to more general ones when you create a new syntax definition. Otherwise, a greedy regular expression might swallow parts you'd like to have styled differently.

Syntax definitions from separate files can be combined, and they can be recursively applied too.

Your First Syntax Definition

By way of example, let's create a syntax definition for Sublime Text snippets. We'll be styling the actual snippet content, not the whole .sublime-snippet file.

Note

Since syntax definitions are primarily used to enable syntax highlighting, we'll use the phrase to style to mean to break down a source code file into scopes. Keep in mind, however, that colors are a different thing from syntax definitions and that scopes have many more uses besides syntax highlighting.

Here are the elements we want to style in a snippet:

  • Variables ($PARAM1, $USER_NAME\\ ...)
  • Simple fields ($0, $1\\ ...)
  • Complex fields with placeholders (\${1:Hello})
  • Nested fields (\${1:Hello \${2:World}!})
  • Escape sequences (\\$, \\<, …)
  • Illegal sequences ($, <, \\, …)

Here are the elements we don't want to style because they are too complex for this example:

  • Variable Substitution (\${1/Hello/Hi/g})

Note

Before continuing, make sure you've installed the :PackageDev: package as explained above.

Creating A New Syntax Definition

To create a new syntax definition, follow these steps:

  1. Go to Tools | Packages | Package Development | New Syntax Definition
  2. Save the new file in your Packages/User folder as a .YAML-tmLanguage file.

You now should see a file like this:

yaml
# [PackageDev] target_format: plist, ext: tmLanguage
+import{_ as n,D as t,o as l,c as h,k as s,a as i,I as p,R as e}from"./chunks/framework.e02z-eDF.js";const x=JSON.parse('{"title":"Syntax Definitions","description":"","frontmatter":{"title":"Syntax Definitions"},"headers":[],"relativePath":"guide/extensibility/syntaxdefs.md","filePath":"guide/extensibility/syntaxdefs.md","lastUpdated":1703774098000}'),o={name:"guide/extensibility/syntaxdefs.md"},r=e(`

Syntax Definitions

Syntax definitions make Sublime Text aware of programming and markup languages. Most noticeably, they work together with colors to provide syntax highlighting. Syntax definitions define scopes that divide the text in a buffer into named regions. Several editing features in Sublime Text make extensive use of this fine-grained contextual information.

Essentially, syntax definitions consist of regular expressions used to find text, as well as more or less arbitrary, dot-separated strings called scopes or scope names. For every occurrence of a given regular expression, Sublime Text gives the matching text its corresponding scope name.

Deprecation Notice

For Sublime Text 3 (Build 3084), a new syntax definition format has been added with the .sublime-syntax extension.

It is highly encouraged to be used in favor of the legacy TextMate format described in this document, unless compatibility with older versions or other editors is desired.

Documentation is available at the official documentation.

Prerequisites

In order to follow this tutorial, you will need to install PackageDev, a package intended to ease the creation of new syntax definitions for Sublime Text. Follow the installation notes in the "Getting Started" section of the readme.

File format

Sublime Text uses property list (Plist) files to store syntax definitions. However, because editing XML files is a cumbersome task, we'll use YAML instead and convert it to Plist format afterwards. This is where the :PackageDev: package (mentioned above) comes in.

Note

If you experience unexpected errors during this tutorial, chances are :PackageDev: or YAML is to blame. Don't immediately think your problem is due to a bug in Sublime Text.

By all means, do edit the Plist files by hand if you prefer to work in XML, but always keep in mind their differing needs in regards to escape sequences, many XML tags etc.

Scopes

Scopes are a key concept in Sublime Text. Essentially, they are named text regions in a buffer. They don't do anything by themselves, but Sublime Text peeks at them when it needs contextual information.

For instance, when you trigger a snippet, Sublime Text checks the scope bound to the snippet and looks at the caret's position in the file. If the caret's current position matches the snippet's scope selector, Sublime Text fires it off. Otherwise, nothing happens.

Info

There's a slight difference between scopes and scope selectors: Scopes are the names defined in a syntax definition, while scope selectors are used in items like snippets and key bindings to target scopes. When creating a new syntax definition, you care about scopes; when you want to constrain a snippet to a certain scope, you use a scope selector.

Scopes can be nested to allow for a high degree of granularity. You can drill down the hierarchy very much like with CSS selectors. For instance, thanks to scope selectors, you could have a key binding activated only within single quoted strings in Python source code, but not inside single quoted strings in any other language.

Sublime Text inherits the idea of scopes from Textmate, a text editor for Mac. Textmate's online manual contains further information about scope selectors that's useful for Sublime Text users too. In particular, Color Schemes make extensive use of scopes to style every aspect of a language in the desired color.

How Syntax Definitions Work

At their core, syntax definitions are arrays of regular expressions paired with scope names. Sublime Text will try to match these patterns against a buffer's text and attach the corresponding scope name to all occurrences. These pairs of regular expressions and scope names are known as rules.

Rules are applied in order, one line at a time. Rules are applied in the following order:

  1. The rule that matches at the first position in a line
  2. The rule that comes first in the array

Each rule consumes the matched text region, which therefore will be excluded from the next rule's matching attempt (save for a few exceptions). In practical terms, this means that you should take care to go from more specific rules to more general ones when you create a new syntax definition. Otherwise, a greedy regular expression might swallow parts you'd like to have styled differently.

Syntax definitions from separate files can be combined, and they can be recursively applied too.

Your First Syntax Definition

By way of example, let's create a syntax definition for Sublime Text snippets. We'll be styling the actual snippet content, not the whole .sublime-snippet file.

Note

Since syntax definitions are primarily used to enable syntax highlighting, we'll use the phrase to style to mean to break down a source code file into scopes. Keep in mind, however, that colors are a different thing from syntax definitions and that scopes have many more uses besides syntax highlighting.

Here are the elements we want to style in a snippet:

  • Variables ($PARAM1, $USER_NAME\\ ...)
  • Simple fields ($0, $1\\ ...)
  • Complex fields with placeholders (\${1:Hello})
  • Nested fields (\${1:Hello \${2:World}!})
  • Escape sequences (\\$, \\<, …)
  • Illegal sequences ($, <, \\, …)

Here are the elements we don't want to style because they are too complex for this example:

  • Variable Substitution (\${1/Hello/Hi/g})

Note

Before continuing, make sure you've installed the :PackageDev: package as explained above.

Creating A New Syntax Definition

To create a new syntax definition, follow these steps:

  1. Go to Tools | Packages | Package Development | New Syntax Definition
  2. Save the new file in your Packages/User folder as a .YAML-tmLanguage file.

You now should see a file like this:

yaml
# [PackageDev] target_format: plist, ext: tmLanguage
 ---
 name: Syntax Name
 scopeName: source.syntax_name
diff --git a/assets/guide_extensibility_syntaxdefs.md.R2Aw3-WM.lean.js b/assets/guide_extensibility_syntaxdefs.md.of0BVWuM.lean.js
similarity index 93%
rename from assets/guide_extensibility_syntaxdefs.md.R2Aw3-WM.lean.js
rename to assets/guide_extensibility_syntaxdefs.md.of0BVWuM.lean.js
index 15eb8bc6..18296c55 100644
--- a/assets/guide_extensibility_syntaxdefs.md.R2Aw3-WM.lean.js
+++ b/assets/guide_extensibility_syntaxdefs.md.of0BVWuM.lean.js
@@ -1 +1 @@
-import{_ as n,D as t,o as l,c as h,k as s,a as i,I as p,R as e}from"./chunks/framework.e02z-eDF.js";const x=JSON.parse('{"title":"Syntax Definitions","description":"","frontmatter":{"title":"Syntax Definitions"},"headers":[],"relativePath":"guide/extensibility/syntaxdefs.md","filePath":"guide/extensibility/syntaxdefs.md","lastUpdated":1703773698000}'),o={name:"guide/extensibility/syntaxdefs.md"},r=e("",63),k=s("li",null,[i("Make sure that "),s("code",null,"Automatic"),i(" is selected in "),s("strong",null,"Tools | Build System"),i(", or select "),s("code",null,"Convert to ..."),i(".")],-1),d=s("code",null,".tmLanguage",-1),c=s("code",null,".YAML-tmLanguage",-1),E=s("li",null,"Sublime Text will reload the changes to the syntax definition.",-1),g=e("",45);function y(u,m,f,b,F,w){const a=t("Key");return l(),h("div",null,[r,s("ul",null,[k,s("li",null,[i("Press "),p(a,{k:"ctrl+b"}),i(". A "),d,i(" file will be generated for you in the same folder as your "),c,i(" file.")]),E]),g])}const A=n(o,[["render",y]]);export{x as __pageData,A as default};
+import{_ as n,D as t,o as l,c as h,k as s,a as i,I as p,R as e}from"./chunks/framework.e02z-eDF.js";const x=JSON.parse('{"title":"Syntax Definitions","description":"","frontmatter":{"title":"Syntax Definitions"},"headers":[],"relativePath":"guide/extensibility/syntaxdefs.md","filePath":"guide/extensibility/syntaxdefs.md","lastUpdated":1703774098000}'),o={name:"guide/extensibility/syntaxdefs.md"},r=e("",63),k=s("li",null,[i("Make sure that "),s("code",null,"Automatic"),i(" is selected in "),s("strong",null,"Tools | Build System"),i(", or select "),s("code",null,"Convert to ..."),i(".")],-1),d=s("code",null,".tmLanguage",-1),c=s("code",null,".YAML-tmLanguage",-1),E=s("li",null,"Sublime Text will reload the changes to the syntax definition.",-1),g=e("",45);function y(u,m,f,b,F,w){const a=t("Key");return l(),h("div",null,[r,s("ul",null,[k,s("li",null,[i("Press "),p(a,{k:"ctrl+b"}),i(". A "),d,i(" file will be generated for you in the same folder as your "),c,i(" file.")]),E]),g])}const A=n(o,[["render",y]]);export{x as __pageData,A as default};
diff --git a/assets/guide_getting-started_basic-concepts.md.99oXwwUb.js b/assets/guide_getting-started_basic-concepts.md.Cdmunr1A.js
similarity index 99%
rename from assets/guide_getting-started_basic-concepts.md.99oXwwUb.js
rename to assets/guide_getting-started_basic-concepts.md.Cdmunr1A.js
index 3aac2015..d4ba364a 100644
--- a/assets/guide_getting-started_basic-concepts.md.99oXwwUb.js
+++ b/assets/guide_getting-started_basic-concepts.md.Cdmunr1A.js
@@ -1 +1 @@
-import{_ as e,o as t,c as a,R as o}from"./chunks/framework.e02z-eDF.js";const i="/assets/console.EzleA37u.png",b=JSON.parse('{"title":"Basic Concepts","description":"","frontmatter":{"title":"Basic Concepts"},"headers":[],"relativePath":"guide/getting-started/basic-concepts.md","filePath":"guide/getting-started/basic-concepts.md","lastUpdated":1703773698000}'),r={name:"guide/getting-started/basic-concepts.md"},s=o('

Basic Concepts

To fully understand the rest of this guide, you need to be familiar with the concepts presented on this page.

General Conventions

This guide is written from the perspective of a Windows user. Most instructions will only require trivial changes to work on other platforms.

Unless otherwise noted, relative paths (for example, Packages/User) start at the Data Directory.

We assume default key bindings when indicating keyboard shortcuts. If you are using a non-US-English keyboard layout, some key bindings may not match your layout. This is due to the way Sublime Text processes key strokes internally.

Mastering Sublime Text Takes Time

Mastering Sublime Text requires time and practice. Luckily, it's built around a handful of concepts that make for a consistent system once all the pieces come together.

This guide will teach you how to use and configure Sublime Text.

Sublime Text is a versatile editor for programmers, but you don't need to be one in order to use it, and you don't need to configure it extensively to be productive – it's an efficient tool out of the box! Hackers, however, will appreciate all the customization and extensibility opportunities.

In the following paragraphs, we'll outline key aspects that you'll get familiar with after you've spent some time using the editor.

The Data Directory

Nearly all of the interesting files for users live under the data directory. The data directory is a platform-dependent location:

  • Windows: %APPDATA%\\Sublime Text
  • macOS: ~/Library/Application Support/Sublime Text
  • Linux: ~/.config/sublime-text

If you're using the portable version (Windows only), look for Application/Data. Here, Application refers to the directory to which you've extracted the compressed portable files and where the executable resides.

Note that the Data directory only exists with that name in the portable version. In full installations, it is one of the locations indicated above.

The Packages Directory

This is a key directory located under the data directory. All resources for supported programming and markup languages are stored here.

(More on packages and resources later.)

You can access the packages directory from the main menu (Preferences → Browse Packages...), by means of an API call (sublime.packages_path()), and by other means that will be explained in later topics.

In this guide, we refer to the packages folder as Packages, packages path, packages folder, or packages directory.

The User Package

Packages/User is a catch-all directory for custom plugins, snippets, macros, etc. Consider it your personal area in the packages folder. Additionally, it will contain most of your personal application or plugin settings.

Updates to Sublime Text will never overwrite the contents of Packages/User.

Sublime Text is Programmable

This information is useful for programmers. Other users just need to know that Sublime Text enables users with programming skills to add their own features to the editor.

Sublime Text exposes its internals via an Application Programming Interface (API) that programmers can interact with using the Python programming language.

The Console

Sublime Text and plugins push debug information to the console. To open the console, press Ctrl+` or select View → Show Console from the main menu.

Here's the Python console in Sublime Text:

Console

An embedded Python interpreter is included in the editor. The embedded interpreter is useful to inspect the editor's settings and to quickly test API calls while developing plugins.

Your System's Python vs the Sublime Text Embedded Python

Sublime Text comes with its own embedded Python interpreter that's separate from your system's Python interpreter (if available).

The embedded interpreter is only intended to interact with the plugin API, not for general development.

Packages, Plugins, Resources and Other Terms

Almost every aspect of Sublime Text can be extended or customized. You can modify the editor's behavior, add macros and snippets, extend menus and much more. You can even create whole new features using the editor's API to build complex plugins.

Sublime Text's vast flexibility is the reason why you will learn about so many configuration files: there simply must be a place to specify all available preferences and settings.

Configuration files in Sublime Text are text files that conform to a predefined structure or format: JSON predominates, but you'll find XML and YAML files, too. For the more advanced extensibility options, Python source code files are used.

In this guide, for brevity, we sometimes refer collectively to all these disparate configuration files as resources.

Sublime Text will look for resources inside the packages folder. We'll talk at length about packages later, but the short version is that, to keep things tidy, Sublime Text has a notion of a package, that is, a folder (or zip archive) that contains resources that belong together. (Maybe they help compose emails faster, write HTML efficiently, enhance the coding experience for C, Ruby, Go, …).

Textmate Compatibility

TextMate is an editor for the Mac.

Since Sublime Text was heavily inspired by TextMate 1, it supports most of the extensions provided in TextMate bundles, notably excluding .tmCommands and .tmSnippets files and any other configuration in .plist files. While most of the older formats are recognized by Sublime Text, e.g. .tmLanguage and .tmTheme, new formats using .sublime-* extensions have been added that provide a superset of the old functionality or are simply replacements for TextMate's formats.

vi/Vim Emulation

vi is an ancient modal editor that lets the user perform all operations from the keyboard. Vim, a modern version of vi, is still in widespread use.

Sublime Text provides vi emulation through the Vintage package. The Vintage package is ignored by default and needs to be enabled by the user. Learn more about Vintage in the official documentation.

Several third-party packages have been developed to implement to supplement or replace the built-in vi emulation. We will cover installation and usage of third-party packages later.

emacs Emulation

emacs is another popular editor for programmers.

Sublime Text does not offer any built-in emacs emulation, but you can try third-party packages created by other Sublime Text users. As with third-party packages for vi emulation, we will cover installation and usage of these later.

',51),n=[s];function l(c,d,h,m,p,u){return t(),a("div",null,n)}const f=e(r,[["render",l]]);export{b as __pageData,f as default}; +import{_ as e,o as t,c as a,R as o}from"./chunks/framework.e02z-eDF.js";const i="/assets/console.EzleA37u.png",b=JSON.parse('{"title":"Basic Concepts","description":"","frontmatter":{"title":"Basic Concepts"},"headers":[],"relativePath":"guide/getting-started/basic-concepts.md","filePath":"guide/getting-started/basic-concepts.md","lastUpdated":1703774098000}'),r={name:"guide/getting-started/basic-concepts.md"},s=o('

Basic Concepts

To fully understand the rest of this guide, you need to be familiar with the concepts presented on this page.

General Conventions

This guide is written from the perspective of a Windows user. Most instructions will only require trivial changes to work on other platforms.

Unless otherwise noted, relative paths (for example, Packages/User) start at the Data Directory.

We assume default key bindings when indicating keyboard shortcuts. If you are using a non-US-English keyboard layout, some key bindings may not match your layout. This is due to the way Sublime Text processes key strokes internally.

Mastering Sublime Text Takes Time

Mastering Sublime Text requires time and practice. Luckily, it's built around a handful of concepts that make for a consistent system once all the pieces come together.

This guide will teach you how to use and configure Sublime Text.

Sublime Text is a versatile editor for programmers, but you don't need to be one in order to use it, and you don't need to configure it extensively to be productive – it's an efficient tool out of the box! Hackers, however, will appreciate all the customization and extensibility opportunities.

In the following paragraphs, we'll outline key aspects that you'll get familiar with after you've spent some time using the editor.

The Data Directory

Nearly all of the interesting files for users live under the data directory. The data directory is a platform-dependent location:

  • Windows: %APPDATA%\\Sublime Text
  • macOS: ~/Library/Application Support/Sublime Text
  • Linux: ~/.config/sublime-text

If you're using the portable version (Windows only), look for Application/Data. Here, Application refers to the directory to which you've extracted the compressed portable files and where the executable resides.

Note that the Data directory only exists with that name in the portable version. In full installations, it is one of the locations indicated above.

The Packages Directory

This is a key directory located under the data directory. All resources for supported programming and markup languages are stored here.

(More on packages and resources later.)

You can access the packages directory from the main menu (Preferences → Browse Packages...), by means of an API call (sublime.packages_path()), and by other means that will be explained in later topics.

In this guide, we refer to the packages folder as Packages, packages path, packages folder, or packages directory.

The User Package

Packages/User is a catch-all directory for custom plugins, snippets, macros, etc. Consider it your personal area in the packages folder. Additionally, it will contain most of your personal application or plugin settings.

Updates to Sublime Text will never overwrite the contents of Packages/User.

Sublime Text is Programmable

This information is useful for programmers. Other users just need to know that Sublime Text enables users with programming skills to add their own features to the editor.

Sublime Text exposes its internals via an Application Programming Interface (API) that programmers can interact with using the Python programming language.

The Console

Sublime Text and plugins push debug information to the console. To open the console, press Ctrl+` or select View → Show Console from the main menu.

Here's the Python console in Sublime Text:

Console

An embedded Python interpreter is included in the editor. The embedded interpreter is useful to inspect the editor's settings and to quickly test API calls while developing plugins.

Your System's Python vs the Sublime Text Embedded Python

Sublime Text comes with its own embedded Python interpreter that's separate from your system's Python interpreter (if available).

The embedded interpreter is only intended to interact with the plugin API, not for general development.

Packages, Plugins, Resources and Other Terms

Almost every aspect of Sublime Text can be extended or customized. You can modify the editor's behavior, add macros and snippets, extend menus and much more. You can even create whole new features using the editor's API to build complex plugins.

Sublime Text's vast flexibility is the reason why you will learn about so many configuration files: there simply must be a place to specify all available preferences and settings.

Configuration files in Sublime Text are text files that conform to a predefined structure or format: JSON predominates, but you'll find XML and YAML files, too. For the more advanced extensibility options, Python source code files are used.

In this guide, for brevity, we sometimes refer collectively to all these disparate configuration files as resources.

Sublime Text will look for resources inside the packages folder. We'll talk at length about packages later, but the short version is that, to keep things tidy, Sublime Text has a notion of a package, that is, a folder (or zip archive) that contains resources that belong together. (Maybe they help compose emails faster, write HTML efficiently, enhance the coding experience for C, Ruby, Go, …).

Textmate Compatibility

TextMate is an editor for the Mac.

Since Sublime Text was heavily inspired by TextMate 1, it supports most of the extensions provided in TextMate bundles, notably excluding .tmCommands and .tmSnippets files and any other configuration in .plist files. While most of the older formats are recognized by Sublime Text, e.g. .tmLanguage and .tmTheme, new formats using .sublime-* extensions have been added that provide a superset of the old functionality or are simply replacements for TextMate's formats.

vi/Vim Emulation

vi is an ancient modal editor that lets the user perform all operations from the keyboard. Vim, a modern version of vi, is still in widespread use.

Sublime Text provides vi emulation through the Vintage package. The Vintage package is ignored by default and needs to be enabled by the user. Learn more about Vintage in the official documentation.

Several third-party packages have been developed to implement to supplement or replace the built-in vi emulation. We will cover installation and usage of third-party packages later.

emacs Emulation

emacs is another popular editor for programmers.

Sublime Text does not offer any built-in emacs emulation, but you can try third-party packages created by other Sublime Text users. As with third-party packages for vi emulation, we will cover installation and usage of these later.

',51),n=[s];function l(c,d,h,m,p,u){return t(),a("div",null,n)}const f=e(r,[["render",l]]);export{b as __pageData,f as default}; diff --git a/assets/guide_getting-started_basic-concepts.md.99oXwwUb.lean.js b/assets/guide_getting-started_basic-concepts.md.Cdmunr1A.lean.js similarity index 88% rename from assets/guide_getting-started_basic-concepts.md.99oXwwUb.lean.js rename to assets/guide_getting-started_basic-concepts.md.Cdmunr1A.lean.js index 1beed94c..e705ef8c 100644 --- a/assets/guide_getting-started_basic-concepts.md.99oXwwUb.lean.js +++ b/assets/guide_getting-started_basic-concepts.md.Cdmunr1A.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,R as o}from"./chunks/framework.e02z-eDF.js";const i="/assets/console.EzleA37u.png",b=JSON.parse('{"title":"Basic Concepts","description":"","frontmatter":{"title":"Basic Concepts"},"headers":[],"relativePath":"guide/getting-started/basic-concepts.md","filePath":"guide/getting-started/basic-concepts.md","lastUpdated":1703773698000}'),r={name:"guide/getting-started/basic-concepts.md"},s=o("",51),n=[s];function l(c,d,h,m,p,u){return t(),a("div",null,n)}const f=e(r,[["render",l]]);export{b as __pageData,f as default}; +import{_ as e,o as t,c as a,R as o}from"./chunks/framework.e02z-eDF.js";const i="/assets/console.EzleA37u.png",b=JSON.parse('{"title":"Basic Concepts","description":"","frontmatter":{"title":"Basic Concepts"},"headers":[],"relativePath":"guide/getting-started/basic-concepts.md","filePath":"guide/getting-started/basic-concepts.md","lastUpdated":1703774098000}'),r={name:"guide/getting-started/basic-concepts.md"},s=o("",51),n=[s];function l(c,d,h,m,p,u){return t(),a("div",null,n)}const f=e(r,[["render",l]]);export{b as __pageData,f as default}; diff --git a/assets/guide_getting-started_installation.md.xQ0l5kUs.js b/assets/guide_getting-started_installation.md.FpPDrf_W.js similarity index 99% rename from assets/guide_getting-started_installation.md.xQ0l5kUs.js rename to assets/guide_getting-started_installation.md.FpPDrf_W.js index 439f3b55..d62722a1 100644 --- a/assets/guide_getting-started_installation.md.xQ0l5kUs.js +++ b/assets/guide_getting-started_installation.md.FpPDrf_W.js @@ -1,4 +1,4 @@ -import{_ as e,o as a,c as t,R as i}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"Installation","description":"","frontmatter":{"title":"Installation"},"headers":[],"relativePath":"guide/getting-started/installation.md","filePath":"guide/getting-started/installation.md","lastUpdated":1703773698000}'),s={name:"guide/getting-started/installation.md"},l=i(`

Installation

Make sure to read the conditions for use on the official site. Sublime Text is not free. However, you may evaluate it without a license.

Download links for all supported platforms can be found on the Download page.

The process of installing Sublime Text is different for each platform.

32 or 64 bits?

64 bit versions should be preferred. As of Sublime Text 4 there are no (officially supported) 32-bit versions any more. Only use a 32-bit version if you are having problems with the 64-bit version or you are running a 32-bit operating system. Note that some features, such as Git Integration are only available in the 64-bit version.

macOS

There is only one version of Sublime Text for macOS.

Windows

You should be able to run the 64-bit version if you are using a modern and supported version Windows (read: anything older than Windows XP).

Linux

Run the following command in your terminal to check your operating system's type. x86_64 means you are on a 64-bit system.

bash
$ uname -m
+import{_ as e,o as a,c as t,R as i}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"Installation","description":"","frontmatter":{"title":"Installation"},"headers":[],"relativePath":"guide/getting-started/installation.md","filePath":"guide/getting-started/installation.md","lastUpdated":1703774098000}'),s={name:"guide/getting-started/installation.md"},l=i(`

Installation

Make sure to read the conditions for use on the official site. Sublime Text is not free. However, you may evaluate it without a license.

Download links for all supported platforms can be found on the Download page.

The process of installing Sublime Text is different for each platform.

32 or 64 bits?

64 bit versions should be preferred. As of Sublime Text 4 there are no (officially supported) 32-bit versions any more. Only use a 32-bit version if you are having problems with the 64-bit version or you are running a 32-bit operating system. Note that some features, such as Git Integration are only available in the 64-bit version.

macOS

There is only one version of Sublime Text for macOS.

Windows

You should be able to run the 64-bit version if you are using a modern and supported version Windows (read: anything older than Windows XP).

Linux

Run the following command in your terminal to check your operating system's type. x86_64 means you are on a 64-bit system.

bash
$ uname -m
 x86_64

Portable or Not Portable?

Sublime Text comes in two flavors (for Windows specifically):

  • normal
  • portable.

Most users should be better served by a normal installation. Use the portable version only if you know you need it.

Normal installations separate data between two folders: the installation folder proper, and the data directory (user-specific directory for data; explained later in this guide). Normal installations also integrate Sublime Text with the File Explorer.

Portable installations keep all files needed by Sublime Text in a single folder. This folder can be moved around and the editor will still work.

How to Install

macOS and Windows

  1. Download the installer.
  2. Double click on the installer and follow the provided steps.

Linux

The recommended way is to use the official Linux repositories for commonly used Linux distributions and follow the corresponding steps to install Sublime Text using your system's package manager.

If there is no repository for your system, you can look for a Sublime Text entry on your distro's repository.

Manual Installation

The following sequence of Bash commands can be used to install Sublime Text manually. Replace 3211 with the latest build available (or any older build number).

bash
cd ~
 wget https://download.sublimetext.com/sublime_text_3_build_3211_x64.tar.bz2
 tar vxjf sublime_text_3_build_*_x64.tar.bz2
diff --git a/assets/guide_getting-started_installation.md.xQ0l5kUs.lean.js b/assets/guide_getting-started_installation.md.FpPDrf_W.lean.js
similarity index 87%
rename from assets/guide_getting-started_installation.md.xQ0l5kUs.lean.js
rename to assets/guide_getting-started_installation.md.FpPDrf_W.lean.js
index 7b0eb260..50848630 100644
--- a/assets/guide_getting-started_installation.md.xQ0l5kUs.lean.js
+++ b/assets/guide_getting-started_installation.md.FpPDrf_W.lean.js
@@ -1 +1 @@
-import{_ as e,o as a,c as t,R as i}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"Installation","description":"","frontmatter":{"title":"Installation"},"headers":[],"relativePath":"guide/getting-started/installation.md","filePath":"guide/getting-started/installation.md","lastUpdated":1703773698000}'),s={name:"guide/getting-started/installation.md"},l=i("",50),o=[l];function n(r,h,d,p,u,c){return a(),t("div",null,o)}const k=e(s,[["render",n]]);export{m as __pageData,k as default};
+import{_ as e,o as a,c as t,R as i}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"Installation","description":"","frontmatter":{"title":"Installation"},"headers":[],"relativePath":"guide/getting-started/installation.md","filePath":"guide/getting-started/installation.md","lastUpdated":1703774098000}'),s={name:"guide/getting-started/installation.md"},l=i("",50),o=[l];function n(r,h,d,p,u,c){return a(),t("div",null,o)}const k=e(s,[["render",n]]);export{m as __pageData,k as default};
diff --git a/assets/guide_index.md.kY34JmTT.js b/assets/guide_index.md.Fs8iElNf.js
similarity index 98%
rename from assets/guide_index.md.kY34JmTT.js
rename to assets/guide_index.md.Fs8iElNf.js
index ce67dc51..e36848fe 100644
--- a/assets/guide_index.md.kY34JmTT.js
+++ b/assets/guide_index.md.Fs8iElNf.js
@@ -1 +1 @@
-import{_ as e,o as t,c as o,R as i}from"./chunks/framework.e02z-eDF.js";const a="/assets/introduction.mSvk7nc6.png",b=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"title":"Introduction"},"headers":[],"relativePath":"guide/index.md","filePath":"guide/index.md","lastUpdated":1703773698000}'),r={name:"guide/index.md"},n=i('

Introduction

Welcome to the community-driven documentation project for the Sublime Text editor!

Sublime Text is a versatile, fun, and fast text editor for code and prose that automates repetitive tasks so you can focus on the important stuff. It is supported on macOS, Windows and Linux. Its versatility comes from a wide range of community-developed third-party packages that provide syntax highlighting, snippets, or other automation backed by Python plugins. The default distribution of Sublime Text aims to provide a basic but very functional set of features, but it can easily be turned into a full-fledged IDE, if so desired.

In this guide, you will learn how to use Sublime Text effectively and how to extend it with functionality that caters to your workflow.

If you're starting out with Sublime Text and already installed it, we recommend beginning with the Basic Concepts page. Otherwise, feel free to use the sidebar on the left to navigate to your topic of interest.

If you're interested in the nitty-gritty details of how you can customize and extend Sublime Text to your liking, check out the Reference section of this guide via the navigation bar on top. You can always go back to this page by clicking on "Guide" in that same bar.

Happy learning!

One last note before you dive in

You can switch the page's theme by using the cog in the top navigation bar. Changing the theme and using the search bar require JavaScript, because this is a statically hosted site. Other than that, this site site can be used without JavaScript.

Sublime Text

History

The Unofficial Sublime Text Documentation was started by Guillermo López-Anglada in 2010 and later joined by FichteFoll in 2013, receiving countless contributions by other members of the community through its entire lifetime. In 2014, it was backed by a fundraiser and supported by individuals and Sublime HQ Pty Ltd.

After that version of the docs, originally hosted on http://docs.sublimetext.info/, went down in November 2019 and the maintainer of both the repo and the domain could not be contacted anymore, the project was forked of the original under an older, more permissive license and rebooted at its current domain of https://docs.sublimetext.io/. In the process, the underlying markup rendering framework was changed from Sphinx to Vuepress and now to Vitepress and the documents have been restructured into the two guide and reference main sections you can see in the navigation bar at the top.

Contributing to the Documentation

If you want to contribute to this documentation, head over to the GitHub repository. You will also find an "Edit this page" link at the bottom of each page that will redirect you directly to the source file of the page you are currently viewing. Please review our contribution guidelines for formatting questions.

',14),s=[n];function h(u,d,c,l,p,f){return t(),o("div",null,s)}const g=e(r,[["render",h]]);export{b as __pageData,g as default}; +import{_ as e,o as t,c as o,R as i}from"./chunks/framework.e02z-eDF.js";const a="/assets/introduction.mSvk7nc6.png",b=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"title":"Introduction"},"headers":[],"relativePath":"guide/index.md","filePath":"guide/index.md","lastUpdated":1703774098000}'),r={name:"guide/index.md"},n=i('

Introduction

Welcome to the community-driven documentation project for the Sublime Text editor!

Sublime Text is a versatile, fun, and fast text editor for code and prose that automates repetitive tasks so you can focus on the important stuff. It is supported on macOS, Windows and Linux. Its versatility comes from a wide range of community-developed third-party packages that provide syntax highlighting, snippets, or other automation backed by Python plugins. The default distribution of Sublime Text aims to provide a basic but very functional set of features, but it can easily be turned into a full-fledged IDE, if so desired.

In this guide, you will learn how to use Sublime Text effectively and how to extend it with functionality that caters to your workflow.

If you're starting out with Sublime Text and already installed it, we recommend beginning with the Basic Concepts page. Otherwise, feel free to use the sidebar on the left to navigate to your topic of interest.

If you're interested in the nitty-gritty details of how you can customize and extend Sublime Text to your liking, check out the Reference section of this guide via the navigation bar on top. You can always go back to this page by clicking on "Guide" in that same bar.

Happy learning!

One last note before you dive in

You can switch the page's theme by using the cog in the top navigation bar. Changing the theme and using the search bar require JavaScript, because this is a statically hosted site. Other than that, this site site can be used without JavaScript.

Sublime Text

History

The Unofficial Sublime Text Documentation was started by Guillermo López-Anglada in 2010 and later joined by FichteFoll in 2013, receiving countless contributions by other members of the community through its entire lifetime. In 2014, it was backed by a fundraiser and supported by individuals and Sublime HQ Pty Ltd.

After that version of the docs, originally hosted on http://docs.sublimetext.info/, went down in November 2019 and the maintainer of both the repo and the domain could not be contacted anymore, the project was forked of the original under an older, more permissive license and rebooted at its current domain of https://docs.sublimetext.io/. In the process, the underlying markup rendering framework was changed from Sphinx to Vuepress and now to Vitepress and the documents have been restructured into the two guide and reference main sections you can see in the navigation bar at the top.

Contributing to the Documentation

If you want to contribute to this documentation, head over to the GitHub repository. You will also find an "Edit this page" link at the bottom of each page that will redirect you directly to the source file of the page you are currently viewing. Please review our contribution guidelines for formatting questions.

',14),s=[n];function h(u,d,c,l,p,f){return t(),o("div",null,s)}const g=e(r,[["render",h]]);export{b as __pageData,g as default}; diff --git a/assets/guide_index.md.kY34JmTT.lean.js b/assets/guide_index.md.Fs8iElNf.lean.js similarity index 86% rename from assets/guide_index.md.kY34JmTT.lean.js rename to assets/guide_index.md.Fs8iElNf.lean.js index 15fd1b6f..0d1046b6 100644 --- a/assets/guide_index.md.kY34JmTT.lean.js +++ b/assets/guide_index.md.Fs8iElNf.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as o,R as i}from"./chunks/framework.e02z-eDF.js";const a="/assets/introduction.mSvk7nc6.png",b=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"title":"Introduction"},"headers":[],"relativePath":"guide/index.md","filePath":"guide/index.md","lastUpdated":1703773698000}'),r={name:"guide/index.md"},n=i("",14),s=[n];function h(u,d,c,l,p,f){return t(),o("div",null,s)}const g=e(r,[["render",h]]);export{b as __pageData,g as default}; +import{_ as e,o as t,c as o,R as i}from"./chunks/framework.e02z-eDF.js";const a="/assets/introduction.mSvk7nc6.png",b=JSON.parse('{"title":"Introduction","description":"","frontmatter":{"title":"Introduction"},"headers":[],"relativePath":"guide/index.md","filePath":"guide/index.md","lastUpdated":1703774098000}'),r={name:"guide/index.md"},n=i("",14),s=[n];function h(u,d,c,l,p,f){return t(),o("div",null,s)}const g=e(r,[["render",h]]);export{b as __pageData,g as default}; diff --git a/assets/guide_usage_build-systems.md.7hUFEMc8.js b/assets/guide_usage_build-systems.md.Np-FpCbs.js similarity index 98% rename from assets/guide_usage_build-systems.md.7hUFEMc8.js rename to assets/guide_usage_build-systems.md.Np-FpCbs.js index 738b6acc..683e6d52 100644 --- a/assets/guide_usage_build-systems.md.7hUFEMc8.js +++ b/assets/guide_usage_build-systems.md.Np-FpCbs.js @@ -1,4 +1,4 @@ -import{_ as l,D as o,o as n,c as r,k as e,a as s,I as t,R as a}from"./chunks/framework.e02z-eDF.js";const F=JSON.parse('{"title":"Build Systems","description":"","frontmatter":{"title":"Build Systems"},"headers":[],"relativePath":"guide/usage/build-systems.md","filePath":"guide/usage/build-systems.md","lastUpdated":1703773698000}'),h={name:"guide/usage/build-systems.md"},d=a(`

Build Systems

Notice

This page describes the old behavior of build systems. While it is still generally correct, refer to the official documentation for the up to date version. We are working on this.

Offical Documentation on Build Systems : Complete documentation on all available options, variables, etc.

Build systems let you run your files through external programs like make, tidy, interpreters, etc.

Executables called from build systems must be in your PATH.

File Format

Build systems are JSON files and have the extension .sublime-build.

Example

Here's an example of a build system:

js
{
+import{_ as l,D as o,o as n,c as r,k as e,a as s,I as t,R as a}from"./chunks/framework.e02z-eDF.js";const F=JSON.parse('{"title":"Build Systems","description":"","frontmatter":{"title":"Build Systems"},"headers":[],"relativePath":"guide/usage/build-systems.md","filePath":"guide/usage/build-systems.md","lastUpdated":1703774098000}'),h={name:"guide/usage/build-systems.md"},d=a(`

Build Systems

Notice

This page describes the old behavior of build systems. While it is still generally correct, refer to the official documentation for the up to date version. We are working on this.

Offical Documentation on Build Systems : Complete documentation on all available options, variables, etc.

Build systems let you run your files through external programs like make, tidy, interpreters, etc.

Executables called from build systems must be in your PATH.

File Format

Build systems are JSON files and have the extension .sublime-build.

Example

Here's an example of a build system:

js
{
     "cmd": ["python", "-u", "$file"],
     "file_regex": "^[ ]*File \\"(...*?)\\", line ([0-9]*)",
     "selector": "source.python"
diff --git a/assets/guide_usage_build-systems.md.7hUFEMc8.lean.js b/assets/guide_usage_build-systems.md.Np-FpCbs.lean.js
similarity index 93%
rename from assets/guide_usage_build-systems.md.7hUFEMc8.lean.js
rename to assets/guide_usage_build-systems.md.Np-FpCbs.lean.js
index 3597e342..d317f3c9 100644
--- a/assets/guide_usage_build-systems.md.7hUFEMc8.lean.js
+++ b/assets/guide_usage_build-systems.md.Np-FpCbs.lean.js
@@ -1 +1 @@
-import{_ as l,D as o,o as n,c as r,k as e,a as s,I as t,R as a}from"./chunks/framework.e02z-eDF.js";const F=JSON.parse('{"title":"Build Systems","description":"","frontmatter":{"title":"Build Systems"},"headers":[],"relativePath":"guide/usage/build-systems.md","filePath":"guide/usage/build-systems.md","lastUpdated":1703773698000}'),h={name:"guide/usage/build-systems.md"},d=a("",11),p=e("code",null,"file_regex",-1),u=a("",5),c=e("strong",null,"Tools → Build",-1);function k(m,y,g,b,E,f){const i=o("Key");return n(),r("div",null,[d,e("p",null,[p,s(" : A Perl-style regular expression to capture error information from an external program's output. This information is used to help you navigate through error instances with "),t(i,{k:"f4"}),s('".')]),u,e("p",null,[s("Build systems can be run by pressing "),t(i,{k:"f7"}),s(" or from "),c,s(".")])])}const B=l(h,[["render",k]]);export{F as __pageData,B as default};
+import{_ as l,D as o,o as n,c as r,k as e,a as s,I as t,R as a}from"./chunks/framework.e02z-eDF.js";const F=JSON.parse('{"title":"Build Systems","description":"","frontmatter":{"title":"Build Systems"},"headers":[],"relativePath":"guide/usage/build-systems.md","filePath":"guide/usage/build-systems.md","lastUpdated":1703774098000}'),h={name:"guide/usage/build-systems.md"},d=a("",11),p=e("code",null,"file_regex",-1),u=a("",5),c=e("strong",null,"Tools → Build",-1);function k(m,y,g,b,E,f){const i=o("Key");return n(),r("div",null,[d,e("p",null,[p,s(" : A Perl-style regular expression to capture error information from an external program's output. This information is used to help you navigate through error instances with "),t(i,{k:"f4"}),s('".')]),u,e("p",null,[s("Build systems can be run by pressing "),t(i,{k:"f7"}),s(" or from "),c,s(".")])])}const B=l(h,[["render",k]]);export{F as __pageData,B as default};
diff --git a/assets/guide_usage_editing.md.S0h4lqqn.js b/assets/guide_usage_editing.md.fI14jcHZ.js
similarity index 99%
rename from assets/guide_usage_editing.md.S0h4lqqn.js
rename to assets/guide_usage_editing.md.fI14jcHZ.js
index 4e2276ce..141f0fed 100644
--- a/assets/guide_usage_editing.md.S0h4lqqn.js
+++ b/assets/guide_usage_editing.md.fI14jcHZ.js
@@ -1 +1 @@
-import{_ as o,D as s,o as i,c as a,k as t,a as e,I as l,R as r}from"./chunks/framework.e02z-eDF.js";const X=JSON.parse('{"title":"Editing","description":"","frontmatter":{"title":"Editing"},"headers":[],"relativePath":"guide/usage/editing.md","filePath":"guide/usage/editing.md","lastUpdated":1703773698000}'),d={name:"guide/usage/editing.md"},c=t("h1",{id:"editing",tabindex:"-1"},[e("Editing "),t("a",{class:"header-anchor",href:"#editing","aria-label":'Permalink to "Editing"'},"​")],-1),h=t("p",null,"Sublime Text is brim-full of editing features. This topic just scratches the surface of what's possible.",-1),u=t("h2",{id:"multiple-selections",tabindex:"-1"},[e("Multiple Selections "),t("a",{class:"header-anchor",href:"#multiple-selections","aria-label":'Permalink to "Multiple Selections"'},"​")],-1),m=t("p",null,"Multiple selections let you make sweeping changes to your text efficiently. Any praise about multiple selections is an understatement. This is why:",-1),p=t("strong",null,"add more",-1),_=t("strong",null,"to skip the current instance",-1),f=t("strong",null,"deselect",-1),g=t("h2",{id:"transforming-multiple-selections-into-lines",tabindex:"-1"},[e("Transforming Multiple Selections into Lines "),t("a",{class:"header-anchor",href:"#transforming-multiple-selections-into-lines","aria-label":'Permalink to "Transforming Multiple Selections into Lines"'},"​")],-1),b=t("p",null,"You can copy multiple selected lines to a separate buffer, edit them there, select the content again as multiple lines and then paste them back into place in the first buffer.",-1),k=t("h2",{id:"column-selection",tabindex:"-1"},[e("Column Selection "),t("a",{class:"header-anchor",href:"#column-selection","aria-label":'Permalink to "Column Selection"'},"​")],-1),y=t("p",null,"You can select a rectangular area of a file. Column selection makes use of multiple selections.",-1),x=t("p",null,"It's possible to add blocks of text to or remove them from the selection.",-1),S=t("h3",{id:"using-the-mouse",tabindex:"-1"},[e("Using the Mouse "),t("a",{class:"header-anchor",href:"#using-the-mouse","aria-label":'Permalink to "Using the Mouse"'},"​")],-1),w=t("p",null,[t("strong",null,"Windows & Linux")],-1),T=t("thead",null,[t("tr",null,[t("th",null,"Description"),t("th",null,"Shortcut")])],-1),P=t("td",null,"Select Block",-1),M=t("td",null,"Add to Selection",-1),A=t("td",null,"Remove from Selection",-1),B=t("p",null,[t("strong",null,"macOS")],-1),E=t("thead",null,[t("tr",null,[t("th",null,"Description"),t("th",null,"Shortcut")])],-1),v=t("td",null,"Select Block",-1),N=t("td",null,"Add to Selection",-1),R=t("td",null,"Remove from Selection",-1),L=t("h3",{id:"using-the-keyboard",tabindex:"-1"},[e("Using the Keyboard "),t("a",{class:"header-anchor",href:"#using-the-keyboard","aria-label":'Permalink to "Using the Keyboard"'},"​")],-1),C=t("thead",null,[t("tr",null,[t("th",null,"System"),t("th",null,"Shortcut")])],-1),D=t("td",null,"Windows",-1),I=t("td",null,"Linux",-1),U=t("td",null,"macOS",-1),V=t("h2",{id:"other-ways-of-selecting-text",tabindex:"-1"},[e("Other Ways of Selecting Text "),t("a",{class:"header-anchor",href:"#other-ways-of-selecting-text","aria-label":'Permalink to "Other Ways of Selecting Text"'},"​")],-1),O=t("p",null,[e("The list is long; all available options can be found under "),t("strong",null,"Selection"),e(". To name a few:")],-1),K=t("h2",{id:"transposing-things",tabindex:"-1"},[e("Transposing Things "),t("a",{class:"header-anchor",href:"#transposing-things","aria-label":'Permalink to "Transposing Things"'},"​")],-1),W=t("p",null,"Need to swap two letters or, better yet, two words? Experiment with",-1),Y=t("h2",{id:"arithmetic",tabindex:"-1"},[e("Arithmetic "),t("a",{class:"header-anchor",href:"#arithmetic","aria-label":'Permalink to "Arithmetic"'},"​")],-1),$=r('

Best used when having multiple selections.

ExpressionSelectionResult
1+i1, 2, 3, 4, 5, 6, 7, ...
30+(i%3)30, 31, 32, 30, 31, 32, ...
(x*2)+i10, 20, 3020, 41, 62
math.ceil(x)0.25, 2.251, 3
len(s)house, tree5, 4
format(s, '^10')fish'   fish   ' (centered string)

You can use the following variables:

  • i being the index of the selection
  • x being the selected number
  • s being the selected string

As you can see above you can even use a certain set of built-in python functions:

And much, much more...

The Edit, Selection, Find and Goto menus are good places to look for handy editing tools. You might end up using just a few of them, but the rest will still be there for when you need them.

',8);function j(q,F,G,J,z,H){const n=s("Key");return i(),a("div",null,[c,h,u,m,t("p",null,[e("Select some text and press "),l(n,{k:"ctrl+D"}),e(" to "),p,e(" instances. If you want "),_,e(", press "),l(n,{k:"ctrl+k, ctrl+d"}),e(".")]),t("p",null,[e("If you go too far, press "),l(n,{k:"ctrl+U"}),e(" to "),f,e(" the current instance.")]),g,l(n,{k:"ctrl+l"}),e(" expands the selections to the end of the line."),l(n,{k:"ctrl+shift+l"}),e(" splits the selections into lines."),b,k,y,x,S,w,t("table",null,[T,t("tbody",null,[t("tr",null,[P,t("td",null,[l(n,{k:"shift"}),e(" + Right Mouse Button")])]),t("tr",null,[M,t("td",null,[l(n,{k:"ctrl+shift"}),e(" + Right Mouse Button")])]),t("tr",null,[A,t("td",null,[l(n,{k:"alt+shift"}),e(" + Right Mouse Button")])])])]),B,t("table",null,[E,t("tbody",null,[t("tr",null,[v,t("td",null,[l(n,{k:"option"}),e(" + Left Mouse Button")])]),t("tr",null,[N,t("td",null,[l(n,{k:"option+command"}),e(" + Left Mouse Button")])]),t("tr",null,[R,t("td",null,[l(n,{k:"option+shift+command"}),e(" + Left Mouse Button")])])])]),L,t("table",null,[C,t("tbody",null,[t("tr",null,[D,t("td",null,[l(n,{k:"ctrl+alt+up"}),e(" and "),l(n,{k:"ctrl+alt+down"})])]),t("tr",null,[I,t("td",null,[l(n,{k:"alt+shift+up"}),e(" and "),l(n,{k:"alt+shift+down"})])]),t("tr",null,[U,t("td",null,[l(n,{k:"ctrl+shift+up"}),e(" and "),l(n,{k:"ctrl+shift+down"})])])])]),V,O,t("ul",null,[t("li",null,[e("Select subwords ("),l(n,{k:"alt+shift+left"}),e(" and "),l(n,{k:"alt+shift+right"}),e(")")]),t("li",null,[e("Expand selection to brackets ("),l(n,{k:"ctrl+shift+m"}),e(")")]),t("li",null,[e("Expand selection to indentation ("),l(n,{k:"ctrl+shift+j"}),e(")")]),t("li",null,[e("Expand selection to scope ("),l(n,{k:"ctrl+shift+space"}),e(")")])]),K,W,l(n,{k:"ctrl+t"}),e("."),Y,t("p",null,[e("Need to create a series of numbers? Try "),l(n,{k:"ctrl+shift+p"}),e(' and "Arithmetic".')]),$])}const Z=o(d,[["render",j]]);export{X as __pageData,Z as default}; +import{_ as o,D as s,o as i,c as a,k as t,a as e,I as l,R as r}from"./chunks/framework.e02z-eDF.js";const X=JSON.parse('{"title":"Editing","description":"","frontmatter":{"title":"Editing"},"headers":[],"relativePath":"guide/usage/editing.md","filePath":"guide/usage/editing.md","lastUpdated":1703774098000}'),d={name:"guide/usage/editing.md"},c=t("h1",{id:"editing",tabindex:"-1"},[e("Editing "),t("a",{class:"header-anchor",href:"#editing","aria-label":'Permalink to "Editing"'},"​")],-1),h=t("p",null,"Sublime Text is brim-full of editing features. This topic just scratches the surface of what's possible.",-1),u=t("h2",{id:"multiple-selections",tabindex:"-1"},[e("Multiple Selections "),t("a",{class:"header-anchor",href:"#multiple-selections","aria-label":'Permalink to "Multiple Selections"'},"​")],-1),m=t("p",null,"Multiple selections let you make sweeping changes to your text efficiently. Any praise about multiple selections is an understatement. This is why:",-1),p=t("strong",null,"add more",-1),_=t("strong",null,"to skip the current instance",-1),f=t("strong",null,"deselect",-1),g=t("h2",{id:"transforming-multiple-selections-into-lines",tabindex:"-1"},[e("Transforming Multiple Selections into Lines "),t("a",{class:"header-anchor",href:"#transforming-multiple-selections-into-lines","aria-label":'Permalink to "Transforming Multiple Selections into Lines"'},"​")],-1),b=t("p",null,"You can copy multiple selected lines to a separate buffer, edit them there, select the content again as multiple lines and then paste them back into place in the first buffer.",-1),k=t("h2",{id:"column-selection",tabindex:"-1"},[e("Column Selection "),t("a",{class:"header-anchor",href:"#column-selection","aria-label":'Permalink to "Column Selection"'},"​")],-1),y=t("p",null,"You can select a rectangular area of a file. Column selection makes use of multiple selections.",-1),x=t("p",null,"It's possible to add blocks of text to or remove them from the selection.",-1),S=t("h3",{id:"using-the-mouse",tabindex:"-1"},[e("Using the Mouse "),t("a",{class:"header-anchor",href:"#using-the-mouse","aria-label":'Permalink to "Using the Mouse"'},"​")],-1),w=t("p",null,[t("strong",null,"Windows & Linux")],-1),T=t("thead",null,[t("tr",null,[t("th",null,"Description"),t("th",null,"Shortcut")])],-1),P=t("td",null,"Select Block",-1),M=t("td",null,"Add to Selection",-1),A=t("td",null,"Remove from Selection",-1),B=t("p",null,[t("strong",null,"macOS")],-1),E=t("thead",null,[t("tr",null,[t("th",null,"Description"),t("th",null,"Shortcut")])],-1),v=t("td",null,"Select Block",-1),N=t("td",null,"Add to Selection",-1),R=t("td",null,"Remove from Selection",-1),L=t("h3",{id:"using-the-keyboard",tabindex:"-1"},[e("Using the Keyboard "),t("a",{class:"header-anchor",href:"#using-the-keyboard","aria-label":'Permalink to "Using the Keyboard"'},"​")],-1),C=t("thead",null,[t("tr",null,[t("th",null,"System"),t("th",null,"Shortcut")])],-1),D=t("td",null,"Windows",-1),I=t("td",null,"Linux",-1),U=t("td",null,"macOS",-1),V=t("h2",{id:"other-ways-of-selecting-text",tabindex:"-1"},[e("Other Ways of Selecting Text "),t("a",{class:"header-anchor",href:"#other-ways-of-selecting-text","aria-label":'Permalink to "Other Ways of Selecting Text"'},"​")],-1),O=t("p",null,[e("The list is long; all available options can be found under "),t("strong",null,"Selection"),e(". To name a few:")],-1),K=t("h2",{id:"transposing-things",tabindex:"-1"},[e("Transposing Things "),t("a",{class:"header-anchor",href:"#transposing-things","aria-label":'Permalink to "Transposing Things"'},"​")],-1),W=t("p",null,"Need to swap two letters or, better yet, two words? Experiment with",-1),Y=t("h2",{id:"arithmetic",tabindex:"-1"},[e("Arithmetic "),t("a",{class:"header-anchor",href:"#arithmetic","aria-label":'Permalink to "Arithmetic"'},"​")],-1),$=r('

Best used when having multiple selections.

ExpressionSelectionResult
1+i1, 2, 3, 4, 5, 6, 7, ...
30+(i%3)30, 31, 32, 30, 31, 32, ...
(x*2)+i10, 20, 3020, 41, 62
math.ceil(x)0.25, 2.251, 3
len(s)house, tree5, 4
format(s, '^10')fish'   fish   ' (centered string)

You can use the following variables:

  • i being the index of the selection
  • x being the selected number
  • s being the selected string

As you can see above you can even use a certain set of built-in python functions:

And much, much more...

The Edit, Selection, Find and Goto menus are good places to look for handy editing tools. You might end up using just a few of them, but the rest will still be there for when you need them.

',8);function j(q,F,G,J,z,H){const n=s("Key");return i(),a("div",null,[c,h,u,m,t("p",null,[e("Select some text and press "),l(n,{k:"ctrl+D"}),e(" to "),p,e(" instances. If you want "),_,e(", press "),l(n,{k:"ctrl+k, ctrl+d"}),e(".")]),t("p",null,[e("If you go too far, press "),l(n,{k:"ctrl+U"}),e(" to "),f,e(" the current instance.")]),g,l(n,{k:"ctrl+l"}),e(" expands the selections to the end of the line."),l(n,{k:"ctrl+shift+l"}),e(" splits the selections into lines."),b,k,y,x,S,w,t("table",null,[T,t("tbody",null,[t("tr",null,[P,t("td",null,[l(n,{k:"shift"}),e(" + Right Mouse Button")])]),t("tr",null,[M,t("td",null,[l(n,{k:"ctrl+shift"}),e(" + Right Mouse Button")])]),t("tr",null,[A,t("td",null,[l(n,{k:"alt+shift"}),e(" + Right Mouse Button")])])])]),B,t("table",null,[E,t("tbody",null,[t("tr",null,[v,t("td",null,[l(n,{k:"option"}),e(" + Left Mouse Button")])]),t("tr",null,[N,t("td",null,[l(n,{k:"option+command"}),e(" + Left Mouse Button")])]),t("tr",null,[R,t("td",null,[l(n,{k:"option+shift+command"}),e(" + Left Mouse Button")])])])]),L,t("table",null,[C,t("tbody",null,[t("tr",null,[D,t("td",null,[l(n,{k:"ctrl+alt+up"}),e(" and "),l(n,{k:"ctrl+alt+down"})])]),t("tr",null,[I,t("td",null,[l(n,{k:"alt+shift+up"}),e(" and "),l(n,{k:"alt+shift+down"})])]),t("tr",null,[U,t("td",null,[l(n,{k:"ctrl+shift+up"}),e(" and "),l(n,{k:"ctrl+shift+down"})])])])]),V,O,t("ul",null,[t("li",null,[e("Select subwords ("),l(n,{k:"alt+shift+left"}),e(" and "),l(n,{k:"alt+shift+right"}),e(")")]),t("li",null,[e("Expand selection to brackets ("),l(n,{k:"ctrl+shift+m"}),e(")")]),t("li",null,[e("Expand selection to indentation ("),l(n,{k:"ctrl+shift+j"}),e(")")]),t("li",null,[e("Expand selection to scope ("),l(n,{k:"ctrl+shift+space"}),e(")")])]),K,W,l(n,{k:"ctrl+t"}),e("."),Y,t("p",null,[e("Need to create a series of numbers? Try "),l(n,{k:"ctrl+shift+p"}),e(' and "Arithmetic".')]),$])}const Z=o(d,[["render",j]]);export{X as __pageData,Z as default}; diff --git a/assets/guide_usage_editing.md.S0h4lqqn.lean.js b/assets/guide_usage_editing.md.fI14jcHZ.lean.js similarity index 98% rename from assets/guide_usage_editing.md.S0h4lqqn.lean.js rename to assets/guide_usage_editing.md.fI14jcHZ.lean.js index d6ad2e7f..55ce3069 100644 --- a/assets/guide_usage_editing.md.S0h4lqqn.lean.js +++ b/assets/guide_usage_editing.md.fI14jcHZ.lean.js @@ -1 +1 @@ -import{_ as o,D as s,o as i,c as a,k as t,a as e,I as l,R as r}from"./chunks/framework.e02z-eDF.js";const X=JSON.parse('{"title":"Editing","description":"","frontmatter":{"title":"Editing"},"headers":[],"relativePath":"guide/usage/editing.md","filePath":"guide/usage/editing.md","lastUpdated":1703773698000}'),d={name:"guide/usage/editing.md"},c=t("h1",{id:"editing",tabindex:"-1"},[e("Editing "),t("a",{class:"header-anchor",href:"#editing","aria-label":'Permalink to "Editing"'},"​")],-1),h=t("p",null,"Sublime Text is brim-full of editing features. This topic just scratches the surface of what's possible.",-1),u=t("h2",{id:"multiple-selections",tabindex:"-1"},[e("Multiple Selections "),t("a",{class:"header-anchor",href:"#multiple-selections","aria-label":'Permalink to "Multiple Selections"'},"​")],-1),m=t("p",null,"Multiple selections let you make sweeping changes to your text efficiently. Any praise about multiple selections is an understatement. This is why:",-1),p=t("strong",null,"add more",-1),_=t("strong",null,"to skip the current instance",-1),f=t("strong",null,"deselect",-1),g=t("h2",{id:"transforming-multiple-selections-into-lines",tabindex:"-1"},[e("Transforming Multiple Selections into Lines "),t("a",{class:"header-anchor",href:"#transforming-multiple-selections-into-lines","aria-label":'Permalink to "Transforming Multiple Selections into Lines"'},"​")],-1),b=t("p",null,"You can copy multiple selected lines to a separate buffer, edit them there, select the content again as multiple lines and then paste them back into place in the first buffer.",-1),k=t("h2",{id:"column-selection",tabindex:"-1"},[e("Column Selection "),t("a",{class:"header-anchor",href:"#column-selection","aria-label":'Permalink to "Column Selection"'},"​")],-1),y=t("p",null,"You can select a rectangular area of a file. Column selection makes use of multiple selections.",-1),x=t("p",null,"It's possible to add blocks of text to or remove them from the selection.",-1),S=t("h3",{id:"using-the-mouse",tabindex:"-1"},[e("Using the Mouse "),t("a",{class:"header-anchor",href:"#using-the-mouse","aria-label":'Permalink to "Using the Mouse"'},"​")],-1),w=t("p",null,[t("strong",null,"Windows & Linux")],-1),T=t("thead",null,[t("tr",null,[t("th",null,"Description"),t("th",null,"Shortcut")])],-1),P=t("td",null,"Select Block",-1),M=t("td",null,"Add to Selection",-1),A=t("td",null,"Remove from Selection",-1),B=t("p",null,[t("strong",null,"macOS")],-1),E=t("thead",null,[t("tr",null,[t("th",null,"Description"),t("th",null,"Shortcut")])],-1),v=t("td",null,"Select Block",-1),N=t("td",null,"Add to Selection",-1),R=t("td",null,"Remove from Selection",-1),L=t("h3",{id:"using-the-keyboard",tabindex:"-1"},[e("Using the Keyboard "),t("a",{class:"header-anchor",href:"#using-the-keyboard","aria-label":'Permalink to "Using the Keyboard"'},"​")],-1),C=t("thead",null,[t("tr",null,[t("th",null,"System"),t("th",null,"Shortcut")])],-1),D=t("td",null,"Windows",-1),I=t("td",null,"Linux",-1),U=t("td",null,"macOS",-1),V=t("h2",{id:"other-ways-of-selecting-text",tabindex:"-1"},[e("Other Ways of Selecting Text "),t("a",{class:"header-anchor",href:"#other-ways-of-selecting-text","aria-label":'Permalink to "Other Ways of Selecting Text"'},"​")],-1),O=t("p",null,[e("The list is long; all available options can be found under "),t("strong",null,"Selection"),e(". To name a few:")],-1),K=t("h2",{id:"transposing-things",tabindex:"-1"},[e("Transposing Things "),t("a",{class:"header-anchor",href:"#transposing-things","aria-label":'Permalink to "Transposing Things"'},"​")],-1),W=t("p",null,"Need to swap two letters or, better yet, two words? Experiment with",-1),Y=t("h2",{id:"arithmetic",tabindex:"-1"},[e("Arithmetic "),t("a",{class:"header-anchor",href:"#arithmetic","aria-label":'Permalink to "Arithmetic"'},"​")],-1),$=r("",8);function j(q,F,G,J,z,H){const n=s("Key");return i(),a("div",null,[c,h,u,m,t("p",null,[e("Select some text and press "),l(n,{k:"ctrl+D"}),e(" to "),p,e(" instances. If you want "),_,e(", press "),l(n,{k:"ctrl+k, ctrl+d"}),e(".")]),t("p",null,[e("If you go too far, press "),l(n,{k:"ctrl+U"}),e(" to "),f,e(" the current instance.")]),g,l(n,{k:"ctrl+l"}),e(" expands the selections to the end of the line."),l(n,{k:"ctrl+shift+l"}),e(" splits the selections into lines."),b,k,y,x,S,w,t("table",null,[T,t("tbody",null,[t("tr",null,[P,t("td",null,[l(n,{k:"shift"}),e(" + Right Mouse Button")])]),t("tr",null,[M,t("td",null,[l(n,{k:"ctrl+shift"}),e(" + Right Mouse Button")])]),t("tr",null,[A,t("td",null,[l(n,{k:"alt+shift"}),e(" + Right Mouse Button")])])])]),B,t("table",null,[E,t("tbody",null,[t("tr",null,[v,t("td",null,[l(n,{k:"option"}),e(" + Left Mouse Button")])]),t("tr",null,[N,t("td",null,[l(n,{k:"option+command"}),e(" + Left Mouse Button")])]),t("tr",null,[R,t("td",null,[l(n,{k:"option+shift+command"}),e(" + Left Mouse Button")])])])]),L,t("table",null,[C,t("tbody",null,[t("tr",null,[D,t("td",null,[l(n,{k:"ctrl+alt+up"}),e(" and "),l(n,{k:"ctrl+alt+down"})])]),t("tr",null,[I,t("td",null,[l(n,{k:"alt+shift+up"}),e(" and "),l(n,{k:"alt+shift+down"})])]),t("tr",null,[U,t("td",null,[l(n,{k:"ctrl+shift+up"}),e(" and "),l(n,{k:"ctrl+shift+down"})])])])]),V,O,t("ul",null,[t("li",null,[e("Select subwords ("),l(n,{k:"alt+shift+left"}),e(" and "),l(n,{k:"alt+shift+right"}),e(")")]),t("li",null,[e("Expand selection to brackets ("),l(n,{k:"ctrl+shift+m"}),e(")")]),t("li",null,[e("Expand selection to indentation ("),l(n,{k:"ctrl+shift+j"}),e(")")]),t("li",null,[e("Expand selection to scope ("),l(n,{k:"ctrl+shift+space"}),e(")")])]),K,W,l(n,{k:"ctrl+t"}),e("."),Y,t("p",null,[e("Need to create a series of numbers? Try "),l(n,{k:"ctrl+shift+p"}),e(' and "Arithmetic".')]),$])}const Z=o(d,[["render",j]]);export{X as __pageData,Z as default}; +import{_ as o,D as s,o as i,c as a,k as t,a as e,I as l,R as r}from"./chunks/framework.e02z-eDF.js";const X=JSON.parse('{"title":"Editing","description":"","frontmatter":{"title":"Editing"},"headers":[],"relativePath":"guide/usage/editing.md","filePath":"guide/usage/editing.md","lastUpdated":1703774098000}'),d={name:"guide/usage/editing.md"},c=t("h1",{id:"editing",tabindex:"-1"},[e("Editing "),t("a",{class:"header-anchor",href:"#editing","aria-label":'Permalink to "Editing"'},"​")],-1),h=t("p",null,"Sublime Text is brim-full of editing features. This topic just scratches the surface of what's possible.",-1),u=t("h2",{id:"multiple-selections",tabindex:"-1"},[e("Multiple Selections "),t("a",{class:"header-anchor",href:"#multiple-selections","aria-label":'Permalink to "Multiple Selections"'},"​")],-1),m=t("p",null,"Multiple selections let you make sweeping changes to your text efficiently. Any praise about multiple selections is an understatement. This is why:",-1),p=t("strong",null,"add more",-1),_=t("strong",null,"to skip the current instance",-1),f=t("strong",null,"deselect",-1),g=t("h2",{id:"transforming-multiple-selections-into-lines",tabindex:"-1"},[e("Transforming Multiple Selections into Lines "),t("a",{class:"header-anchor",href:"#transforming-multiple-selections-into-lines","aria-label":'Permalink to "Transforming Multiple Selections into Lines"'},"​")],-1),b=t("p",null,"You can copy multiple selected lines to a separate buffer, edit them there, select the content again as multiple lines and then paste them back into place in the first buffer.",-1),k=t("h2",{id:"column-selection",tabindex:"-1"},[e("Column Selection "),t("a",{class:"header-anchor",href:"#column-selection","aria-label":'Permalink to "Column Selection"'},"​")],-1),y=t("p",null,"You can select a rectangular area of a file. Column selection makes use of multiple selections.",-1),x=t("p",null,"It's possible to add blocks of text to or remove them from the selection.",-1),S=t("h3",{id:"using-the-mouse",tabindex:"-1"},[e("Using the Mouse "),t("a",{class:"header-anchor",href:"#using-the-mouse","aria-label":'Permalink to "Using the Mouse"'},"​")],-1),w=t("p",null,[t("strong",null,"Windows & Linux")],-1),T=t("thead",null,[t("tr",null,[t("th",null,"Description"),t("th",null,"Shortcut")])],-1),P=t("td",null,"Select Block",-1),M=t("td",null,"Add to Selection",-1),A=t("td",null,"Remove from Selection",-1),B=t("p",null,[t("strong",null,"macOS")],-1),E=t("thead",null,[t("tr",null,[t("th",null,"Description"),t("th",null,"Shortcut")])],-1),v=t("td",null,"Select Block",-1),N=t("td",null,"Add to Selection",-1),R=t("td",null,"Remove from Selection",-1),L=t("h3",{id:"using-the-keyboard",tabindex:"-1"},[e("Using the Keyboard "),t("a",{class:"header-anchor",href:"#using-the-keyboard","aria-label":'Permalink to "Using the Keyboard"'},"​")],-1),C=t("thead",null,[t("tr",null,[t("th",null,"System"),t("th",null,"Shortcut")])],-1),D=t("td",null,"Windows",-1),I=t("td",null,"Linux",-1),U=t("td",null,"macOS",-1),V=t("h2",{id:"other-ways-of-selecting-text",tabindex:"-1"},[e("Other Ways of Selecting Text "),t("a",{class:"header-anchor",href:"#other-ways-of-selecting-text","aria-label":'Permalink to "Other Ways of Selecting Text"'},"​")],-1),O=t("p",null,[e("The list is long; all available options can be found under "),t("strong",null,"Selection"),e(". To name a few:")],-1),K=t("h2",{id:"transposing-things",tabindex:"-1"},[e("Transposing Things "),t("a",{class:"header-anchor",href:"#transposing-things","aria-label":'Permalink to "Transposing Things"'},"​")],-1),W=t("p",null,"Need to swap two letters or, better yet, two words? Experiment with",-1),Y=t("h2",{id:"arithmetic",tabindex:"-1"},[e("Arithmetic "),t("a",{class:"header-anchor",href:"#arithmetic","aria-label":'Permalink to "Arithmetic"'},"​")],-1),$=r("",8);function j(q,F,G,J,z,H){const n=s("Key");return i(),a("div",null,[c,h,u,m,t("p",null,[e("Select some text and press "),l(n,{k:"ctrl+D"}),e(" to "),p,e(" instances. If you want "),_,e(", press "),l(n,{k:"ctrl+k, ctrl+d"}),e(".")]),t("p",null,[e("If you go too far, press "),l(n,{k:"ctrl+U"}),e(" to "),f,e(" the current instance.")]),g,l(n,{k:"ctrl+l"}),e(" expands the selections to the end of the line."),l(n,{k:"ctrl+shift+l"}),e(" splits the selections into lines."),b,k,y,x,S,w,t("table",null,[T,t("tbody",null,[t("tr",null,[P,t("td",null,[l(n,{k:"shift"}),e(" + Right Mouse Button")])]),t("tr",null,[M,t("td",null,[l(n,{k:"ctrl+shift"}),e(" + Right Mouse Button")])]),t("tr",null,[A,t("td",null,[l(n,{k:"alt+shift"}),e(" + Right Mouse Button")])])])]),B,t("table",null,[E,t("tbody",null,[t("tr",null,[v,t("td",null,[l(n,{k:"option"}),e(" + Left Mouse Button")])]),t("tr",null,[N,t("td",null,[l(n,{k:"option+command"}),e(" + Left Mouse Button")])]),t("tr",null,[R,t("td",null,[l(n,{k:"option+shift+command"}),e(" + Left Mouse Button")])])])]),L,t("table",null,[C,t("tbody",null,[t("tr",null,[D,t("td",null,[l(n,{k:"ctrl+alt+up"}),e(" and "),l(n,{k:"ctrl+alt+down"})])]),t("tr",null,[I,t("td",null,[l(n,{k:"alt+shift+up"}),e(" and "),l(n,{k:"alt+shift+down"})])]),t("tr",null,[U,t("td",null,[l(n,{k:"ctrl+shift+up"}),e(" and "),l(n,{k:"ctrl+shift+down"})])])])]),V,O,t("ul",null,[t("li",null,[e("Select subwords ("),l(n,{k:"alt+shift+left"}),e(" and "),l(n,{k:"alt+shift+right"}),e(")")]),t("li",null,[e("Expand selection to brackets ("),l(n,{k:"ctrl+shift+m"}),e(")")]),t("li",null,[e("Expand selection to indentation ("),l(n,{k:"ctrl+shift+j"}),e(")")]),t("li",null,[e("Expand selection to scope ("),l(n,{k:"ctrl+shift+space"}),e(")")])]),K,W,l(n,{k:"ctrl+t"}),e("."),Y,t("p",null,[e("Need to create a series of numbers? Try "),l(n,{k:"ctrl+shift+p"}),e(' and "Arithmetic".')]),$])}const Z=o(d,[["render",j]]);export{X as __pageData,Z as default}; diff --git a/assets/guide_usage_file-management_index.md.bApegwB0.js b/assets/guide_usage_file-management_index.md.3T-rFP3g.js similarity index 92% rename from assets/guide_usage_file-management_index.md.bApegwB0.js rename to assets/guide_usage_file-management_index.md.3T-rFP3g.js index da821285..e57dcfb5 100644 --- a/assets/guide_usage_file-management_index.md.bApegwB0.js +++ b/assets/guide_usage_file-management_index.md.3T-rFP3g.js @@ -1 +1 @@ -import{_ as a,o as t,c as n,k as e,a as i}from"./chunks/framework.e02z-eDF.js";const h=JSON.parse('{"title":"File Management & Navigation","description":"","frontmatter":{"title":"File Management & Navigation"},"headers":[],"relativePath":"guide/usage/file-management/index.md","filePath":"guide/usage/file-management/index.md","lastUpdated":1703773698000}'),o={name:"guide/usage/file-management/index.md"},r=e("h1",{id:"file-management-navigation",tabindex:"-1"},[i("File Management & Navigation "),e("a",{class:"header-anchor",href:"#file-management-navigation","aria-label":'Permalink to "File Management & Navigation"'},"​")],-1),s=e("p",null,"Sublime Text includes a variety of features to help you keep your work organized and find your way around your projects.",-1),d=[r,s];function l(m,c,g,u,f,_){return t(),n("div",null,d)}const x=a(o,[["render",l]]);export{h as __pageData,x as default}; +import{_ as a,o as t,c as n,k as e,a as i}from"./chunks/framework.e02z-eDF.js";const h=JSON.parse('{"title":"File Management & Navigation","description":"","frontmatter":{"title":"File Management & Navigation"},"headers":[],"relativePath":"guide/usage/file-management/index.md","filePath":"guide/usage/file-management/index.md","lastUpdated":1703774098000}'),o={name:"guide/usage/file-management/index.md"},r=e("h1",{id:"file-management-navigation",tabindex:"-1"},[i("File Management & Navigation "),e("a",{class:"header-anchor",href:"#file-management-navigation","aria-label":'Permalink to "File Management & Navigation"'},"​")],-1),s=e("p",null,"Sublime Text includes a variety of features to help you keep your work organized and find your way around your projects.",-1),d=[r,s];function l(m,c,g,u,f,_){return t(),n("div",null,d)}const x=a(o,[["render",l]]);export{h as __pageData,x as default}; diff --git a/assets/guide_usage_file-management_index.md.bApegwB0.lean.js b/assets/guide_usage_file-management_index.md.3T-rFP3g.lean.js similarity index 92% rename from assets/guide_usage_file-management_index.md.bApegwB0.lean.js rename to assets/guide_usage_file-management_index.md.3T-rFP3g.lean.js index da821285..e57dcfb5 100644 --- a/assets/guide_usage_file-management_index.md.bApegwB0.lean.js +++ b/assets/guide_usage_file-management_index.md.3T-rFP3g.lean.js @@ -1 +1 @@ -import{_ as a,o as t,c as n,k as e,a as i}from"./chunks/framework.e02z-eDF.js";const h=JSON.parse('{"title":"File Management & Navigation","description":"","frontmatter":{"title":"File Management & Navigation"},"headers":[],"relativePath":"guide/usage/file-management/index.md","filePath":"guide/usage/file-management/index.md","lastUpdated":1703773698000}'),o={name:"guide/usage/file-management/index.md"},r=e("h1",{id:"file-management-navigation",tabindex:"-1"},[i("File Management & Navigation "),e("a",{class:"header-anchor",href:"#file-management-navigation","aria-label":'Permalink to "File Management & Navigation"'},"​")],-1),s=e("p",null,"Sublime Text includes a variety of features to help you keep your work organized and find your way around your projects.",-1),d=[r,s];function l(m,c,g,u,f,_){return t(),n("div",null,d)}const x=a(o,[["render",l]]);export{h as __pageData,x as default}; +import{_ as a,o as t,c as n,k as e,a as i}from"./chunks/framework.e02z-eDF.js";const h=JSON.parse('{"title":"File Management & Navigation","description":"","frontmatter":{"title":"File Management & Navigation"},"headers":[],"relativePath":"guide/usage/file-management/index.md","filePath":"guide/usage/file-management/index.md","lastUpdated":1703774098000}'),o={name:"guide/usage/file-management/index.md"},r=e("h1",{id:"file-management-navigation",tabindex:"-1"},[i("File Management & Navigation "),e("a",{class:"header-anchor",href:"#file-management-navigation","aria-label":'Permalink to "File Management & Navigation"'},"​")],-1),s=e("p",null,"Sublime Text includes a variety of features to help you keep your work organized and find your way around your projects.",-1),d=[r,s];function l(m,c,g,u,f,_){return t(),n("div",null,d)}const x=a(o,[["render",l]]);export{h as __pageData,x as default}; diff --git a/assets/guide_usage_file-management_navigation.md.0p963Cri.js b/assets/guide_usage_file-management_navigation.md.BOTCf4_c.js similarity index 99% rename from assets/guide_usage_file-management_navigation.md.0p963Cri.js rename to assets/guide_usage_file-management_navigation.md.BOTCf4_c.js index a92fe18d..f830c918 100644 --- a/assets/guide_usage_file-management_navigation.md.0p963Cri.js +++ b/assets/guide_usage_file-management_navigation.md.BOTCf4_c.js @@ -1 +1 @@ -import{_ as l,D as s,o as i,c as r,k as e,I as o,a as n,R as a}from"./chunks/framework.e02z-eDF.js";const c="/assets/goto.pLPgWo5q.png",h="/assets/goto-details.3ZU8JcZU.png",ee=JSON.parse('{"title":"Navigation","description":"","frontmatter":{"title":"Navigation"},"headers":[],"relativePath":"guide/usage/file-management/navigation.md","filePath":"guide/usage/file-management/navigation.md","lastUpdated":1703773698000}'),d={name:"guide/usage/file-management/navigation.md"},u=a('

Navigation

Goto Anything

Using Goto Anything, you can navigate your project's files swiftly.

Goto Anything

Keyboard shortcuts related to Goto Anything:

',5),p=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),m=e("td",null,[e("strong",null,"Open Goto Anything")],-1),_=e("td",null,"Open current item",-1),g=e("td",null,"Open current item and keep panel open",-1),b=e("td",null,"Close Goto Anything",-1),f=a('

As you type into Goto Anything's input area, names of files in the current project will be searched, and a preview of the best match will be shown. This preview is transient; that is, it won't become the actual active view until you perform some operation on it. You will find transient views in other situations, for example, after clicking on a file in the sidebar.

Goto Anything lives up to its name – there's more to it than locating files.

Goto Anything Operators

Goto Anything accepts several operators. All of them can be used on their own or after the search term.

Example:

models:100

This instructs Sublime Text to first search for a file whose path matches models, and then to go to line 100 in said file.

Supported Operators

@symbol : Searches the active file for the symbol named symbol.

Note

Symbols usually include class and function names.

Symbol searches will only yield results if the active file type has symbols defined for it. For more information about symbols, see Symbols.

#term : Performs a fuzzy search of the term search term and highlights all matches.

:line_number : Goes to the specified line_number, or to the end of the file if line_number is larger that the file's line count.

The Goto Anything operators are bound to the following shortcuts:

',13),y=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),v=e("td",null,[e("strong",null,"@")],-1),w=e("td",null,[e("strong",null,"#")],-1),k=e("td",null,[e("strong",null,":")],-1),A=e("h3",{id:"goto-symbol-in-project",tabindex:"-1"},[n("Goto Symbol In Project "),e("a",{class:"header-anchor",href:"#goto-symbol-in-project","aria-label":'Permalink to "Goto Symbol In Project"'},"​")],-1),T=e("em",null,"current",-1),S=e("em",null,"every file",-1),P=e("h2",{id:"sidebar",tabindex:"-1"},[n("Sidebar "),e("a",{class:"header-anchor",href:"#sidebar","aria-label":'Permalink to "Sidebar"'},"​")],-1),G=e("p",null,[n("The sidebar provides an overview of the active project (more on projects later). Files and folders in the sidebar will be available in "),e("a",{href:"#goto-anything"},"Goto Anything"),n(" and project-wide actions like, for example, project-wide searches.")],-1),x=e("p",null,"Projects and the sidebar are closely related. It's important to note that there's always an active project; if you haven't opened a project file, an anonymous project will be used instead.",-1),j=e("p",null,"The sidebar provides basic file management operations through its context menu.",-1),N=e("p",null,"These are common keyboard shortcuts related to the side bar:",-1),I=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),C=e("td",null,[e("strong",null,"Toggle side bar")],-1),V=e("td",null,"Give the focus to the side bar",-1),q=e("td",null,"Return the focus to the view",-1),D=e("tr",null,[e("td",null,"Navigate side bar"),e("td",null,"Arrow keys")],-1),O=e("p",null,[n("Files opened from the sidebar create "),e("em",null,"semi-transient"),n(" views. Unlike transient views, semi-transient views show up as a new tab. The tab title of semi-transient views appears in italics. Before a new semi-transient view is opened, any other pre-existing semi-transient view in the same pane gets automatically closed.")],-1),U=e("p",null,"Here's an example showing a normal view, a transient view, and a semi-transient view. Notice that the transient view has no tab:",-1),B=e("p",null,[e("img",{src:h,alt:"Goto Anything - Transient Views"})],-1),E=e("h2",{id:"panes",tabindex:"-1"},[n("Panes "),e("a",{class:"header-anchor",href:"#panes","aria-label":'Permalink to "Panes"'},"​")],-1),F=e("p",null,"Panes are groups of views. In Sublime Text, you can have multiple panes open at the same time.",-1),R=e("p",null,"Main keyboard shortcuts related to panes:",-1),$=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),K=e("td",null,"Create new pane",-1),z=e("td",null,"Close active pane",-1),J=e("p",null,[n("Further pane management commands can be found under "),e("strong",null,"View → Layout"),n(" and related submenus.")],-1);function L(Z,H,M,W,Y,Q){const t=s("Key");return i(),r("div",null,[u,e("table",null,[p,e("tbody",null,[e("tr",null,[m,e("td",null,[o(t,{k:"ctrl+p"})])]),e("tr",null,[_,e("td",null,[o(t,{k:"enter"})])]),e("tr",null,[g,e("td",null,[o(t,{k:"right"})])]),e("tr",null,[b,e("td",null,[o(t,{k:"escape"})])])])]),f,e("table",null,[y,e("tbody",null,[e("tr",null,[v,e("td",null,[o(t,{k:"ctrl+r"})])]),e("tr",null,[w,e("td",null,[o(t,{k:"ctrl+;"})])]),e("tr",null,[k,e("td",null,[o(t,{k:"ctrl+g"})])])])]),A,e("p",null,[n("The Goto Anything shortcuts navigate the "),T,n(" file. If you have a project open, you can press "),o(t,{k:"ctrl+shift+r"}),n(" to launch Goto Anything In Project. This command will search for symbols across "),S,n(" in your project.")]),P,G,x,j,N,e("table",null,[I,e("tbody",null,[e("tr",null,[C,e("td",null,[o(t,{k:"ctrl+k, ctrl+b"})])]),e("tr",null,[V,e("td",null,[o(t,{k:"ctrl+0"})])]),e("tr",null,[q,e("td",null,[o(t,{k:"escape"})])]),D])]),O,U,B,E,F,R,e("table",null,[$,e("tbody",null,[e("tr",null,[K,e("td",null,[o(t,{k:"ctrl+k, ctrl+up"})])]),e("tr",null,[z,e("td",null,[o(t,{k:"ctrl+k, ctrl+down"})])])])]),J])}const te=l(d,[["render",L]]);export{ee as __pageData,te as default}; +import{_ as l,D as s,o as i,c as r,k as e,I as o,a as n,R as a}from"./chunks/framework.e02z-eDF.js";const c="/assets/goto.pLPgWo5q.png",h="/assets/goto-details.3ZU8JcZU.png",ee=JSON.parse('{"title":"Navigation","description":"","frontmatter":{"title":"Navigation"},"headers":[],"relativePath":"guide/usage/file-management/navigation.md","filePath":"guide/usage/file-management/navigation.md","lastUpdated":1703774098000}'),d={name:"guide/usage/file-management/navigation.md"},u=a('

Navigation

Goto Anything

Using Goto Anything, you can navigate your project's files swiftly.

Goto Anything

Keyboard shortcuts related to Goto Anything:

',5),p=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),m=e("td",null,[e("strong",null,"Open Goto Anything")],-1),_=e("td",null,"Open current item",-1),g=e("td",null,"Open current item and keep panel open",-1),b=e("td",null,"Close Goto Anything",-1),f=a('

As you type into Goto Anything's input area, names of files in the current project will be searched, and a preview of the best match will be shown. This preview is transient; that is, it won't become the actual active view until you perform some operation on it. You will find transient views in other situations, for example, after clicking on a file in the sidebar.

Goto Anything lives up to its name – there's more to it than locating files.

Goto Anything Operators

Goto Anything accepts several operators. All of them can be used on their own or after the search term.

Example:

models:100

This instructs Sublime Text to first search for a file whose path matches models, and then to go to line 100 in said file.

Supported Operators

@symbol : Searches the active file for the symbol named symbol.

Note

Symbols usually include class and function names.

Symbol searches will only yield results if the active file type has symbols defined for it. For more information about symbols, see Symbols.

#term : Performs a fuzzy search of the term search term and highlights all matches.

:line_number : Goes to the specified line_number, or to the end of the file if line_number is larger that the file's line count.

The Goto Anything operators are bound to the following shortcuts:

',13),y=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),v=e("td",null,[e("strong",null,"@")],-1),w=e("td",null,[e("strong",null,"#")],-1),k=e("td",null,[e("strong",null,":")],-1),A=e("h3",{id:"goto-symbol-in-project",tabindex:"-1"},[n("Goto Symbol In Project "),e("a",{class:"header-anchor",href:"#goto-symbol-in-project","aria-label":'Permalink to "Goto Symbol In Project"'},"​")],-1),T=e("em",null,"current",-1),S=e("em",null,"every file",-1),P=e("h2",{id:"sidebar",tabindex:"-1"},[n("Sidebar "),e("a",{class:"header-anchor",href:"#sidebar","aria-label":'Permalink to "Sidebar"'},"​")],-1),G=e("p",null,[n("The sidebar provides an overview of the active project (more on projects later). Files and folders in the sidebar will be available in "),e("a",{href:"#goto-anything"},"Goto Anything"),n(" and project-wide actions like, for example, project-wide searches.")],-1),x=e("p",null,"Projects and the sidebar are closely related. It's important to note that there's always an active project; if you haven't opened a project file, an anonymous project will be used instead.",-1),j=e("p",null,"The sidebar provides basic file management operations through its context menu.",-1),N=e("p",null,"These are common keyboard shortcuts related to the side bar:",-1),I=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),C=e("td",null,[e("strong",null,"Toggle side bar")],-1),V=e("td",null,"Give the focus to the side bar",-1),q=e("td",null,"Return the focus to the view",-1),D=e("tr",null,[e("td",null,"Navigate side bar"),e("td",null,"Arrow keys")],-1),O=e("p",null,[n("Files opened from the sidebar create "),e("em",null,"semi-transient"),n(" views. Unlike transient views, semi-transient views show up as a new tab. The tab title of semi-transient views appears in italics. Before a new semi-transient view is opened, any other pre-existing semi-transient view in the same pane gets automatically closed.")],-1),U=e("p",null,"Here's an example showing a normal view, a transient view, and a semi-transient view. Notice that the transient view has no tab:",-1),B=e("p",null,[e("img",{src:h,alt:"Goto Anything - Transient Views"})],-1),E=e("h2",{id:"panes",tabindex:"-1"},[n("Panes "),e("a",{class:"header-anchor",href:"#panes","aria-label":'Permalink to "Panes"'},"​")],-1),F=e("p",null,"Panes are groups of views. In Sublime Text, you can have multiple panes open at the same time.",-1),R=e("p",null,"Main keyboard shortcuts related to panes:",-1),$=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),K=e("td",null,"Create new pane",-1),z=e("td",null,"Close active pane",-1),J=e("p",null,[n("Further pane management commands can be found under "),e("strong",null,"View → Layout"),n(" and related submenus.")],-1);function L(Z,H,M,W,Y,Q){const t=s("Key");return i(),r("div",null,[u,e("table",null,[p,e("tbody",null,[e("tr",null,[m,e("td",null,[o(t,{k:"ctrl+p"})])]),e("tr",null,[_,e("td",null,[o(t,{k:"enter"})])]),e("tr",null,[g,e("td",null,[o(t,{k:"right"})])]),e("tr",null,[b,e("td",null,[o(t,{k:"escape"})])])])]),f,e("table",null,[y,e("tbody",null,[e("tr",null,[v,e("td",null,[o(t,{k:"ctrl+r"})])]),e("tr",null,[w,e("td",null,[o(t,{k:"ctrl+;"})])]),e("tr",null,[k,e("td",null,[o(t,{k:"ctrl+g"})])])])]),A,e("p",null,[n("The Goto Anything shortcuts navigate the "),T,n(" file. If you have a project open, you can press "),o(t,{k:"ctrl+shift+r"}),n(" to launch Goto Anything In Project. This command will search for symbols across "),S,n(" in your project.")]),P,G,x,j,N,e("table",null,[I,e("tbody",null,[e("tr",null,[C,e("td",null,[o(t,{k:"ctrl+k, ctrl+b"})])]),e("tr",null,[V,e("td",null,[o(t,{k:"ctrl+0"})])]),e("tr",null,[q,e("td",null,[o(t,{k:"escape"})])]),D])]),O,U,B,E,F,R,e("table",null,[$,e("tbody",null,[e("tr",null,[K,e("td",null,[o(t,{k:"ctrl+k, ctrl+up"})])]),e("tr",null,[z,e("td",null,[o(t,{k:"ctrl+k, ctrl+down"})])])])]),J])}const te=l(d,[["render",L]]);export{ee as __pageData,te as default}; diff --git a/assets/guide_usage_file-management_navigation.md.0p963Cri.lean.js b/assets/guide_usage_file-management_navigation.md.BOTCf4_c.lean.js similarity index 98% rename from assets/guide_usage_file-management_navigation.md.0p963Cri.lean.js rename to assets/guide_usage_file-management_navigation.md.BOTCf4_c.lean.js index c98d84a1..67a1a193 100644 --- a/assets/guide_usage_file-management_navigation.md.0p963Cri.lean.js +++ b/assets/guide_usage_file-management_navigation.md.BOTCf4_c.lean.js @@ -1 +1 @@ -import{_ as l,D as s,o as i,c as r,k as e,I as o,a as n,R as a}from"./chunks/framework.e02z-eDF.js";const c="/assets/goto.pLPgWo5q.png",h="/assets/goto-details.3ZU8JcZU.png",ee=JSON.parse('{"title":"Navigation","description":"","frontmatter":{"title":"Navigation"},"headers":[],"relativePath":"guide/usage/file-management/navigation.md","filePath":"guide/usage/file-management/navigation.md","lastUpdated":1703773698000}'),d={name:"guide/usage/file-management/navigation.md"},u=a("",5),p=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),m=e("td",null,[e("strong",null,"Open Goto Anything")],-1),_=e("td",null,"Open current item",-1),g=e("td",null,"Open current item and keep panel open",-1),b=e("td",null,"Close Goto Anything",-1),f=a("",13),y=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),v=e("td",null,[e("strong",null,"@")],-1),w=e("td",null,[e("strong",null,"#")],-1),k=e("td",null,[e("strong",null,":")],-1),A=e("h3",{id:"goto-symbol-in-project",tabindex:"-1"},[n("Goto Symbol In Project "),e("a",{class:"header-anchor",href:"#goto-symbol-in-project","aria-label":'Permalink to "Goto Symbol In Project"'},"​")],-1),T=e("em",null,"current",-1),S=e("em",null,"every file",-1),P=e("h2",{id:"sidebar",tabindex:"-1"},[n("Sidebar "),e("a",{class:"header-anchor",href:"#sidebar","aria-label":'Permalink to "Sidebar"'},"​")],-1),G=e("p",null,[n("The sidebar provides an overview of the active project (more on projects later). Files and folders in the sidebar will be available in "),e("a",{href:"#goto-anything"},"Goto Anything"),n(" and project-wide actions like, for example, project-wide searches.")],-1),x=e("p",null,"Projects and the sidebar are closely related. It's important to note that there's always an active project; if you haven't opened a project file, an anonymous project will be used instead.",-1),j=e("p",null,"The sidebar provides basic file management operations through its context menu.",-1),N=e("p",null,"These are common keyboard shortcuts related to the side bar:",-1),I=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),C=e("td",null,[e("strong",null,"Toggle side bar")],-1),V=e("td",null,"Give the focus to the side bar",-1),q=e("td",null,"Return the focus to the view",-1),D=e("tr",null,[e("td",null,"Navigate side bar"),e("td",null,"Arrow keys")],-1),O=e("p",null,[n("Files opened from the sidebar create "),e("em",null,"semi-transient"),n(" views. Unlike transient views, semi-transient views show up as a new tab. The tab title of semi-transient views appears in italics. Before a new semi-transient view is opened, any other pre-existing semi-transient view in the same pane gets automatically closed.")],-1),U=e("p",null,"Here's an example showing a normal view, a transient view, and a semi-transient view. Notice that the transient view has no tab:",-1),B=e("p",null,[e("img",{src:h,alt:"Goto Anything - Transient Views"})],-1),E=e("h2",{id:"panes",tabindex:"-1"},[n("Panes "),e("a",{class:"header-anchor",href:"#panes","aria-label":'Permalink to "Panes"'},"​")],-1),F=e("p",null,"Panes are groups of views. In Sublime Text, you can have multiple panes open at the same time.",-1),R=e("p",null,"Main keyboard shortcuts related to panes:",-1),$=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),K=e("td",null,"Create new pane",-1),z=e("td",null,"Close active pane",-1),J=e("p",null,[n("Further pane management commands can be found under "),e("strong",null,"View → Layout"),n(" and related submenus.")],-1);function L(Z,H,M,W,Y,Q){const t=s("Key");return i(),r("div",null,[u,e("table",null,[p,e("tbody",null,[e("tr",null,[m,e("td",null,[o(t,{k:"ctrl+p"})])]),e("tr",null,[_,e("td",null,[o(t,{k:"enter"})])]),e("tr",null,[g,e("td",null,[o(t,{k:"right"})])]),e("tr",null,[b,e("td",null,[o(t,{k:"escape"})])])])]),f,e("table",null,[y,e("tbody",null,[e("tr",null,[v,e("td",null,[o(t,{k:"ctrl+r"})])]),e("tr",null,[w,e("td",null,[o(t,{k:"ctrl+;"})])]),e("tr",null,[k,e("td",null,[o(t,{k:"ctrl+g"})])])])]),A,e("p",null,[n("The Goto Anything shortcuts navigate the "),T,n(" file. If you have a project open, you can press "),o(t,{k:"ctrl+shift+r"}),n(" to launch Goto Anything In Project. This command will search for symbols across "),S,n(" in your project.")]),P,G,x,j,N,e("table",null,[I,e("tbody",null,[e("tr",null,[C,e("td",null,[o(t,{k:"ctrl+k, ctrl+b"})])]),e("tr",null,[V,e("td",null,[o(t,{k:"ctrl+0"})])]),e("tr",null,[q,e("td",null,[o(t,{k:"escape"})])]),D])]),O,U,B,E,F,R,e("table",null,[$,e("tbody",null,[e("tr",null,[K,e("td",null,[o(t,{k:"ctrl+k, ctrl+up"})])]),e("tr",null,[z,e("td",null,[o(t,{k:"ctrl+k, ctrl+down"})])])])]),J])}const te=l(d,[["render",L]]);export{ee as __pageData,te as default}; +import{_ as l,D as s,o as i,c as r,k as e,I as o,a as n,R as a}from"./chunks/framework.e02z-eDF.js";const c="/assets/goto.pLPgWo5q.png",h="/assets/goto-details.3ZU8JcZU.png",ee=JSON.parse('{"title":"Navigation","description":"","frontmatter":{"title":"Navigation"},"headers":[],"relativePath":"guide/usage/file-management/navigation.md","filePath":"guide/usage/file-management/navigation.md","lastUpdated":1703774098000}'),d={name:"guide/usage/file-management/navigation.md"},u=a("",5),p=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),m=e("td",null,[e("strong",null,"Open Goto Anything")],-1),_=e("td",null,"Open current item",-1),g=e("td",null,"Open current item and keep panel open",-1),b=e("td",null,"Close Goto Anything",-1),f=a("",13),y=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),v=e("td",null,[e("strong",null,"@")],-1),w=e("td",null,[e("strong",null,"#")],-1),k=e("td",null,[e("strong",null,":")],-1),A=e("h3",{id:"goto-symbol-in-project",tabindex:"-1"},[n("Goto Symbol In Project "),e("a",{class:"header-anchor",href:"#goto-symbol-in-project","aria-label":'Permalink to "Goto Symbol In Project"'},"​")],-1),T=e("em",null,"current",-1),S=e("em",null,"every file",-1),P=e("h2",{id:"sidebar",tabindex:"-1"},[n("Sidebar "),e("a",{class:"header-anchor",href:"#sidebar","aria-label":'Permalink to "Sidebar"'},"​")],-1),G=e("p",null,[n("The sidebar provides an overview of the active project (more on projects later). Files and folders in the sidebar will be available in "),e("a",{href:"#goto-anything"},"Goto Anything"),n(" and project-wide actions like, for example, project-wide searches.")],-1),x=e("p",null,"Projects and the sidebar are closely related. It's important to note that there's always an active project; if you haven't opened a project file, an anonymous project will be used instead.",-1),j=e("p",null,"The sidebar provides basic file management operations through its context menu.",-1),N=e("p",null,"These are common keyboard shortcuts related to the side bar:",-1),I=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),C=e("td",null,[e("strong",null,"Toggle side bar")],-1),V=e("td",null,"Give the focus to the side bar",-1),q=e("td",null,"Return the focus to the view",-1),D=e("tr",null,[e("td",null,"Navigate side bar"),e("td",null,"Arrow keys")],-1),O=e("p",null,[n("Files opened from the sidebar create "),e("em",null,"semi-transient"),n(" views. Unlike transient views, semi-transient views show up as a new tab. The tab title of semi-transient views appears in italics. Before a new semi-transient view is opened, any other pre-existing semi-transient view in the same pane gets automatically closed.")],-1),U=e("p",null,"Here's an example showing a normal view, a transient view, and a semi-transient view. Notice that the transient view has no tab:",-1),B=e("p",null,[e("img",{src:h,alt:"Goto Anything - Transient Views"})],-1),E=e("h2",{id:"panes",tabindex:"-1"},[n("Panes "),e("a",{class:"header-anchor",href:"#panes","aria-label":'Permalink to "Panes"'},"​")],-1),F=e("p",null,"Panes are groups of views. In Sublime Text, you can have multiple panes open at the same time.",-1),R=e("p",null,"Main keyboard shortcuts related to panes:",-1),$=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),K=e("td",null,"Create new pane",-1),z=e("td",null,"Close active pane",-1),J=e("p",null,[n("Further pane management commands can be found under "),e("strong",null,"View → Layout"),n(" and related submenus.")],-1);function L(Z,H,M,W,Y,Q){const t=s("Key");return i(),r("div",null,[u,e("table",null,[p,e("tbody",null,[e("tr",null,[m,e("td",null,[o(t,{k:"ctrl+p"})])]),e("tr",null,[_,e("td",null,[o(t,{k:"enter"})])]),e("tr",null,[g,e("td",null,[o(t,{k:"right"})])]),e("tr",null,[b,e("td",null,[o(t,{k:"escape"})])])])]),f,e("table",null,[y,e("tbody",null,[e("tr",null,[v,e("td",null,[o(t,{k:"ctrl+r"})])]),e("tr",null,[w,e("td",null,[o(t,{k:"ctrl+;"})])]),e("tr",null,[k,e("td",null,[o(t,{k:"ctrl+g"})])])])]),A,e("p",null,[n("The Goto Anything shortcuts navigate the "),T,n(" file. If you have a project open, you can press "),o(t,{k:"ctrl+shift+r"}),n(" to launch Goto Anything In Project. This command will search for symbols across "),S,n(" in your project.")]),P,G,x,j,N,e("table",null,[I,e("tbody",null,[e("tr",null,[C,e("td",null,[o(t,{k:"ctrl+k, ctrl+b"})])]),e("tr",null,[V,e("td",null,[o(t,{k:"ctrl+0"})])]),e("tr",null,[q,e("td",null,[o(t,{k:"escape"})])]),D])]),O,U,B,E,F,R,e("table",null,[$,e("tbody",null,[e("tr",null,[K,e("td",null,[o(t,{k:"ctrl+k, ctrl+up"})])]),e("tr",null,[z,e("td",null,[o(t,{k:"ctrl+k, ctrl+down"})])])])]),J])}const te=l(d,[["render",L]]);export{ee as __pageData,te as default}; diff --git a/assets/guide_usage_file-management_projects.md.OEzFsdpY.js b/assets/guide_usage_file-management_projects.md.oJxgU_Ro.js similarity index 99% rename from assets/guide_usage_file-management_projects.md.OEzFsdpY.js rename to assets/guide_usage_file-management_projects.md.oJxgU_Ro.js index dc66332f..b5c8929f 100644 --- a/assets/guide_usage_file-management_projects.md.OEzFsdpY.js +++ b/assets/guide_usage_file-management_projects.md.oJxgU_Ro.js @@ -1 +1 @@ -import{_ as s,D as a,o as i,c as n,k as r,a as e,I as c,R as t}from"./chunks/framework.e02z-eDF.js";const j=JSON.parse('{"title":"Projects","description":"","frontmatter":{"title":"Projects"},"headers":[],"relativePath":"guide/usage/file-management/projects.md","filePath":"guide/usage/file-management/projects.md","lastUpdated":1703773698000}'),d={name:"guide/usage/file-management/projects.md"},l=t('

Projects

Projects group sets of files and folders to keep your work organized. They support project-specific settings and build systems and you can quickly switch between them to continue working where you left off.

Adding folders to a project is necessary for Goto Anything and project-wide Goto Definition.

There is always an active project, even if you haven't created or opened one. In this situation, you are working with an anonymous project, which has limited functionality. New windows always use an anonymous project when they first open.

Project metadata is stored in JSON files with a .sublime-project extension. Wherever there's a .sublime-project file, you will find an ancillary .sublime-workspace file too. The .sublime-workspace file contains session data that you should never edit. (More on workspaces later.)

Note

Generally speaking, it's fine to commit .sublime-project files to a source code repository, but always be mindful of what you store in them.

Creating a Project

Start with an anonymous project by opening a new window or closing any active project with the Project → Close Project menu.

You can add and remove folders to/from a project using the Project menu or the side bar's context menu. If you drag a folder onto a Sublime Text window, it will be added to the project too.

To save an anonymous project, go to Project → Save Project As....

After the project is saved, you can edit it by hand to adjust further options.

Opening Projects

Using the main menu, you can open or switch projects by selecting Project → Open Recent, Project → Switch Project… or Project → Quick Switch Project….

When switching projects, Sublime Text will close the current project and open the specified one in the same window, When opening a project, Sublime Text will open a new window and open the selected project there.

Keyboard shortcuts related to projects:

DescriptionShortcut
Quick Switch Project…Ctrl + Alt + P

Note

The key binding was removed with build 3096 for Windows and must be added manually, if desired. In order to do this, add the following key binding to your user key bindings file:

json
{ "keys": ["ctrl+alt+p"], "command": "prompt_select_workspace" }

Additionally, you can open a project from the command line by passing the .sublime-project file as an argument to the subl command line helper included with Sublime Text.

Advanced Configuration for Project Files

Along with more options for individual directories, projects can have specific build systems or settings overrides.

See Also

Projects - Reference : Documentation on project file format and options.

binary_file_patterns : A list of wildcards. Files matching these wildcards will show up in the side bar, but will be excluded from Goto Anything and Find in Files.

Workspaces

Workspaces hold session data associated with a project, which includes information about the opened files, pane layout, find history and more. A project can have multiple workspaces.

A common use case for workspaces is to work on different features within the same project, where each feature requires a different set of files to be open, and you want to switch between features quickly. In this case you'll want to have a second workspace available. Writing tests could be an example for this.

Workspaces behave very much like projects. To create a new workspace, select Project → New Workspace for Project. To save the active workspace, select Project → Save Workspace As....

The workspace metadata is stored in JSON files with the .sublime-workspace extension, which you are not supposed to edit.

',29),p=t('

As with projects, you can open a workspace from the command line by passing the desired .sublime-workspace file as an argument to the subl command line helper included with Sublime Text.

WARNING

Unlike .sublime-project files, .sublime-workspace files are not meant to be shared or edited manually. You should never commit .sublime-workspace files into a source code repository.

',2);function h(u,m,g,f,k,w){const o=a("Key");return i(),n("div",null,[l,r("p",null,[e("To switch between different workspaces, use "),c(o,{k:"ctrl+alt+p"}),e(", exactly as you do with projects.")]),p])}const y=s(d,[["render",h]]);export{j as __pageData,y as default}; +import{_ as s,D as a,o as i,c as n,k as r,a as e,I as c,R as t}from"./chunks/framework.e02z-eDF.js";const j=JSON.parse('{"title":"Projects","description":"","frontmatter":{"title":"Projects"},"headers":[],"relativePath":"guide/usage/file-management/projects.md","filePath":"guide/usage/file-management/projects.md","lastUpdated":1703774098000}'),d={name:"guide/usage/file-management/projects.md"},l=t('

Projects

Projects group sets of files and folders to keep your work organized. They support project-specific settings and build systems and you can quickly switch between them to continue working where you left off.

Adding folders to a project is necessary for Goto Anything and project-wide Goto Definition.

There is always an active project, even if you haven't created or opened one. In this situation, you are working with an anonymous project, which has limited functionality. New windows always use an anonymous project when they first open.

Project metadata is stored in JSON files with a .sublime-project extension. Wherever there's a .sublime-project file, you will find an ancillary .sublime-workspace file too. The .sublime-workspace file contains session data that you should never edit. (More on workspaces later.)

Note

Generally speaking, it's fine to commit .sublime-project files to a source code repository, but always be mindful of what you store in them.

Creating a Project

Start with an anonymous project by opening a new window or closing any active project with the Project → Close Project menu.

You can add and remove folders to/from a project using the Project menu or the side bar's context menu. If you drag a folder onto a Sublime Text window, it will be added to the project too.

To save an anonymous project, go to Project → Save Project As....

After the project is saved, you can edit it by hand to adjust further options.

Opening Projects

Using the main menu, you can open or switch projects by selecting Project → Open Recent, Project → Switch Project… or Project → Quick Switch Project….

When switching projects, Sublime Text will close the current project and open the specified one in the same window, When opening a project, Sublime Text will open a new window and open the selected project there.

Keyboard shortcuts related to projects:

DescriptionShortcut
Quick Switch Project…Ctrl + Alt + P

Note

The key binding was removed with build 3096 for Windows and must be added manually, if desired. In order to do this, add the following key binding to your user key bindings file:

json
{ "keys": ["ctrl+alt+p"], "command": "prompt_select_workspace" }

Additionally, you can open a project from the command line by passing the .sublime-project file as an argument to the subl command line helper included with Sublime Text.

Advanced Configuration for Project Files

Along with more options for individual directories, projects can have specific build systems or settings overrides.

See Also

Projects - Reference : Documentation on project file format and options.

binary_file_patterns : A list of wildcards. Files matching these wildcards will show up in the side bar, but will be excluded from Goto Anything and Find in Files.

Workspaces

Workspaces hold session data associated with a project, which includes information about the opened files, pane layout, find history and more. A project can have multiple workspaces.

A common use case for workspaces is to work on different features within the same project, where each feature requires a different set of files to be open, and you want to switch between features quickly. In this case you'll want to have a second workspace available. Writing tests could be an example for this.

Workspaces behave very much like projects. To create a new workspace, select Project → New Workspace for Project. To save the active workspace, select Project → Save Workspace As....

The workspace metadata is stored in JSON files with the .sublime-workspace extension, which you are not supposed to edit.

',29),p=t('

As with projects, you can open a workspace from the command line by passing the desired .sublime-workspace file as an argument to the subl command line helper included with Sublime Text.

WARNING

Unlike .sublime-project files, .sublime-workspace files are not meant to be shared or edited manually. You should never commit .sublime-workspace files into a source code repository.

',2);function h(u,m,g,f,k,w){const o=a("Key");return i(),n("div",null,[l,r("p",null,[e("To switch between different workspaces, use "),c(o,{k:"ctrl+alt+p"}),e(", exactly as you do with projects.")]),p])}const y=s(d,[["render",h]]);export{j as __pageData,y as default}; diff --git a/assets/guide_usage_file-management_projects.md.OEzFsdpY.lean.js b/assets/guide_usage_file-management_projects.md.oJxgU_Ro.lean.js similarity index 90% rename from assets/guide_usage_file-management_projects.md.OEzFsdpY.lean.js rename to assets/guide_usage_file-management_projects.md.oJxgU_Ro.lean.js index c5dadbe7..d628b214 100644 --- a/assets/guide_usage_file-management_projects.md.OEzFsdpY.lean.js +++ b/assets/guide_usage_file-management_projects.md.oJxgU_Ro.lean.js @@ -1 +1 @@ -import{_ as s,D as a,o as i,c as n,k as r,a as e,I as c,R as t}from"./chunks/framework.e02z-eDF.js";const j=JSON.parse('{"title":"Projects","description":"","frontmatter":{"title":"Projects"},"headers":[],"relativePath":"guide/usage/file-management/projects.md","filePath":"guide/usage/file-management/projects.md","lastUpdated":1703773698000}'),d={name:"guide/usage/file-management/projects.md"},l=t("",29),p=t("",2);function h(u,m,g,f,k,w){const o=a("Key");return i(),n("div",null,[l,r("p",null,[e("To switch between different workspaces, use "),c(o,{k:"ctrl+alt+p"}),e(", exactly as you do with projects.")]),p])}const y=s(d,[["render",h]]);export{j as __pageData,y as default}; +import{_ as s,D as a,o as i,c as n,k as r,a as e,I as c,R as t}from"./chunks/framework.e02z-eDF.js";const j=JSON.parse('{"title":"Projects","description":"","frontmatter":{"title":"Projects"},"headers":[],"relativePath":"guide/usage/file-management/projects.md","filePath":"guide/usage/file-management/projects.md","lastUpdated":1703774098000}'),d={name:"guide/usage/file-management/projects.md"},l=t("",29),p=t("",2);function h(u,m,g,f,k,w){const o=a("Key");return i(),n("div",null,[l,r("p",null,[e("To switch between different workspaces, use "),c(o,{k:"ctrl+alt+p"}),e(", exactly as you do with projects.")]),p])}const y=s(d,[["render",h]]);export{j as __pageData,y as default}; diff --git a/assets/guide_usage_search-and-replace.md.A5Ru6blb.js b/assets/guide_usage_search-and-replace.md.h_cG0MEn.js similarity index 99% rename from assets/guide_usage_search-and-replace.md.A5Ru6blb.js rename to assets/guide_usage_search-and-replace.md.h_cG0MEn.js index 2acf231f..86b5f5ee 100644 --- a/assets/guide_usage_search-and-replace.md.A5Ru6blb.js +++ b/assets/guide_usage_search-and-replace.md.h_cG0MEn.js @@ -1 +1 @@ -import{_ as s,D as r,o as i,c as o,k as e,I as l,a as n,R as a}from"./chunks/framework.e02z-eDF.js";const c="/assets/search-replace-multi-line.Gyc-RIHw.png",h="/assets/search-filters.In4mlxHG.png",d="/assets/search-results-pattern._ril8kzF.png",u="/assets/search-regex-sample.I2BWGolM.png",me=JSON.parse('{"title":"Search and Replace","description":"","frontmatter":{"title":"Search and Replace"},"headers":[],"relativePath":"guide/usage/search-and-replace.md","filePath":"guide/usage/search-and-replace.md","lastUpdated":1703773698000}'),p={name:"guide/usage/search-and-replace.md"},_=a('

Search and Replace

Sublime Text features two main types of search:

Both support regular expressions, a powerful tool for searching and replacing text.

Single File

Searching

Keyboard shortcuts related to the search panel:

',7),g=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),m=e("td",null,[e("strong",null,"Open search panel")],-1),f=e("td",null,"Toggle regular expressions",-1),b=e("td",null,"Toggle case sensitivity",-1),x=e("td",null,"Toggle exact match",-1),k=e("td",null,"Find next",-1),S=e("td",null,"Find previous",-1),T=e("td",null,"Find all",-1),y=e("h3",{id:"incremental-search",tabindex:"-1"},[n("Incremental Search "),e("a",{class:"header-anchor",href:"#incremental-search","aria-label":'Permalink to "Incremental Search"'},"​")],-1),w=e("p",null,"Keyboard shortcuts related to the incremental search panel:",-1),P=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),v=e("td",null,[e("strong",null,"Open incremental search panel")],-1),R=e("td",null,"Toggle regular expressions",-1),q=e("td",null,"Toggle case sensitivity",-1),F=e("td",null,"Toggle exact match",-1),A=e("td",null,"Find next",-1),I=e("td",null,"Find previous",-1),C=e("td",null,"Find all",-1),D=e("h3",{id:"replacing-text",tabindex:"-1"},[n("Replacing Text "),e("a",{class:"header-anchor",href:"#replacing-text","aria-label":'Permalink to "Replacing Text"'},"​")],-1),N=e("p",null,"Keyboard shortcuts related to the replace panel:",-1),V=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),E=e("td",null,[e("strong",null,"Open replace panel")],-1),O=e("td",null,"Replace next",-1),B=e("td",null,"Replace all",-1),K=a('

Tips

Other Ways of Searching in Files

Goto Anything provides the # operator to search in the filtered file.

These key bindings work when the search panel is hidden:

',5),M=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),W=e("td",null,"Search forward using most recent pattern",-1),$=e("td",null,"Search backwards using most recent pattern",-1),G=e("td",null,"Select all matches using most recent pattern",-1),Y=e("p",null,"You can also perform searches based on the current selection:",-1),z=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),H=e("td",null,"Search using current selection",-1),U=e("td",null,"Replace using current selection",-1),J=e("h3",{id:"multiline-search",tabindex:"-1"},[n("Multiline Search "),e("a",{class:"header-anchor",href:"#multiline-search","aria-label":'Permalink to "Multiline Search"'},"​")],-1),j=a('

Mutiline Replace

Note that search panels are resizable too.

Multiple Files

Searching

Keyboard shortcuts related to Find in Files:

',5),L=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),Q=e("td",null,[e("strong",null,"Open Find in Files")],-1),X=e("td",null,"Toggle regular expressions",-1),Z=e("td",null,"Toggle case sensitivity",-1),ee=e("td",null,"Toggle exact matches",-1),te=e("td",null,"Find next",-1),le=a('

Search Scope

The Where field in Find in Files limits the search scope. You can define scopes in several ways:

  • Adding individual directories (Unix-style paths, even on Windows)
  • Adding/excluding files based on wildcards
  • Adding symbolic locations (<open folders>, <open files>...)

It is also possible to combine these filters using commas; for example:

Search Patterns

Press the ... button in the search panel to display a menu containing scope options.

Results Format

In the search panel, you can customize how results are displayed. These are the available options:

  • Show in separate view
  • Show context

Search Results

If the search yields matches, you can move through the sequence using the following key bindings:

',12),ne=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),ae=e("td",null,"Next match",-1),se=e("td",null,"Previous match",-1),re=e("td",null,"Open match",-1),ie=a('

You can also double-click on lines with a match.

Regular Expressions

Regular Expressions find complex patterns in text. To take full advantage of the search and replace facilities in Sublime Text, you should at least learn the basics of regular expressions. In this guide we won't explain how to use regular expressions.

The term regular expression is usually shortened to regexp or regex.

This is how a regex might look:

(?:Sw|P)i(?:tch|s{2})\\s(?:it\\s)?of{2}!

To use regular expressions in Sublime Text, you first need to activate them in the various search panels. Otherwise, search terms will be interpreted literally.

Search and Replace

Sublime Text uses the Perl Compatible Regular Expressions (PCRE) engine from the Boost library.

See Also

Boost library documentation for regular expressions : Documentation on regular expressions.

Boost library documentation for format strings : Documentation on format strings. Note that Sublime Text additionally interprets \\\\{n} as ${n}.

',10);function oe(ce,he,de,ue,pe,_e){const t=r("Key");return i(),o("div",null,[_,e("table",null,[g,e("tbody",null,[e("tr",null,[m,e("td",null,[l(t,{k:"ctrl+f"})])]),e("tr",null,[f,e("td",null,[l(t,{k:"alt+r"})])]),e("tr",null,[b,e("td",null,[l(t,{k:"alt+c"})])]),e("tr",null,[x,e("td",null,[l(t,{k:"alt+w"})])]),e("tr",null,[k,e("td",null,[l(t,{k:"enter"})])]),e("tr",null,[S,e("td",null,[l(t,{k:"shift+enter"})])]),e("tr",null,[T,e("td",null,[l(t,{k:"alt+enter"})])])])]),y,w,e("table",null,[P,e("tbody",null,[e("tr",null,[v,e("td",null,[l(t,{k:"ctrl+i"})])]),e("tr",null,[R,e("td",null,[l(t,{k:"alt+r"})])]),e("tr",null,[q,e("td",null,[l(t,{k:"alt+c"})])]),e("tr",null,[F,e("td",null,[l(t,{k:"alt+w"})])]),e("tr",null,[A,e("td",null,[l(t,{k:"enter"})])]),e("tr",null,[I,e("td",null,[l(t,{k:"shift+enter"})])]),e("tr",null,[C,e("td",null,[l(t,{k:"alt+enter"})])])])]),e("p",null,[n("The only difference between this panel and the regular search panel lies in the behavior of the "),l(t,{k:"enter"}),n(" key. In incremental searches, it will select the next match in the file and dismiss the search panel for you. Choosing between this panel or the regular search panel is a matter of preference.")]),D,N,e("table",null,[V,e("tbody",null,[e("tr",null,[E,e("td",null,[l(t,{k:"ctrl+h"})])]),e("tr",null,[O,e("td",null,[l(t,{k:"ctrl+shift+h"})])]),e("tr",null,[B,e("td",null,[l(t,{k:"ctrl+alt+enter"})])])])]),K,e("table",null,[M,e("tbody",null,[e("tr",null,[W,e("td",null,[l(t,{k:"f3"})])]),e("tr",null,[$,e("td",null,[l(t,{k:"shift+f3"})])]),e("tr",null,[G,e("td",null,[l(t,{k:"alt+f3"})])])])]),Y,e("table",null,[z,e("tbody",null,[e("tr",null,[H,e("td",null,[l(t,{k:"ctrl+e"})])]),e("tr",null,[U,e("td",null,[l(t,{k:"ctrl+shift+e"})])])])]),J,e("p",null,[n("You can type in multiline search patterns into search panels. To enter newline characters, press "),l(t,{k:"ctrl+enter"}),n(".")]),j,e("table",null,[L,e("tbody",null,[e("tr",null,[Q,e("td",null,[l(t,{k:"ctrl+shift+f"})])]),e("tr",null,[X,e("td",null,[l(t,{k:"alt+r"})])]),e("tr",null,[Z,e("td",null,[l(t,{k:"alt+c"})])]),e("tr",null,[ee,e("td",null,[l(t,{k:"alt+w"})])]),e("tr",null,[te,e("td",null,[l(t,{k:"Enter"})])])])]),le,e("table",null,[ne,e("tbody",null,[e("tr",null,[ae,e("td",null,[l(t,{k:"f4"})])]),e("tr",null,[se,e("td",null,[l(t,{k:"shift+f4"})])]),e("tr",null,[re,e("td",null,[l(t,{k:"enter"})])])])]),ie])}const fe=s(p,[["render",oe]]);export{me as __pageData,fe as default}; +import{_ as s,D as r,o as i,c as o,k as e,I as l,a as n,R as a}from"./chunks/framework.e02z-eDF.js";const c="/assets/search-replace-multi-line.Gyc-RIHw.png",h="/assets/search-filters.In4mlxHG.png",d="/assets/search-results-pattern._ril8kzF.png",u="/assets/search-regex-sample.I2BWGolM.png",me=JSON.parse('{"title":"Search and Replace","description":"","frontmatter":{"title":"Search and Replace"},"headers":[],"relativePath":"guide/usage/search-and-replace.md","filePath":"guide/usage/search-and-replace.md","lastUpdated":1703774098000}'),p={name:"guide/usage/search-and-replace.md"},_=a('

Search and Replace

Sublime Text features two main types of search:

Both support regular expressions, a powerful tool for searching and replacing text.

Single File

Searching

Keyboard shortcuts related to the search panel:

',7),g=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),m=e("td",null,[e("strong",null,"Open search panel")],-1),f=e("td",null,"Toggle regular expressions",-1),b=e("td",null,"Toggle case sensitivity",-1),x=e("td",null,"Toggle exact match",-1),k=e("td",null,"Find next",-1),S=e("td",null,"Find previous",-1),T=e("td",null,"Find all",-1),y=e("h3",{id:"incremental-search",tabindex:"-1"},[n("Incremental Search "),e("a",{class:"header-anchor",href:"#incremental-search","aria-label":'Permalink to "Incremental Search"'},"​")],-1),w=e("p",null,"Keyboard shortcuts related to the incremental search panel:",-1),P=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),v=e("td",null,[e("strong",null,"Open incremental search panel")],-1),R=e("td",null,"Toggle regular expressions",-1),q=e("td",null,"Toggle case sensitivity",-1),F=e("td",null,"Toggle exact match",-1),A=e("td",null,"Find next",-1),I=e("td",null,"Find previous",-1),C=e("td",null,"Find all",-1),D=e("h3",{id:"replacing-text",tabindex:"-1"},[n("Replacing Text "),e("a",{class:"header-anchor",href:"#replacing-text","aria-label":'Permalink to "Replacing Text"'},"​")],-1),N=e("p",null,"Keyboard shortcuts related to the replace panel:",-1),V=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),E=e("td",null,[e("strong",null,"Open replace panel")],-1),O=e("td",null,"Replace next",-1),B=e("td",null,"Replace all",-1),K=a('

Tips

Other Ways of Searching in Files

Goto Anything provides the # operator to search in the filtered file.

These key bindings work when the search panel is hidden:

',5),M=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),W=e("td",null,"Search forward using most recent pattern",-1),$=e("td",null,"Search backwards using most recent pattern",-1),G=e("td",null,"Select all matches using most recent pattern",-1),Y=e("p",null,"You can also perform searches based on the current selection:",-1),z=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),H=e("td",null,"Search using current selection",-1),U=e("td",null,"Replace using current selection",-1),J=e("h3",{id:"multiline-search",tabindex:"-1"},[n("Multiline Search "),e("a",{class:"header-anchor",href:"#multiline-search","aria-label":'Permalink to "Multiline Search"'},"​")],-1),j=a('

Mutiline Replace

Note that search panels are resizable too.

Multiple Files

Searching

Keyboard shortcuts related to Find in Files:

',5),L=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),Q=e("td",null,[e("strong",null,"Open Find in Files")],-1),X=e("td",null,"Toggle regular expressions",-1),Z=e("td",null,"Toggle case sensitivity",-1),ee=e("td",null,"Toggle exact matches",-1),te=e("td",null,"Find next",-1),le=a('

Search Scope

The Where field in Find in Files limits the search scope. You can define scopes in several ways:

  • Adding individual directories (Unix-style paths, even on Windows)
  • Adding/excluding files based on wildcards
  • Adding symbolic locations (<open folders>, <open files>...)

It is also possible to combine these filters using commas; for example:

Search Patterns

Press the ... button in the search panel to display a menu containing scope options.

Results Format

In the search panel, you can customize how results are displayed. These are the available options:

  • Show in separate view
  • Show context

Search Results

If the search yields matches, you can move through the sequence using the following key bindings:

',12),ne=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),ae=e("td",null,"Next match",-1),se=e("td",null,"Previous match",-1),re=e("td",null,"Open match",-1),ie=a('

You can also double-click on lines with a match.

Regular Expressions

Regular Expressions find complex patterns in text. To take full advantage of the search and replace facilities in Sublime Text, you should at least learn the basics of regular expressions. In this guide we won't explain how to use regular expressions.

The term regular expression is usually shortened to regexp or regex.

This is how a regex might look:

(?:Sw|P)i(?:tch|s{2})\\s(?:it\\s)?of{2}!

To use regular expressions in Sublime Text, you first need to activate them in the various search panels. Otherwise, search terms will be interpreted literally.

Search and Replace

Sublime Text uses the Perl Compatible Regular Expressions (PCRE) engine from the Boost library.

See Also

Boost library documentation for regular expressions : Documentation on regular expressions.

Boost library documentation for format strings : Documentation on format strings. Note that Sublime Text additionally interprets \\\\{n} as ${n}.

',10);function oe(ce,he,de,ue,pe,_e){const t=r("Key");return i(),o("div",null,[_,e("table",null,[g,e("tbody",null,[e("tr",null,[m,e("td",null,[l(t,{k:"ctrl+f"})])]),e("tr",null,[f,e("td",null,[l(t,{k:"alt+r"})])]),e("tr",null,[b,e("td",null,[l(t,{k:"alt+c"})])]),e("tr",null,[x,e("td",null,[l(t,{k:"alt+w"})])]),e("tr",null,[k,e("td",null,[l(t,{k:"enter"})])]),e("tr",null,[S,e("td",null,[l(t,{k:"shift+enter"})])]),e("tr",null,[T,e("td",null,[l(t,{k:"alt+enter"})])])])]),y,w,e("table",null,[P,e("tbody",null,[e("tr",null,[v,e("td",null,[l(t,{k:"ctrl+i"})])]),e("tr",null,[R,e("td",null,[l(t,{k:"alt+r"})])]),e("tr",null,[q,e("td",null,[l(t,{k:"alt+c"})])]),e("tr",null,[F,e("td",null,[l(t,{k:"alt+w"})])]),e("tr",null,[A,e("td",null,[l(t,{k:"enter"})])]),e("tr",null,[I,e("td",null,[l(t,{k:"shift+enter"})])]),e("tr",null,[C,e("td",null,[l(t,{k:"alt+enter"})])])])]),e("p",null,[n("The only difference between this panel and the regular search panel lies in the behavior of the "),l(t,{k:"enter"}),n(" key. In incremental searches, it will select the next match in the file and dismiss the search panel for you. Choosing between this panel or the regular search panel is a matter of preference.")]),D,N,e("table",null,[V,e("tbody",null,[e("tr",null,[E,e("td",null,[l(t,{k:"ctrl+h"})])]),e("tr",null,[O,e("td",null,[l(t,{k:"ctrl+shift+h"})])]),e("tr",null,[B,e("td",null,[l(t,{k:"ctrl+alt+enter"})])])])]),K,e("table",null,[M,e("tbody",null,[e("tr",null,[W,e("td",null,[l(t,{k:"f3"})])]),e("tr",null,[$,e("td",null,[l(t,{k:"shift+f3"})])]),e("tr",null,[G,e("td",null,[l(t,{k:"alt+f3"})])])])]),Y,e("table",null,[z,e("tbody",null,[e("tr",null,[H,e("td",null,[l(t,{k:"ctrl+e"})])]),e("tr",null,[U,e("td",null,[l(t,{k:"ctrl+shift+e"})])])])]),J,e("p",null,[n("You can type in multiline search patterns into search panels. To enter newline characters, press "),l(t,{k:"ctrl+enter"}),n(".")]),j,e("table",null,[L,e("tbody",null,[e("tr",null,[Q,e("td",null,[l(t,{k:"ctrl+shift+f"})])]),e("tr",null,[X,e("td",null,[l(t,{k:"alt+r"})])]),e("tr",null,[Z,e("td",null,[l(t,{k:"alt+c"})])]),e("tr",null,[ee,e("td",null,[l(t,{k:"alt+w"})])]),e("tr",null,[te,e("td",null,[l(t,{k:"Enter"})])])])]),le,e("table",null,[ne,e("tbody",null,[e("tr",null,[ae,e("td",null,[l(t,{k:"f4"})])]),e("tr",null,[se,e("td",null,[l(t,{k:"shift+f4"})])]),e("tr",null,[re,e("td",null,[l(t,{k:"enter"})])])])]),ie])}const fe=s(p,[["render",oe]]);export{me as __pageData,fe as default}; diff --git a/assets/guide_usage_search-and-replace.md.A5Ru6blb.lean.js b/assets/guide_usage_search-and-replace.md.h_cG0MEn.lean.js similarity index 98% rename from assets/guide_usage_search-and-replace.md.A5Ru6blb.lean.js rename to assets/guide_usage_search-and-replace.md.h_cG0MEn.lean.js index 0324d343..6155f856 100644 --- a/assets/guide_usage_search-and-replace.md.A5Ru6blb.lean.js +++ b/assets/guide_usage_search-and-replace.md.h_cG0MEn.lean.js @@ -1 +1 @@ -import{_ as s,D as r,o as i,c as o,k as e,I as l,a as n,R as a}from"./chunks/framework.e02z-eDF.js";const c="/assets/search-replace-multi-line.Gyc-RIHw.png",h="/assets/search-filters.In4mlxHG.png",d="/assets/search-results-pattern._ril8kzF.png",u="/assets/search-regex-sample.I2BWGolM.png",me=JSON.parse('{"title":"Search and Replace","description":"","frontmatter":{"title":"Search and Replace"},"headers":[],"relativePath":"guide/usage/search-and-replace.md","filePath":"guide/usage/search-and-replace.md","lastUpdated":1703773698000}'),p={name:"guide/usage/search-and-replace.md"},_=a("",7),g=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),m=e("td",null,[e("strong",null,"Open search panel")],-1),f=e("td",null,"Toggle regular expressions",-1),b=e("td",null,"Toggle case sensitivity",-1),x=e("td",null,"Toggle exact match",-1),k=e("td",null,"Find next",-1),S=e("td",null,"Find previous",-1),T=e("td",null,"Find all",-1),y=e("h3",{id:"incremental-search",tabindex:"-1"},[n("Incremental Search "),e("a",{class:"header-anchor",href:"#incremental-search","aria-label":'Permalink to "Incremental Search"'},"​")],-1),w=e("p",null,"Keyboard shortcuts related to the incremental search panel:",-1),P=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),v=e("td",null,[e("strong",null,"Open incremental search panel")],-1),R=e("td",null,"Toggle regular expressions",-1),q=e("td",null,"Toggle case sensitivity",-1),F=e("td",null,"Toggle exact match",-1),A=e("td",null,"Find next",-1),I=e("td",null,"Find previous",-1),C=e("td",null,"Find all",-1),D=e("h3",{id:"replacing-text",tabindex:"-1"},[n("Replacing Text "),e("a",{class:"header-anchor",href:"#replacing-text","aria-label":'Permalink to "Replacing Text"'},"​")],-1),N=e("p",null,"Keyboard shortcuts related to the replace panel:",-1),V=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),E=e("td",null,[e("strong",null,"Open replace panel")],-1),O=e("td",null,"Replace next",-1),B=e("td",null,"Replace all",-1),K=a("",5),M=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),W=e("td",null,"Search forward using most recent pattern",-1),$=e("td",null,"Search backwards using most recent pattern",-1),G=e("td",null,"Select all matches using most recent pattern",-1),Y=e("p",null,"You can also perform searches based on the current selection:",-1),z=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),H=e("td",null,"Search using current selection",-1),U=e("td",null,"Replace using current selection",-1),J=e("h3",{id:"multiline-search",tabindex:"-1"},[n("Multiline Search "),e("a",{class:"header-anchor",href:"#multiline-search","aria-label":'Permalink to "Multiline Search"'},"​")],-1),j=a("",5),L=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),Q=e("td",null,[e("strong",null,"Open Find in Files")],-1),X=e("td",null,"Toggle regular expressions",-1),Z=e("td",null,"Toggle case sensitivity",-1),ee=e("td",null,"Toggle exact matches",-1),te=e("td",null,"Find next",-1),le=a("",12),ne=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),ae=e("td",null,"Next match",-1),se=e("td",null,"Previous match",-1),re=e("td",null,"Open match",-1),ie=a("",10);function oe(ce,he,de,ue,pe,_e){const t=r("Key");return i(),o("div",null,[_,e("table",null,[g,e("tbody",null,[e("tr",null,[m,e("td",null,[l(t,{k:"ctrl+f"})])]),e("tr",null,[f,e("td",null,[l(t,{k:"alt+r"})])]),e("tr",null,[b,e("td",null,[l(t,{k:"alt+c"})])]),e("tr",null,[x,e("td",null,[l(t,{k:"alt+w"})])]),e("tr",null,[k,e("td",null,[l(t,{k:"enter"})])]),e("tr",null,[S,e("td",null,[l(t,{k:"shift+enter"})])]),e("tr",null,[T,e("td",null,[l(t,{k:"alt+enter"})])])])]),y,w,e("table",null,[P,e("tbody",null,[e("tr",null,[v,e("td",null,[l(t,{k:"ctrl+i"})])]),e("tr",null,[R,e("td",null,[l(t,{k:"alt+r"})])]),e("tr",null,[q,e("td",null,[l(t,{k:"alt+c"})])]),e("tr",null,[F,e("td",null,[l(t,{k:"alt+w"})])]),e("tr",null,[A,e("td",null,[l(t,{k:"enter"})])]),e("tr",null,[I,e("td",null,[l(t,{k:"shift+enter"})])]),e("tr",null,[C,e("td",null,[l(t,{k:"alt+enter"})])])])]),e("p",null,[n("The only difference between this panel and the regular search panel lies in the behavior of the "),l(t,{k:"enter"}),n(" key. In incremental searches, it will select the next match in the file and dismiss the search panel for you. Choosing between this panel or the regular search panel is a matter of preference.")]),D,N,e("table",null,[V,e("tbody",null,[e("tr",null,[E,e("td",null,[l(t,{k:"ctrl+h"})])]),e("tr",null,[O,e("td",null,[l(t,{k:"ctrl+shift+h"})])]),e("tr",null,[B,e("td",null,[l(t,{k:"ctrl+alt+enter"})])])])]),K,e("table",null,[M,e("tbody",null,[e("tr",null,[W,e("td",null,[l(t,{k:"f3"})])]),e("tr",null,[$,e("td",null,[l(t,{k:"shift+f3"})])]),e("tr",null,[G,e("td",null,[l(t,{k:"alt+f3"})])])])]),Y,e("table",null,[z,e("tbody",null,[e("tr",null,[H,e("td",null,[l(t,{k:"ctrl+e"})])]),e("tr",null,[U,e("td",null,[l(t,{k:"ctrl+shift+e"})])])])]),J,e("p",null,[n("You can type in multiline search patterns into search panels. To enter newline characters, press "),l(t,{k:"ctrl+enter"}),n(".")]),j,e("table",null,[L,e("tbody",null,[e("tr",null,[Q,e("td",null,[l(t,{k:"ctrl+shift+f"})])]),e("tr",null,[X,e("td",null,[l(t,{k:"alt+r"})])]),e("tr",null,[Z,e("td",null,[l(t,{k:"alt+c"})])]),e("tr",null,[ee,e("td",null,[l(t,{k:"alt+w"})])]),e("tr",null,[te,e("td",null,[l(t,{k:"Enter"})])])])]),le,e("table",null,[ne,e("tbody",null,[e("tr",null,[ae,e("td",null,[l(t,{k:"f4"})])]),e("tr",null,[se,e("td",null,[l(t,{k:"shift+f4"})])]),e("tr",null,[re,e("td",null,[l(t,{k:"enter"})])])])]),ie])}const fe=s(p,[["render",oe]]);export{me as __pageData,fe as default}; +import{_ as s,D as r,o as i,c as o,k as e,I as l,a as n,R as a}from"./chunks/framework.e02z-eDF.js";const c="/assets/search-replace-multi-line.Gyc-RIHw.png",h="/assets/search-filters.In4mlxHG.png",d="/assets/search-results-pattern._ril8kzF.png",u="/assets/search-regex-sample.I2BWGolM.png",me=JSON.parse('{"title":"Search and Replace","description":"","frontmatter":{"title":"Search and Replace"},"headers":[],"relativePath":"guide/usage/search-and-replace.md","filePath":"guide/usage/search-and-replace.md","lastUpdated":1703774098000}'),p={name:"guide/usage/search-and-replace.md"},_=a("",7),g=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),m=e("td",null,[e("strong",null,"Open search panel")],-1),f=e("td",null,"Toggle regular expressions",-1),b=e("td",null,"Toggle case sensitivity",-1),x=e("td",null,"Toggle exact match",-1),k=e("td",null,"Find next",-1),S=e("td",null,"Find previous",-1),T=e("td",null,"Find all",-1),y=e("h3",{id:"incremental-search",tabindex:"-1"},[n("Incremental Search "),e("a",{class:"header-anchor",href:"#incremental-search","aria-label":'Permalink to "Incremental Search"'},"​")],-1),w=e("p",null,"Keyboard shortcuts related to the incremental search panel:",-1),P=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),v=e("td",null,[e("strong",null,"Open incremental search panel")],-1),R=e("td",null,"Toggle regular expressions",-1),q=e("td",null,"Toggle case sensitivity",-1),F=e("td",null,"Toggle exact match",-1),A=e("td",null,"Find next",-1),I=e("td",null,"Find previous",-1),C=e("td",null,"Find all",-1),D=e("h3",{id:"replacing-text",tabindex:"-1"},[n("Replacing Text "),e("a",{class:"header-anchor",href:"#replacing-text","aria-label":'Permalink to "Replacing Text"'},"​")],-1),N=e("p",null,"Keyboard shortcuts related to the replace panel:",-1),V=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),E=e("td",null,[e("strong",null,"Open replace panel")],-1),O=e("td",null,"Replace next",-1),B=e("td",null,"Replace all",-1),K=a("",5),M=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),W=e("td",null,"Search forward using most recent pattern",-1),$=e("td",null,"Search backwards using most recent pattern",-1),G=e("td",null,"Select all matches using most recent pattern",-1),Y=e("p",null,"You can also perform searches based on the current selection:",-1),z=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),H=e("td",null,"Search using current selection",-1),U=e("td",null,"Replace using current selection",-1),J=e("h3",{id:"multiline-search",tabindex:"-1"},[n("Multiline Search "),e("a",{class:"header-anchor",href:"#multiline-search","aria-label":'Permalink to "Multiline Search"'},"​")],-1),j=a("",5),L=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),Q=e("td",null,[e("strong",null,"Open Find in Files")],-1),X=e("td",null,"Toggle regular expressions",-1),Z=e("td",null,"Toggle case sensitivity",-1),ee=e("td",null,"Toggle exact matches",-1),te=e("td",null,"Find next",-1),le=a("",12),ne=e("thead",null,[e("tr",null,[e("th",null,"Description"),e("th",null,"Shortcut")])],-1),ae=e("td",null,"Next match",-1),se=e("td",null,"Previous match",-1),re=e("td",null,"Open match",-1),ie=a("",10);function oe(ce,he,de,ue,pe,_e){const t=r("Key");return i(),o("div",null,[_,e("table",null,[g,e("tbody",null,[e("tr",null,[m,e("td",null,[l(t,{k:"ctrl+f"})])]),e("tr",null,[f,e("td",null,[l(t,{k:"alt+r"})])]),e("tr",null,[b,e("td",null,[l(t,{k:"alt+c"})])]),e("tr",null,[x,e("td",null,[l(t,{k:"alt+w"})])]),e("tr",null,[k,e("td",null,[l(t,{k:"enter"})])]),e("tr",null,[S,e("td",null,[l(t,{k:"shift+enter"})])]),e("tr",null,[T,e("td",null,[l(t,{k:"alt+enter"})])])])]),y,w,e("table",null,[P,e("tbody",null,[e("tr",null,[v,e("td",null,[l(t,{k:"ctrl+i"})])]),e("tr",null,[R,e("td",null,[l(t,{k:"alt+r"})])]),e("tr",null,[q,e("td",null,[l(t,{k:"alt+c"})])]),e("tr",null,[F,e("td",null,[l(t,{k:"alt+w"})])]),e("tr",null,[A,e("td",null,[l(t,{k:"enter"})])]),e("tr",null,[I,e("td",null,[l(t,{k:"shift+enter"})])]),e("tr",null,[C,e("td",null,[l(t,{k:"alt+enter"})])])])]),e("p",null,[n("The only difference between this panel and the regular search panel lies in the behavior of the "),l(t,{k:"enter"}),n(" key. In incremental searches, it will select the next match in the file and dismiss the search panel for you. Choosing between this panel or the regular search panel is a matter of preference.")]),D,N,e("table",null,[V,e("tbody",null,[e("tr",null,[E,e("td",null,[l(t,{k:"ctrl+h"})])]),e("tr",null,[O,e("td",null,[l(t,{k:"ctrl+shift+h"})])]),e("tr",null,[B,e("td",null,[l(t,{k:"ctrl+alt+enter"})])])])]),K,e("table",null,[M,e("tbody",null,[e("tr",null,[W,e("td",null,[l(t,{k:"f3"})])]),e("tr",null,[$,e("td",null,[l(t,{k:"shift+f3"})])]),e("tr",null,[G,e("td",null,[l(t,{k:"alt+f3"})])])])]),Y,e("table",null,[z,e("tbody",null,[e("tr",null,[H,e("td",null,[l(t,{k:"ctrl+e"})])]),e("tr",null,[U,e("td",null,[l(t,{k:"ctrl+shift+e"})])])])]),J,e("p",null,[n("You can type in multiline search patterns into search panels. To enter newline characters, press "),l(t,{k:"ctrl+enter"}),n(".")]),j,e("table",null,[L,e("tbody",null,[e("tr",null,[Q,e("td",null,[l(t,{k:"ctrl+shift+f"})])]),e("tr",null,[X,e("td",null,[l(t,{k:"alt+r"})])]),e("tr",null,[Z,e("td",null,[l(t,{k:"alt+c"})])]),e("tr",null,[ee,e("td",null,[l(t,{k:"alt+w"})])]),e("tr",null,[te,e("td",null,[l(t,{k:"Enter"})])])])]),le,e("table",null,[ne,e("tbody",null,[e("tr",null,[ae,e("td",null,[l(t,{k:"f4"})])]),e("tr",null,[se,e("td",null,[l(t,{k:"shift+f4"})])]),e("tr",null,[re,e("td",null,[l(t,{k:"enter"})])])])]),ie])}const fe=s(p,[["render",oe]]);export{me as __pageData,fe as default}; diff --git a/assets/index.md.fIw7cd8u.js b/assets/index.md.G8JQ3VSK.js similarity index 82% rename from assets/index.md.fIw7cd8u.js rename to assets/index.md.G8JQ3VSK.js index ecc8229e..2f8d6135 100644 --- a/assets/index.md.fIw7cd8u.js +++ b/assets/index.md.G8JQ3VSK.js @@ -1 +1 @@ -import{_ as o,D as i,o as n,c as a,k as e,I as s}from"./chunks/framework.e02z-eDF.js";const y=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Sublime Text","text":"Community-driven Documentation","image":{"src":"/logo.svg","alt":"Sublime Community Documentation Logo"},"tagline":"Documenting the Sublime Text editor and accompanying its official documentation.","actions":[{"theme":"brand","text":"Guide","link":"/guide/"},{"theme":"alt","text":"Official Documentation","link":"https://sublimetext.com/docs/"}]},"features":[{"icon":"⚡️","title":"The Guide","link":"/guide/","details":"Includes basic information on Sublime Text covers its usag and how it can be customized."},{"icon":"🎉","title":"The Reference","link":"/reference/","details":"Find details on structuring custom key bindings to disabling menu items for your plugin."},{"icon":"📕","title":"The Glossary","link":"/glossary.md","details":"Quickly understand terms used throughout the documentation with this glossary."}],"head":[["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:title","content":"Sublime Text Community-driven Documentation"}],["link",{"rel":"icon","type":"image/svg","href":"logo.svg"}]]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1703773698000}'),c={name:"index.md"},r={class:"custom-layout"},d={class:"custom-container"};function l(m,u,g,p,h,f){const t=i("Contributors");return n(),a("div",null,[e("div",r,[e("div",d,[s(t)])])])}const x=o(c,[["render",l],["__scopeId","data-v-f37d1169"]]);export{y as __pageData,x as default}; +import{_ as o,D as i,o as n,c as a,k as e,I as s}from"./chunks/framework.e02z-eDF.js";const y=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Sublime Text","text":"Community-driven Documentation","image":{"src":"/logo.svg","alt":"Sublime Community Documentation Logo"},"tagline":"Documenting the Sublime Text editor and accompanying its official documentation.","actions":[{"theme":"brand","text":"Guide","link":"/guide/"},{"theme":"alt","text":"Official Documentation","link":"https://sublimetext.com/docs/"}]},"features":[{"icon":"⚡️","title":"The Guide","link":"/guide/","details":"Includes basic information on Sublime Text covers its usag and how it can be customized."},{"icon":"🎉","title":"The Reference","link":"/reference/","details":"Find details on structuring custom key bindings to disabling menu items for your plugin."},{"icon":"📕","title":"The Glossary","link":"/glossary.md","details":"Quickly understand terms used throughout the documentation with this glossary."}],"head":[["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:title","content":"Sublime Text Community-driven Documentation"}],["link",{"rel":"icon","type":"image/svg","href":"logo.svg"}]]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1703774098000}'),c={name:"index.md"},r={class:"custom-layout"},d={class:"custom-container"};function l(m,u,g,p,h,_){const t=i("Contributors");return n(),a("div",null,[e("div",r,[e("div",d,[s(t)])])])}const b=o(c,[["render",l],["__scopeId","data-v-1ba96574"]]);export{y as __pageData,b as default}; diff --git a/assets/index.md.fIw7cd8u.lean.js b/assets/index.md.G8JQ3VSK.lean.js similarity index 82% rename from assets/index.md.fIw7cd8u.lean.js rename to assets/index.md.G8JQ3VSK.lean.js index ecc8229e..2f8d6135 100644 --- a/assets/index.md.fIw7cd8u.lean.js +++ b/assets/index.md.G8JQ3VSK.lean.js @@ -1 +1 @@ -import{_ as o,D as i,o as n,c as a,k as e,I as s}from"./chunks/framework.e02z-eDF.js";const y=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Sublime Text","text":"Community-driven Documentation","image":{"src":"/logo.svg","alt":"Sublime Community Documentation Logo"},"tagline":"Documenting the Sublime Text editor and accompanying its official documentation.","actions":[{"theme":"brand","text":"Guide","link":"/guide/"},{"theme":"alt","text":"Official Documentation","link":"https://sublimetext.com/docs/"}]},"features":[{"icon":"⚡️","title":"The Guide","link":"/guide/","details":"Includes basic information on Sublime Text covers its usag and how it can be customized."},{"icon":"🎉","title":"The Reference","link":"/reference/","details":"Find details on structuring custom key bindings to disabling menu items for your plugin."},{"icon":"📕","title":"The Glossary","link":"/glossary.md","details":"Quickly understand terms used throughout the documentation with this glossary."}],"head":[["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:title","content":"Sublime Text Community-driven Documentation"}],["link",{"rel":"icon","type":"image/svg","href":"logo.svg"}]]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1703773698000}'),c={name:"index.md"},r={class:"custom-layout"},d={class:"custom-container"};function l(m,u,g,p,h,f){const t=i("Contributors");return n(),a("div",null,[e("div",r,[e("div",d,[s(t)])])])}const x=o(c,[["render",l],["__scopeId","data-v-f37d1169"]]);export{y as __pageData,x as default}; +import{_ as o,D as i,o as n,c as a,k as e,I as s}from"./chunks/framework.e02z-eDF.js";const y=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Sublime Text","text":"Community-driven Documentation","image":{"src":"/logo.svg","alt":"Sublime Community Documentation Logo"},"tagline":"Documenting the Sublime Text editor and accompanying its official documentation.","actions":[{"theme":"brand","text":"Guide","link":"/guide/"},{"theme":"alt","text":"Official Documentation","link":"https://sublimetext.com/docs/"}]},"features":[{"icon":"⚡️","title":"The Guide","link":"/guide/","details":"Includes basic information on Sublime Text covers its usag and how it can be customized."},{"icon":"🎉","title":"The Reference","link":"/reference/","details":"Find details on structuring custom key bindings to disabling menu items for your plugin."},{"icon":"📕","title":"The Glossary","link":"/glossary.md","details":"Quickly understand terms used throughout the documentation with this glossary."}],"head":[["meta",{"property":"og:type","content":"website"}],["meta",{"property":"og:title","content":"Sublime Text Community-driven Documentation"}],["link",{"rel":"icon","type":"image/svg","href":"logo.svg"}]]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1703774098000}'),c={name:"index.md"},r={class:"custom-layout"},d={class:"custom-container"};function l(m,u,g,p,h,_){const t=i("Contributors");return n(),a("div",null,[e("div",r,[e("div",d,[s(t)])])])}const b=o(c,[["render",l],["__scopeId","data-v-1ba96574"]]);export{y as __pageData,b as default}; diff --git a/assets/other_question.md.lmnUHqXN.js b/assets/other_question.md.KGHgF6su.js similarity index 93% rename from assets/other_question.md.lmnUHqXN.js rename to assets/other_question.md.KGHgF6su.js index 2f816a7f..eec7ca4c 100644 --- a/assets/other_question.md.lmnUHqXN.js +++ b/assets/other_question.md.KGHgF6su.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,R as o}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"title":"FAQ"},"headers":[],"relativePath":"other/question.md","filePath":"other/question.md","lastUpdated":1703773698000}'),s={name:"other/question.md"},r=o('

FAQ

TIP

We have collected some usual questions here. If you don't find the answer you want here, please feel free to reach out on the Sublime Discord

1. Sample Question?

  1. Answer 1
',4),i=[r];function n(l,c,_,d,h,u){return t(),a("div",null,i)}const f=e(s,[["render",n]]);export{m as __pageData,f as default}; +import{_ as e,o as t,c as a,R as o}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"title":"FAQ"},"headers":[],"relativePath":"other/question.md","filePath":"other/question.md","lastUpdated":1703774098000}'),s={name:"other/question.md"},r=o('

FAQ

TIP

We have collected some usual questions here. If you don't find the answer you want here, please feel free to reach out on the Sublime Discord

1. Sample Question?

  1. Answer 1
',4),i=[r];function n(l,c,_,d,h,u){return t(),a("div",null,i)}const f=e(s,[["render",n]]);export{m as __pageData,f as default}; diff --git a/assets/other_question.md.lmnUHqXN.lean.js b/assets/other_question.md.KGHgF6su.lean.js similarity index 84% rename from assets/other_question.md.lmnUHqXN.lean.js rename to assets/other_question.md.KGHgF6su.lean.js index fce5ed07..9a91fa45 100644 --- a/assets/other_question.md.lmnUHqXN.lean.js +++ b/assets/other_question.md.KGHgF6su.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as a,R as o}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"title":"FAQ"},"headers":[],"relativePath":"other/question.md","filePath":"other/question.md","lastUpdated":1703773698000}'),s={name:"other/question.md"},r=o("",4),i=[r];function n(l,c,_,d,h,u){return t(),a("div",null,i)}const f=e(s,[["render",n]]);export{m as __pageData,f as default}; +import{_ as e,o as t,c as a,R as o}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"FAQ","description":"","frontmatter":{"title":"FAQ"},"headers":[],"relativePath":"other/question.md","filePath":"other/question.md","lastUpdated":1703774098000}'),s={name:"other/question.md"},r=o("",4),i=[r];function n(l,c,_,d,h,u){return t(),a("div",null,i)}const f=e(s,[["render",n]]);export{m as __pageData,f as default}; diff --git a/assets/reference_color_schemes_legacy.md.srh9jHBN.js b/assets/reference_color_schemes_legacy.md.DBAqIbKE.js similarity index 99% rename from assets/reference_color_schemes_legacy.md.srh9jHBN.js rename to assets/reference_color_schemes_legacy.md.DBAqIbKE.js index cdb141d3..6ee8cb6d 100644 --- a/assets/reference_color_schemes_legacy.md.srh9jHBN.js +++ b/assets/reference_color_schemes_legacy.md.DBAqIbKE.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as i,R as t}from"./chunks/framework.e02z-eDF.js";const E=JSON.parse('{"title":"Color Schemes (Legacy)","description":"","frontmatter":{"title":"Color Schemes (Legacy)"},"headers":[],"relativePath":"reference/color_schemes_legacy.md","filePath":"reference/color_schemes_legacy.md","lastUpdated":1703773698000}'),a={name:"reference/color_schemes_legacy.md"},n=t(`

Color Schemes (Legacy)

Color schemes define the colors used to highlight source code in Sublime Text views and to style different elements found in the editing area: background, foreground, selection, caret...

WARNING

This document describes the old .tmTheme color scheme (not theme!) format inherited from TextMate.

For the new .sublime-color-scheme format added in Sublime Text 3.1, refer to the official documentation.

Note

Sublime Text differentiates between "color schemes" defining colors in the editor area and "themes" defining the layout for the rest of the UI. Rather confusingly, the color scheme format inherited from TextMate uses the .tmTheme unchanged extension, because themes in TextMate themes are what color schemes are for Sublime Text.

It's important to remember that UI themes and color schemes are two different customization mechanisms. Generally speaking, it is far less complex to create a new color scheme than it is to create a new UI theme.

File Format

NameDescription
FormatProperty List
Extension.tmTheme
NameAny
LocationAny under Packages

The file format of color scheme files is inherited from Textmate.

Where to Store Color Schemes

By convention, packages primarily containing a set of color scheme files have the Color Scheme - prefix. For example: Color Scheme - Default.

The file names of all available color schemes are displayed in the Preferences → Color Scheme menu, grouped by the containing package.

Structure of a Color Scheme File

All color scheme files share the same topmost structure.

Colors can be expressed in the following formats: #RRGGBB, #RGB, X11 color names

Most elements controlling colors accept an alpha channel value: #RRGGBBAA.

Root Elements in Color Schemes Files

xml
<?xml version="1.0" encoding="UTF-8"?>
+import{_ as s,o as e,c as i,R as t}from"./chunks/framework.e02z-eDF.js";const E=JSON.parse('{"title":"Color Schemes (Legacy)","description":"","frontmatter":{"title":"Color Schemes (Legacy)"},"headers":[],"relativePath":"reference/color_schemes_legacy.md","filePath":"reference/color_schemes_legacy.md","lastUpdated":1703774098000}'),a={name:"reference/color_schemes_legacy.md"},n=t(`

Color Schemes (Legacy)

Color schemes define the colors used to highlight source code in Sublime Text views and to style different elements found in the editing area: background, foreground, selection, caret...

WARNING

This document describes the old .tmTheme color scheme (not theme!) format inherited from TextMate.

For the new .sublime-color-scheme format added in Sublime Text 3.1, refer to the official documentation.

Note

Sublime Text differentiates between "color schemes" defining colors in the editor area and "themes" defining the layout for the rest of the UI. Rather confusingly, the color scheme format inherited from TextMate uses the .tmTheme unchanged extension, because themes in TextMate themes are what color schemes are for Sublime Text.

It's important to remember that UI themes and color schemes are two different customization mechanisms. Generally speaking, it is far less complex to create a new color scheme than it is to create a new UI theme.

File Format

NameDescription
FormatProperty List
Extension.tmTheme
NameAny
LocationAny under Packages

The file format of color scheme files is inherited from Textmate.

Where to Store Color Schemes

By convention, packages primarily containing a set of color scheme files have the Color Scheme - prefix. For example: Color Scheme - Default.

The file names of all available color schemes are displayed in the Preferences → Color Scheme menu, grouped by the containing package.

Structure of a Color Scheme File

All color scheme files share the same topmost structure.

Colors can be expressed in the following formats: #RRGGBB, #RGB, X11 color names

Most elements controlling colors accept an alpha channel value: #RRGGBBAA.

Root Elements in Color Schemes Files

xml
<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
diff --git a/assets/reference_color_schemes_legacy.md.srh9jHBN.lean.js b/assets/reference_color_schemes_legacy.md.DBAqIbKE.lean.js
similarity index 87%
rename from assets/reference_color_schemes_legacy.md.srh9jHBN.lean.js
rename to assets/reference_color_schemes_legacy.md.DBAqIbKE.lean.js
index 13b91041..a9127bc8 100644
--- a/assets/reference_color_schemes_legacy.md.srh9jHBN.lean.js
+++ b/assets/reference_color_schemes_legacy.md.DBAqIbKE.lean.js
@@ -1 +1 @@
-import{_ as s,o as e,c as i,R as t}from"./chunks/framework.e02z-eDF.js";const E=JSON.parse('{"title":"Color Schemes (Legacy)","description":"","frontmatter":{"title":"Color Schemes (Legacy)"},"headers":[],"relativePath":"reference/color_schemes_legacy.md","filePath":"reference/color_schemes_legacy.md","lastUpdated":1703773698000}'),a={name:"reference/color_schemes_legacy.md"},n=t("",91),l=[n];function h(o,r,p,d,c,k){return e(),i("div",null,l)}const u=s(a,[["render",h]]);export{E as __pageData,u as default};
+import{_ as s,o as e,c as i,R as t}from"./chunks/framework.e02z-eDF.js";const E=JSON.parse('{"title":"Color Schemes (Legacy)","description":"","frontmatter":{"title":"Color Schemes (Legacy)"},"headers":[],"relativePath":"reference/color_schemes_legacy.md","filePath":"reference/color_schemes_legacy.md","lastUpdated":1703774098000}'),a={name:"reference/color_schemes_legacy.md"},n=t("",91),l=[n];function h(o,r,p,d,c,k){return e(),i("div",null,l)}const u=s(a,[["render",h]]);export{E as __pageData,u as default};
diff --git a/assets/reference_command_palette.md.encBsH8h.js b/assets/reference_command_palette.md.6osWM5j9.js
similarity index 99%
rename from assets/reference_command_palette.md.encBsH8h.js
rename to assets/reference_command_palette.md.6osWM5j9.js
index f9b754b6..31f3f69a 100644
--- a/assets/reference_command_palette.md.encBsH8h.js
+++ b/assets/reference_command_palette.md.6osWM5j9.js
@@ -1,4 +1,4 @@
-import{_ as a,D as t,o as n,c as e,k as s,a as h,I as k,R as l}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"Command Palette","description":"","frontmatter":{"title":"Command Palette"},"headers":[],"relativePath":"reference/command_palette.md","filePath":"reference/command_palette.md","lastUpdated":1703773698000}'),p={name:"reference/command_palette.md"},E=l(`

Command Palette

The command palette is fed entries with .sublime-commands files.

File Format

Here's an excerpt from Packages/Default/Default.sublime-commands:

json
[
+import{_ as a,D as t,o as n,c as e,k as s,a as h,I as k,R as l}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"Command Palette","description":"","frontmatter":{"title":"Command Palette"},"headers":[],"relativePath":"reference/command_palette.md","filePath":"reference/command_palette.md","lastUpdated":1703774098000}'),p={name:"reference/command_palette.md"},E=l(`

Command Palette

The command palette is fed entries with .sublime-commands files.

File Format

Here's an excerpt from Packages/Default/Default.sublime-commands:

json
[
     { "caption": "Project: Save As", "command": "save_project_and_workspace_as" },
     { "caption": "Project: Close", "command": "close_workspace" },
     { "caption": "Project: Add Folder", "command": "prompt_add_folder" },
diff --git a/assets/reference_command_palette.md.encBsH8h.lean.js b/assets/reference_command_palette.md.6osWM5j9.lean.js
similarity index 91%
rename from assets/reference_command_palette.md.encBsH8h.lean.js
rename to assets/reference_command_palette.md.6osWM5j9.lean.js
index d384327a..7439fd46 100644
--- a/assets/reference_command_palette.md.encBsH8h.lean.js
+++ b/assets/reference_command_palette.md.6osWM5j9.lean.js
@@ -1 +1 @@
-import{_ as a,D as t,o as n,c as e,k as s,a as h,I as k,R as l}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"Command Palette","description":"","frontmatter":{"title":"Command Palette"},"headers":[],"relativePath":"reference/command_palette.md","filePath":"reference/command_palette.md","lastUpdated":1703773698000}'),p={name:"reference/command_palette.md"},E=l("",10),o=s("li",null,"Select command",-1),r=s("p",null,"Entries are filtered by current context. Not all entries will be visible at all times.",-1);function d(F,g,u,c,y,C){const i=t("Key");return n(),e("div",null,[E,s("ol",null,[s("li",null,[h("Press "),k(i,{k:"ctrl+shift+p"})]),o]),r])}const B=a(p,[["render",d]]);export{m as __pageData,B as default};
+import{_ as a,D as t,o as n,c as e,k as s,a as h,I as k,R as l}from"./chunks/framework.e02z-eDF.js";const m=JSON.parse('{"title":"Command Palette","description":"","frontmatter":{"title":"Command Palette"},"headers":[],"relativePath":"reference/command_palette.md","filePath":"reference/command_palette.md","lastUpdated":1703774098000}'),p={name:"reference/command_palette.md"},E=l("",10),o=s("li",null,"Select command",-1),r=s("p",null,"Entries are filtered by current context. Not all entries will be visible at all times.",-1);function d(F,g,u,c,y,C){const i=t("Key");return n(),e("div",null,[E,s("ol",null,[s("li",null,[h("Press "),k(i,{k:"ctrl+shift+p"})]),o]),r])}const B=a(p,[["render",d]]);export{m as __pageData,B as default};
diff --git a/assets/reference_commands.md.riK0ex_J.js b/assets/reference_commands.md.uDHhfyWI.js
similarity index 99%
rename from assets/reference_commands.md.riK0ex_J.js
rename to assets/reference_commands.md.uDHhfyWI.js
index f52f532a..985824d7 100644
--- a/assets/reference_commands.md.riK0ex_J.js
+++ b/assets/reference_commands.md.uDHhfyWI.js
@@ -1 +1 @@
-import{_ as e,o as a,c as t,R as o}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Commands Overview","description":"","frontmatter":{"title":"Commands Overview"},"headers":[],"relativePath":"reference/commands.md","filePath":"reference/commands.md","lastUpdated":1703773698000}'),i={name:"reference/commands.md"},s=o('

Commands Overview

Note

This list of commands is a work in progress.

About Paths in Command Arguments

Some commands take paths as parameters. Among these, some support snippet-like syntax, while others don't. A command of the first kind would take a parameter like ${packages}/SomeDir/SomeFile.ext whereas a command of the second kind would take a parameter like Packages/SomeDir/SomeFile.ext.

Generally, newer commands support the snippet-like syntax.

Commands expect UNIX-style paths if not otherwise noted, including on Windows (for example, /c/Program Files/Sublime Text 3/sublime_plugin.py).

Often, relative paths in arguments to commands are assumed to start at the :Data_directory:.

Commands

append

Inserts a string at the end of the view.

  • characters (String): String to be inserted.
  • force (Bool):
  • scroll_to_end (Bool):

auto_complete

Opens the auto complete list.

build

Runs a build system.

  • variant (String): Optional. The name of the variant to be run.

chain

Chains multiple commands to execute together. Below are the parameters accepted by the this command.

  • commands [[String, ArgsMapping]] or [[{"command": String, "args": ArgsMapping]]: The chain of commands that will be executed.

The chain command can be implemented using the below syntax:

json
{\n  "command": "chain", \n  "args": {\n    "commands" : [\n      ["command1", {"arg1": "value1", "arg2": "value2"}],\n      ["command2", {"arg1": "value1", "arg2": "value2"}],\n      ["command3", {"arg1": "value1", "arg2": "value2"}],\n    ] \n  }\n}

The list of commands can also be replaced with an object containing the command and arguements if required demonstrated as below:

json
{\n  "command": "chain", \n  "args": {\n    "commands" : [\n      {"command": "command1", "args": {"arg1": "value1", "arg2": "value2"}}\n      {"command": "command2", "args": {"arg1": "value1", "arg2": "value2"}}\n    ]\n  }\n}

clear_bookmarks

If no name argument, or the name "bookmarks" is specified, it removes all bookmarks set in the current file, but not the marks. If the name "mark" is specified as an argument, it removes all marks set in the current file, but not the bookmarks.

  • name (String): e.g. "mark", "bookmarks".

clear_fields

Breaks out of the active snippet field cycle.

clear_recent_files

Deletes records of recently accessed files and folders.

clear_recent_projects

Deletes records of recently accessed projects.

clone_file

Clones the current view into the same tab group, both sharing the same buffer. That means you can drag one tab to another group and every update to one view will be visible in the other one too.

close_file

Closes the active view and, under certain circumsances, the whole application.

close_folder_list

Removes all folders from the current project.

close_project

Closes the current project.

close_tag

Surrounds the current inner text with the appropiate tags.

close_window

Closes the active window.

close

Closes the active view.

commit_completion

Inserts into the buffer the item that's currently selected in the auto complete list.

context_menu

Shows the context menu.

copy

Sends the selected text to to the system clipboard.

cut

Removes the selected text and sends it to the system clipboard. Put differently, it cuts.

decrease_font_size

Decreases the font size.

delete_to_mark

Deletes the text that select_to_mark would select.

detect_indentation

Guesses the indentation from the current file.

duplicate_line

Duplicates the current line.

exec

Runs an external process asynchronously. On Windows, GUIs are supressed.

exec is the default command used by build systems, thus it provides similar functionality. However, a few options in build systems are taken care of by Sublime Text internally so they list below only contains parameters accepted by this command.

  • cmd [(String)]
  • shell_cmd (String): Shell command to use. If given overrides cmd and ignores shell.
  • file_regex (String)
  • line_regex (String)
  • working_dir (String)
  • encoding (String)
  • env [{String: String}]
  • quiet (Bool): If True no runtime information is printed if the command fails or has a non-zero exit code.
  • kill (Bool): If True will simply terminate the current build process. This is invoked via Build: Cancel command from the Command Palette.
  • update_phantoms_only (Bool)
  • hide_phantoms_only (Bool)
  • word_wrap (Bool): Whether to word-wrap the output in the build panel
  • syntax (String): Syntax file used to colour output.
  • path (String)
  • shell (Bool)

See Also

exec Target options : Detailed documentation on all parameters of the exec command.

exit

Exits the whole application with all open windows.

expand_selection

Extends the selection up to predefined limits.

  • to (Enum): Values: bol, hardbol, eol, hardeol, bof, eof, brackets, line, tag, scope, indentation.

expand_tabs

XXX

  • set_translate_tabs (Bool)

find_all_under

Finds all occurrences of the current selection or the current word.

find_next

Finds the next occurrence of the current search term.

find_prev

Finds the previous occurrence of the current search term.

find_under_expand_skip

Adds a new selection based on the current selection or expands the selection to the current word while removing the current selection.

find_under_expand

Adds a new selection based on the current selection or expands the selection to the current word.

find_under_prev

Finds the previous occurrence of the current selection or the current word.

find_under

Finds the next occurrence of the current selection or the current word.

focus_group

Gives focus to the top-most file in the specified group.

  • group (Int): The group index to focus. This is determined by the order of cells items from the current layout (see Window.set_layout).

fold_by_level

Scans the whole file and folds everything with an indentation level of level or higher. This does not unfold already folded regions if you first fold by level 2 and then by 3, for example. Sections with cursors are not folded.

  • level (Int): The level of indentation that should be folded. 0 is equivalent to running #### unfold_all.

fold_tag_attributes

Folds all tag attributes in XML files, only leaving the tag's name and the closing bracket visible.

fold

Folds the current selection and displays instead. Unfold arrows are added to the lines where a region has been folded.

hide_auto_complete

Hides the auto complete list.

hide_overlay

Hides the active overlay. Show the overlay using the show_overlay command.

hide_panel

Hides the active panel.

  • cancel (Bool): Notifies the panel to restore the selection to what it was when the panel was opened. (Only incremental find panel.)

increase_font_size

Increases the font size.

indent

Increments indentation of selection.

insert_best_completion

Inserts the best completion that can be inferred from the current context.

  • default (String): String to insert failing a best completion.

insert_snippet

Inserts a snippet from a string or .sublime-snippet file.

  • contents (String): Snippet as a string to be inserted. Remember that backslashes \\ have to be escaped, like in every other JSON string.
  • name (String): Relative path to the .sublime-snippet file to be inserted.

See Also

Snippets

Documentation on snippets and their variable features.

insert

Inserts a string.

  • characters (String): String to be inserted.

join_lines

Joins the current line with the next one.

left_delete

Deletes the character right before the caret.

lower_case

Makes the selection lower case.

move_to_group

Moves the current file to the specified group.

  • group (Int): The group index to focus. See #### focus_group command.

move_to

Advances the caret to predefined locations.

  • to (Enum): Values: bol, eol, bof, eof, brackets.
  • extend (Bool): Whether to extend the selection. Defaults to false.

move

Advances the caret by predefined units.

  • by (Enum): Values: characters, words, word_ends, subwords, subword_ends, lines, pages, stops.
  • forward (Bool): Whether to advance or reverse in the buffer.
  • word_begin (Bool)
  • empty_line (Bool)
  • punct_begin (Bool)
  • separators (Bool)
  • extend (Bool): Whether to extend the selection. Defaults to false.

new_build_system

Creates a new buffer and inserts a build system template.

new_plugin

Creates a new buffer and inserts a plugin template (a text command).

new_snippet

Creates a new buffer and inserts a snippet template.

new_window

Opens a new window.

next_bookmark

Select the next bookmarked region.

next_field

Advances the caret to the text snippet field in the current snippet field cycle.

next_misspelling

Advance to the next misspelling

next_result

Advance to the next captured result.

next_view_in_stack

Switches to the most recently active view.

next_view

Switches to the next view.

open_dir

Opens the specified directory with the default file manager.

  • dir (String): The directory to open.

open_file_settings

Opens the syntax-specific user settings file for the current syntax.

open_file

Opens the specified file. Will dynamically open resource files from sublime-package archives as read-only if the specified override file does not exist.

  • file (String): Absolute or relative path to the file to be opened. Relative paths will originate from the recently

    Expands snippet-like variables, such as $platform and $packages.

  • contents (String): This string will be written to the new buffer if the file does not exist. accessed directory (e.g. the directory of the currently opened file).

open_recent_file

Opens a recently closed file.

  • index (Int)

open_recent_folder

Opens a recently closed folder.

  • index (Int)

open_recent_project

Opens a recently closed project.

  • index (Int)

open_url

Opens the specified url with the default browser.

  • url (String)

paste_and_indent

Inserts the clipboard contents after the caret and indents contextually.

paste

Inserts the clipboard contents after the caret.

  • clipboard (String): May be selection. XXX what other values are allowed?

permute_lines

XXX

  • operation (Enum): reverse, unique, shuffle ...?

permute_selection

XXX

  • operation (Enum): reverse, unique, shuffle ...?

prev_bookmark

Select the previous bookmarked region.

prev_field

Moves the caret to the previous snippet field in the current snippet field cycle.

prev_misspelling

Move to the previous misspelling.

prev_result

Move to the previous captured result.

prev_view_in_stack

Switches to the view that was active before the most recently active view.

prev_view

Switches to the previous view.

prompt_add_folder

Prompts for a folder to add to the current project.

prompt_open_project

Prompts for a project file to open as a project.

prompt_save_as

Prompts for a new file name and saves the active file.

prompt_select_project

Opens a popup with recently accessed projects where you can fuzzy-search.

redo_or_repeat

Performs the latest action again.

redo

Reapplies the latest undone action.

refresh_folder_list

Reloads all folders in the current project and updates the side bar.

reindent

Corrects indentation of the selection with regular expressions set in the syntax's preferences. The base indentation will be that of the line before the first selected line. Sometimes does not work as expected.

reopen_last_file

Reopens the last closed file.

reopen

Reopens the current file.

  • encoding (String): The file encoding the file should be reopened with.

replace_completion_with_auto_complete

XXX

replace_completion_with_next_completion

reset_font_size

Resets the font size to the default

Note: This essentially removes the entry from your User settings, there might be other places where this has been "changed".

revert

Undoes all unsaved changes to the file.

right_delete

Deletes the character right after the caret.

run_macro_file

Runs a .sublime-macro file.

  • file (String): Relative path to the macro file.

run_macro

Runs the macro stored in the macro buffer.

save_all

Saves all open files.

save_macro

Prompts for a file path to save the macro in the macro buffer to.

save_project_as

Prompts for a new file name and saves the current project.

save

Saves the active file.

  • encoding (String): The file encoding to save as.

scroll_lines

Scrolls lines in the view.

amount [Float]: Positive values scroll lines down and negative values scroll lines up.

select_all_bookmarks

Selects all bookmarked regions.

select_all

Select the view's content.

select_bookmark

Selects a bookmarked region in the current file.

  • index (Int)

select_by_index

Focuses a certain tab in the current group.

  • index (Int): The tab index to focus.

select_lines

Adds a line to the current selection.

  • forward (Bool): Whether to add the next or previous line. Defaults to true.

select_to_mark

Selects the text between the current position of each one of the current carets and the marked position. Each caret is matched with each mark in order of occurrence, and is moved to the beginning of its selection.

If any number of selections overlap, they are joined and, of all the carets corresponding to each one of the joined selections, only the one occurring first in the file is preserved.

If the number of current carets is less or equal to the number of marks, the remaining marks in order are ignored. Conversely, if currently there are more carets than marks, the first relevant selections are produced. Of all extra marks, those contained in the selections are removed, and the rest of them are left where they are, without triggering a selection from their position.

set_build_system

Changes the current build system.

  • file (String): Path to the build system. If empty, Sublime Text tries to automatically find an appropriate build systems from specified selectors.
  • index (Int): Used in the Tools | Build System menu but otherwise probably not useful.

set_layout

Changes the group layout of the current window. This command uses the same pattern as Window.set_layout, see there for a list and explanation of parameters.

set_line_ending

Changes the line endings of the current file.

  • type (Enum): windows, unix, cr

set_mark

Marks the position of each caret in the current file. If any marks have already been set in that file, they are removed.

set_setting

Set the value of a setting. This value is view-specific.

  • setting (String): The name of the setting to changed.
  • value (*): The value to set to.

show_about_window

I think you know what this does.

show_at_center

Scrolls the view to show the selected line in the middle of the view and adjusts the horizontal scrolling if necessary.

show_overlay

Shows the requested overlay. Use the #### hide_overlay command to hide it.

  • overlay (Enum): The type of overlay to show. Possible values:

  • show_files (Bool): If using the goto overlay, start by displaying files rather than an empty widget.

  • text (String): The initial contents to put in the overlay.

show_panel

Shows a panel.

  • panel (Enum): Values: incremental_find, find, replace, find_in_files, console or output.<panel_name>.
  • pattern (String): The search string/pattern to add to the Find: field. (ST 4123+)
  • replace_pattern (String): The replacement string to add to the Replace: field. (ST 4123+)
  • reverse (Bool): Whether to search backwards in the buffer.
  • toggle (Bool): Whether to hide the panel if it's already visible.
  • highlight (Bool): Whether to highlight find results. (ST 4107+)
  • in_selection (Bool): Whether to search within current selection only. (ST 4107+)
  • preserve_case (Bool): Whether to preserve original casing when replacing text. (ST 4107+)
  • regex (Bool): Whether to perform regular expression matching. (ST 4107+)
  • use_gitignore (Bool): Whether to exclude git-ignored files from find_in_files search run. (ST4107+)
  • whole_word (Bool): Whether to search for whole words only. (ST4107+)
  • wrap (Bool): Whether to continue search at the beginning of a document if end of file is reached. (ST4107+)

show_scope_name

Shows the name for the caret's scope in the status bar.

single_selection

Collapses multiple selections into a single selection.

slurp_find_string

Copies the current selection or word into the "find" field of the find panel.

slurp_replace_string

Copies the current selection or word into the "replace" field of the find and replace panel.

soft_redo

Redoes each action stepping through granular edits.

soft_undo

Undoes each action stepping through granular edits.

sort_lines

Sorts lines.

  • case_sensitive (Bool): Whether the sort should be case sensitive.

sort_selection

Sorts lines in selection.

  • case_sensitive (Bool): Whether the sort should be case sensitive.

split_selection_into_lines

Splits the selection into multiple selections, one on each line.

swap_case

Swaps the case of each character in the selection.

swap_line_down

Swaps the current line with the line below.

swap_line_up

Swaps the current line with the line above.

swap_with_mark

Marks all the current carets' positions, removes those carets, and sets new carets at the previously marked positions, if any.

switch_file

Switches between two files with the same name and different extensions.

  • extensions (String): Extensions (without leading dot) for which switching will be enabled.

title_case

Capitalizes the selection's first character and turns the rest into lower case.

toggle_bookmark

Sets or unsets a bookmark for the active region(s). (Bookmarks can be accessed via the regions API using "bookmarks" as the key.)

toggle_comment

Comments or uncomments the active lines, if available.

  • block (Bool): Whether to insert a block comment.

toggle_distraction_free

Toggles distraction free mode on or off.

toggle_full_screen

Toggles full screen mode on or off.

toggle_minimap

Shows or hides the minimap.

toggle_overwrite

Toggles overwriting on or off.

toggle_record_macro

Starts or stops the macro recorder.

toggle_save_all_on_build

Toggles whether all open files should be saved before starting the build.

toggle_setting

Toggles the value of a boolean setting. This value is view-specific.

  • setting (String): The name of the setting to be toggled.

toggle_show_open_files

Shows ot hides the open files in the sidebar.

toggle_side_bar

Shows or hides the sidebar.

toggle_status_bar

Shows or hides the status bar.

toggle_tabs

Shows or hides the tab bar.

transpose

Makes selections or characters swap places.

With selection: The contents of the selected regions are circulated. Without selection: Swaps adjacent characters and moves the caret forward by 1.

undo

Undoes the latest action.

unexpand_tabs

XXX

  • set_translate_tabs (Bool)

unfold_all

Unfolds all folded regions.

unfold

Unfolds all folded regions in the selection or the current line if there is none.

unindent

Unindents selection.

upper_case

Makes the selection upper case.

wrap_lines

Wraps lines. By default, it wraps lines at the first ruler's column.

  • width (Int): Specifies the column at which lines should be wrapped.

yank

XXX

Discovering Commands

There are several ways to discover a command's name in order to use it as a key binding, in a macro, as a menu entry or in a plugin.

  • Browsing the default key bindings at Preferences | Key Bindings - Default. If you know the key binding whose command you want to inspect, you can just search for it using the search panel. This, of course, also works in the opposite direction.
  • sublime.log_commands(True)

    Running the above in the :console: will tell Sublime Text to print the command's name in the console whenever a command is run. You can practically just enter this, do whatever is needed to run the command you want to inspect and then look at the console. It will also print the passed arguments so you can basically get all the information you need from it. When you are done, just run the function again with False as parameter.

  • Inspecting .sublime-menu files. If your command is run by a menu item, browse the default menu file at Packages/Default/Main.sublime-menu. You will find them quick enough once you take a look at it, or see the menu documentation.

  • Similar to menus, you can do exactly the same with .sublime-command files. See completions for some documentation on completion files.
',373),n=[s];function r(l,h,d,c,p,u){return a(),t("div",null,n)}const f=e(i,[["render",r]]);export{g as __pageData,f as default}; +import{_ as e,o as a,c as t,R as o}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Commands Overview","description":"","frontmatter":{"title":"Commands Overview"},"headers":[],"relativePath":"reference/commands.md","filePath":"reference/commands.md","lastUpdated":1703774098000}'),i={name:"reference/commands.md"},s=o('

Commands Overview

Note

This list of commands is a work in progress.

About Paths in Command Arguments

Some commands take paths as parameters. Among these, some support snippet-like syntax, while others don't. A command of the first kind would take a parameter like ${packages}/SomeDir/SomeFile.ext whereas a command of the second kind would take a parameter like Packages/SomeDir/SomeFile.ext.

Generally, newer commands support the snippet-like syntax.

Commands expect UNIX-style paths if not otherwise noted, including on Windows (for example, /c/Program Files/Sublime Text 3/sublime_plugin.py).

Often, relative paths in arguments to commands are assumed to start at the :Data_directory:.

Commands

append

Inserts a string at the end of the view.

  • characters (String): String to be inserted.
  • force (Bool):
  • scroll_to_end (Bool):

auto_complete

Opens the auto complete list.

build

Runs a build system.

  • variant (String): Optional. The name of the variant to be run.

chain

Chains multiple commands to execute together. Below are the parameters accepted by the this command.

  • commands [[String, ArgsMapping]] or [[{"command": String, "args": ArgsMapping]]: The chain of commands that will be executed.

The chain command can be implemented using the below syntax:

json
{\n  "command": "chain", \n  "args": {\n    "commands" : [\n      ["command1", {"arg1": "value1", "arg2": "value2"}],\n      ["command2", {"arg1": "value1", "arg2": "value2"}],\n      ["command3", {"arg1": "value1", "arg2": "value2"}],\n    ] \n  }\n}

The list of commands can also be replaced with an object containing the command and arguements if required demonstrated as below:

json
{\n  "command": "chain", \n  "args": {\n    "commands" : [\n      {"command": "command1", "args": {"arg1": "value1", "arg2": "value2"}}\n      {"command": "command2", "args": {"arg1": "value1", "arg2": "value2"}}\n    ]\n  }\n}

clear_bookmarks

If no name argument, or the name "bookmarks" is specified, it removes all bookmarks set in the current file, but not the marks. If the name "mark" is specified as an argument, it removes all marks set in the current file, but not the bookmarks.

  • name (String): e.g. "mark", "bookmarks".

clear_fields

Breaks out of the active snippet field cycle.

clear_recent_files

Deletes records of recently accessed files and folders.

clear_recent_projects

Deletes records of recently accessed projects.

clone_file

Clones the current view into the same tab group, both sharing the same buffer. That means you can drag one tab to another group and every update to one view will be visible in the other one too.

close_file

Closes the active view and, under certain circumsances, the whole application.

close_folder_list

Removes all folders from the current project.

close_project

Closes the current project.

close_tag

Surrounds the current inner text with the appropiate tags.

close_window

Closes the active window.

close

Closes the active view.

commit_completion

Inserts into the buffer the item that's currently selected in the auto complete list.

context_menu

Shows the context menu.

copy

Sends the selected text to to the system clipboard.

cut

Removes the selected text and sends it to the system clipboard. Put differently, it cuts.

decrease_font_size

Decreases the font size.

delete_to_mark

Deletes the text that select_to_mark would select.

detect_indentation

Guesses the indentation from the current file.

duplicate_line

Duplicates the current line.

exec

Runs an external process asynchronously. On Windows, GUIs are supressed.

exec is the default command used by build systems, thus it provides similar functionality. However, a few options in build systems are taken care of by Sublime Text internally so they list below only contains parameters accepted by this command.

  • cmd [(String)]
  • shell_cmd (String): Shell command to use. If given overrides cmd and ignores shell.
  • file_regex (String)
  • line_regex (String)
  • working_dir (String)
  • encoding (String)
  • env [{String: String}]
  • quiet (Bool): If True no runtime information is printed if the command fails or has a non-zero exit code.
  • kill (Bool): If True will simply terminate the current build process. This is invoked via Build: Cancel command from the Command Palette.
  • update_phantoms_only (Bool)
  • hide_phantoms_only (Bool)
  • word_wrap (Bool): Whether to word-wrap the output in the build panel
  • syntax (String): Syntax file used to colour output.
  • path (String)
  • shell (Bool)

See Also

exec Target options : Detailed documentation on all parameters of the exec command.

exit

Exits the whole application with all open windows.

expand_selection

Extends the selection up to predefined limits.

  • to (Enum): Values: bol, hardbol, eol, hardeol, bof, eof, brackets, line, tag, scope, indentation.

expand_tabs

XXX

  • set_translate_tabs (Bool)

find_all_under

Finds all occurrences of the current selection or the current word.

find_next

Finds the next occurrence of the current search term.

find_prev

Finds the previous occurrence of the current search term.

find_under_expand_skip

Adds a new selection based on the current selection or expands the selection to the current word while removing the current selection.

find_under_expand

Adds a new selection based on the current selection or expands the selection to the current word.

find_under_prev

Finds the previous occurrence of the current selection or the current word.

find_under

Finds the next occurrence of the current selection or the current word.

focus_group

Gives focus to the top-most file in the specified group.

  • group (Int): The group index to focus. This is determined by the order of cells items from the current layout (see Window.set_layout).

fold_by_level

Scans the whole file and folds everything with an indentation level of level or higher. This does not unfold already folded regions if you first fold by level 2 and then by 3, for example. Sections with cursors are not folded.

  • level (Int): The level of indentation that should be folded. 0 is equivalent to running #### unfold_all.

fold_tag_attributes

Folds all tag attributes in XML files, only leaving the tag's name and the closing bracket visible.

fold

Folds the current selection and displays instead. Unfold arrows are added to the lines where a region has been folded.

hide_auto_complete

Hides the auto complete list.

hide_overlay

Hides the active overlay. Show the overlay using the show_overlay command.

hide_panel

Hides the active panel.

  • cancel (Bool): Notifies the panel to restore the selection to what it was when the panel was opened. (Only incremental find panel.)

increase_font_size

Increases the font size.

indent

Increments indentation of selection.

insert_best_completion

Inserts the best completion that can be inferred from the current context.

  • default (String): String to insert failing a best completion.

insert_snippet

Inserts a snippet from a string or .sublime-snippet file.

  • contents (String): Snippet as a string to be inserted. Remember that backslashes \\ have to be escaped, like in every other JSON string.
  • name (String): Relative path to the .sublime-snippet file to be inserted.

See Also

Snippets

Documentation on snippets and their variable features.

insert

Inserts a string.

  • characters (String): String to be inserted.

join_lines

Joins the current line with the next one.

left_delete

Deletes the character right before the caret.

lower_case

Makes the selection lower case.

move_to_group

Moves the current file to the specified group.

  • group (Int): The group index to focus. See #### focus_group command.

move_to

Advances the caret to predefined locations.

  • to (Enum): Values: bol, eol, bof, eof, brackets.
  • extend (Bool): Whether to extend the selection. Defaults to false.

move

Advances the caret by predefined units.

  • by (Enum): Values: characters, words, word_ends, subwords, subword_ends, lines, pages, stops.
  • forward (Bool): Whether to advance or reverse in the buffer.
  • word_begin (Bool)
  • empty_line (Bool)
  • punct_begin (Bool)
  • separators (Bool)
  • extend (Bool): Whether to extend the selection. Defaults to false.

new_build_system

Creates a new buffer and inserts a build system template.

new_plugin

Creates a new buffer and inserts a plugin template (a text command).

new_snippet

Creates a new buffer and inserts a snippet template.

new_window

Opens a new window.

next_bookmark

Select the next bookmarked region.

next_field

Advances the caret to the text snippet field in the current snippet field cycle.

next_misspelling

Advance to the next misspelling

next_result

Advance to the next captured result.

next_view_in_stack

Switches to the most recently active view.

next_view

Switches to the next view.

open_dir

Opens the specified directory with the default file manager.

  • dir (String): The directory to open.

open_file_settings

Opens the syntax-specific user settings file for the current syntax.

open_file

Opens the specified file. Will dynamically open resource files from sublime-package archives as read-only if the specified override file does not exist.

  • file (String): Absolute or relative path to the file to be opened. Relative paths will originate from the recently

    Expands snippet-like variables, such as $platform and $packages.

  • contents (String): This string will be written to the new buffer if the file does not exist. accessed directory (e.g. the directory of the currently opened file).

open_recent_file

Opens a recently closed file.

  • index (Int)

open_recent_folder

Opens a recently closed folder.

  • index (Int)

open_recent_project

Opens a recently closed project.

  • index (Int)

open_url

Opens the specified url with the default browser.

  • url (String)

paste_and_indent

Inserts the clipboard contents after the caret and indents contextually.

paste

Inserts the clipboard contents after the caret.

  • clipboard (String): May be selection. XXX what other values are allowed?

permute_lines

XXX

  • operation (Enum): reverse, unique, shuffle ...?

permute_selection

XXX

  • operation (Enum): reverse, unique, shuffle ...?

prev_bookmark

Select the previous bookmarked region.

prev_field

Moves the caret to the previous snippet field in the current snippet field cycle.

prev_misspelling

Move to the previous misspelling.

prev_result

Move to the previous captured result.

prev_view_in_stack

Switches to the view that was active before the most recently active view.

prev_view

Switches to the previous view.

prompt_add_folder

Prompts for a folder to add to the current project.

prompt_open_project

Prompts for a project file to open as a project.

prompt_save_as

Prompts for a new file name and saves the active file.

prompt_select_project

Opens a popup with recently accessed projects where you can fuzzy-search.

redo_or_repeat

Performs the latest action again.

redo

Reapplies the latest undone action.

refresh_folder_list

Reloads all folders in the current project and updates the side bar.

reindent

Corrects indentation of the selection with regular expressions set in the syntax's preferences. The base indentation will be that of the line before the first selected line. Sometimes does not work as expected.

reopen_last_file

Reopens the last closed file.

reopen

Reopens the current file.

  • encoding (String): The file encoding the file should be reopened with.

replace_completion_with_auto_complete

XXX

replace_completion_with_next_completion

reset_font_size

Resets the font size to the default

Note: This essentially removes the entry from your User settings, there might be other places where this has been "changed".

revert

Undoes all unsaved changes to the file.

right_delete

Deletes the character right after the caret.

run_macro_file

Runs a .sublime-macro file.

  • file (String): Relative path to the macro file.

run_macro

Runs the macro stored in the macro buffer.

save_all

Saves all open files.

save_macro

Prompts for a file path to save the macro in the macro buffer to.

save_project_as

Prompts for a new file name and saves the current project.

save

Saves the active file.

  • encoding (String): The file encoding to save as.

scroll_lines

Scrolls lines in the view.

amount [Float]: Positive values scroll lines down and negative values scroll lines up.

select_all_bookmarks

Selects all bookmarked regions.

select_all

Select the view's content.

select_bookmark

Selects a bookmarked region in the current file.

  • index (Int)

select_by_index

Focuses a certain tab in the current group.

  • index (Int): The tab index to focus.

select_lines

Adds a line to the current selection.

  • forward (Bool): Whether to add the next or previous line. Defaults to true.

select_to_mark

Selects the text between the current position of each one of the current carets and the marked position. Each caret is matched with each mark in order of occurrence, and is moved to the beginning of its selection.

If any number of selections overlap, they are joined and, of all the carets corresponding to each one of the joined selections, only the one occurring first in the file is preserved.

If the number of current carets is less or equal to the number of marks, the remaining marks in order are ignored. Conversely, if currently there are more carets than marks, the first relevant selections are produced. Of all extra marks, those contained in the selections are removed, and the rest of them are left where they are, without triggering a selection from their position.

set_build_system

Changes the current build system.

  • file (String): Path to the build system. If empty, Sublime Text tries to automatically find an appropriate build systems from specified selectors.
  • index (Int): Used in the Tools | Build System menu but otherwise probably not useful.

set_layout

Changes the group layout of the current window. This command uses the same pattern as Window.set_layout, see there for a list and explanation of parameters.

set_line_ending

Changes the line endings of the current file.

  • type (Enum): windows, unix, cr

set_mark

Marks the position of each caret in the current file. If any marks have already been set in that file, they are removed.

set_setting

Set the value of a setting. This value is view-specific.

  • setting (String): The name of the setting to changed.
  • value (*): The value to set to.

show_about_window

I think you know what this does.

show_at_center

Scrolls the view to show the selected line in the middle of the view and adjusts the horizontal scrolling if necessary.

show_overlay

Shows the requested overlay. Use the #### hide_overlay command to hide it.

  • overlay (Enum): The type of overlay to show. Possible values:

  • show_files (Bool): If using the goto overlay, start by displaying files rather than an empty widget.

  • text (String): The initial contents to put in the overlay.

show_panel

Shows a panel.

  • panel (Enum): Values: incremental_find, find, replace, find_in_files, console or output.<panel_name>.
  • pattern (String): The search string/pattern to add to the Find: field. (ST 4123+)
  • replace_pattern (String): The replacement string to add to the Replace: field. (ST 4123+)
  • reverse (Bool): Whether to search backwards in the buffer.
  • toggle (Bool): Whether to hide the panel if it's already visible.
  • highlight (Bool): Whether to highlight find results. (ST 4107+)
  • in_selection (Bool): Whether to search within current selection only. (ST 4107+)
  • preserve_case (Bool): Whether to preserve original casing when replacing text. (ST 4107+)
  • regex (Bool): Whether to perform regular expression matching. (ST 4107+)
  • use_gitignore (Bool): Whether to exclude git-ignored files from find_in_files search run. (ST4107+)
  • whole_word (Bool): Whether to search for whole words only. (ST4107+)
  • wrap (Bool): Whether to continue search at the beginning of a document if end of file is reached. (ST4107+)

show_scope_name

Shows the name for the caret's scope in the status bar.

single_selection

Collapses multiple selections into a single selection.

slurp_find_string

Copies the current selection or word into the "find" field of the find panel.

slurp_replace_string

Copies the current selection or word into the "replace" field of the find and replace panel.

soft_redo

Redoes each action stepping through granular edits.

soft_undo

Undoes each action stepping through granular edits.

sort_lines

Sorts lines.

  • case_sensitive (Bool): Whether the sort should be case sensitive.

sort_selection

Sorts lines in selection.

  • case_sensitive (Bool): Whether the sort should be case sensitive.

split_selection_into_lines

Splits the selection into multiple selections, one on each line.

swap_case

Swaps the case of each character in the selection.

swap_line_down

Swaps the current line with the line below.

swap_line_up

Swaps the current line with the line above.

swap_with_mark

Marks all the current carets' positions, removes those carets, and sets new carets at the previously marked positions, if any.

switch_file

Switches between two files with the same name and different extensions.

  • extensions (String): Extensions (without leading dot) for which switching will be enabled.

title_case

Capitalizes the selection's first character and turns the rest into lower case.

toggle_bookmark

Sets or unsets a bookmark for the active region(s). (Bookmarks can be accessed via the regions API using "bookmarks" as the key.)

toggle_comment

Comments or uncomments the active lines, if available.

  • block (Bool): Whether to insert a block comment.

toggle_distraction_free

Toggles distraction free mode on or off.

toggle_full_screen

Toggles full screen mode on or off.

toggle_minimap

Shows or hides the minimap.

toggle_overwrite

Toggles overwriting on or off.

toggle_record_macro

Starts or stops the macro recorder.

toggle_save_all_on_build

Toggles whether all open files should be saved before starting the build.

toggle_setting

Toggles the value of a boolean setting. This value is view-specific.

  • setting (String): The name of the setting to be toggled.

toggle_show_open_files

Shows ot hides the open files in the sidebar.

toggle_side_bar

Shows or hides the sidebar.

toggle_status_bar

Shows or hides the status bar.

toggle_tabs

Shows or hides the tab bar.

transpose

Makes selections or characters swap places.

With selection: The contents of the selected regions are circulated. Without selection: Swaps adjacent characters and moves the caret forward by 1.

undo

Undoes the latest action.

unexpand_tabs

XXX

  • set_translate_tabs (Bool)

unfold_all

Unfolds all folded regions.

unfold

Unfolds all folded regions in the selection or the current line if there is none.

unindent

Unindents selection.

upper_case

Makes the selection upper case.

wrap_lines

Wraps lines. By default, it wraps lines at the first ruler's column.

  • width (Int): Specifies the column at which lines should be wrapped.

yank

XXX

Discovering Commands

There are several ways to discover a command's name in order to use it as a key binding, in a macro, as a menu entry or in a plugin.

  • Browsing the default key bindings at Preferences | Key Bindings - Default. If you know the key binding whose command you want to inspect, you can just search for it using the search panel. This, of course, also works in the opposite direction.
  • sublime.log_commands(True)

    Running the above in the :console: will tell Sublime Text to print the command's name in the console whenever a command is run. You can practically just enter this, do whatever is needed to run the command you want to inspect and then look at the console. It will also print the passed arguments so you can basically get all the information you need from it. When you are done, just run the function again with False as parameter.

  • Inspecting .sublime-menu files. If your command is run by a menu item, browse the default menu file at Packages/Default/Main.sublime-menu. You will find them quick enough once you take a look at it, or see the menu documentation.

  • Similar to menus, you can do exactly the same with .sublime-command files. See completions for some documentation on completion files.
',373),n=[s];function r(l,h,d,c,p,u){return a(),t("div",null,n)}const f=e(i,[["render",r]]);export{g as __pageData,f as default}; diff --git a/assets/reference_commands.md.riK0ex_J.lean.js b/assets/reference_commands.md.uDHhfyWI.lean.js similarity index 86% rename from assets/reference_commands.md.riK0ex_J.lean.js rename to assets/reference_commands.md.uDHhfyWI.lean.js index bef2c5e6..139348a0 100644 --- a/assets/reference_commands.md.riK0ex_J.lean.js +++ b/assets/reference_commands.md.uDHhfyWI.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as t,R as o}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Commands Overview","description":"","frontmatter":{"title":"Commands Overview"},"headers":[],"relativePath":"reference/commands.md","filePath":"reference/commands.md","lastUpdated":1703773698000}'),i={name:"reference/commands.md"},s=o("",373),n=[s];function r(l,h,d,c,p,u){return a(),t("div",null,n)}const f=e(i,[["render",r]]);export{g as __pageData,f as default}; +import{_ as e,o as a,c as t,R as o}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Commands Overview","description":"","frontmatter":{"title":"Commands Overview"},"headers":[],"relativePath":"reference/commands.md","filePath":"reference/commands.md","lastUpdated":1703774098000}'),i={name:"reference/commands.md"},s=o("",373),n=[s];function r(l,h,d,c,p,u){return a(),t("div",null,n)}const f=e(i,[["render",r]]);export{g as __pageData,f as default}; diff --git a/assets/reference_comments.md.FzDTffi2.js b/assets/reference_comments.md.C6uA-pVp.js similarity index 99% rename from assets/reference_comments.md.FzDTffi2.js rename to assets/reference_comments.md.C6uA-pVp.js index a7f808a4..db3e79fe 100644 --- a/assets/reference_comments.md.FzDTffi2.js +++ b/assets/reference_comments.md.C6uA-pVp.js @@ -1,4 +1,4 @@ -import{_ as n,D as l,o as h,c as k,k as s,I as a,R as t}from"./chunks/framework.e02z-eDF.js";const C=JSON.parse('{"title":"Comments","description":"","frontmatter":{"title":"Comments"},"headers":[],"relativePath":"reference/comments.md","filePath":"reference/comments.md","lastUpdated":1703773698000}'),e={name:"reference/comments.md"},p=t(`

Comments

Sublime Text provides a default command to comment and uncomment lines of code. This command can be enabled for any type of file using metadata files.

File Format

Comment markers are defined using metadata files. However, because metadata for comment markers is commonly required by packages, it's discussed separately in this page for convenience.

Just as regular metadata files, comment metadata files have the .tmPreferences extension and use the Property List format. The file name is ignored by Sublime Text.

See Also

Metadata Detailed documentation on metadata.

Example

Let's see a basic example of a comment metadata file:

xml
<?xml version="1.0" encoding="UTF-8"?>
+import{_ as n,D as l,o as h,c as k,k as s,I as a,R as t}from"./chunks/framework.e02z-eDF.js";const C=JSON.parse('{"title":"Comments","description":"","frontmatter":{"title":"Comments"},"headers":[],"relativePath":"reference/comments.md","filePath":"reference/comments.md","lastUpdated":1703774098000}'),e={name:"reference/comments.md"},p=t(`

Comments

Sublime Text provides a default command to comment and uncomment lines of code. This command can be enabled for any type of file using metadata files.

File Format

Comment markers are defined using metadata files. However, because metadata for comment markers is commonly required by packages, it's discussed separately in this page for convenience.

Just as regular metadata files, comment metadata files have the .tmPreferences extension and use the Property List format. The file name is ignored by Sublime Text.

See Also

Metadata Detailed documentation on metadata.

Example

Let's see a basic example of a comment metadata file:

xml
<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
diff --git a/assets/reference_comments.md.FzDTffi2.lean.js b/assets/reference_comments.md.C6uA-pVp.lean.js
similarity index 92%
rename from assets/reference_comments.md.FzDTffi2.lean.js
rename to assets/reference_comments.md.C6uA-pVp.lean.js
index c0542a87..3d3f1f36 100644
--- a/assets/reference_comments.md.FzDTffi2.lean.js
+++ b/assets/reference_comments.md.C6uA-pVp.lean.js
@@ -1 +1 @@
-import{_ as n,D as l,o as h,c as k,k as s,I as a,R as t}from"./chunks/framework.e02z-eDF.js";const C=JSON.parse('{"title":"Comments","description":"","frontmatter":{"title":"Comments"},"headers":[],"relativePath":"reference/comments.md","filePath":"reference/comments.md","lastUpdated":1703773698000}'),e={name:"reference/comments.md"},p=t("",43),E=s("thead",null,[s("tr",null,[s("th",null,"Description"),s("th",null,"Shortcut")])],-1),r=s("td",null,"Toggle line comment",-1),d=s("td",null,"Toggle block comment",-1),g=t("",2);function y(o,c,m,u,D,A){const i=l("Key");return h(),k("div",null,[p,s("table",null,[E,s("tbody",null,[s("tr",null,[r,s("td",null,[a(i,{k:"ctrl+/"})])]),s("tr",null,[d,s("td",null,[a(i,{k:"ctrl+shift+/"})])])])]),g])}const T=n(e,[["render",y]]);export{C as __pageData,T as default};
+import{_ as n,D as l,o as h,c as k,k as s,I as a,R as t}from"./chunks/framework.e02z-eDF.js";const C=JSON.parse('{"title":"Comments","description":"","frontmatter":{"title":"Comments"},"headers":[],"relativePath":"reference/comments.md","filePath":"reference/comments.md","lastUpdated":1703774098000}'),e={name:"reference/comments.md"},p=t("",43),E=s("thead",null,[s("tr",null,[s("th",null,"Description"),s("th",null,"Shortcut")])],-1),r=s("td",null,"Toggle line comment",-1),d=s("td",null,"Toggle block comment",-1),g=t("",2);function y(o,c,m,u,D,A){const i=l("Key");return h(),k("div",null,[p,s("table",null,[E,s("tbody",null,[s("tr",null,[r,s("td",null,[a(i,{k:"ctrl+/"})])]),s("tr",null,[d,s("td",null,[a(i,{k:"ctrl+shift+/"})])])])]),g])}const T=n(e,[["render",y]]);export{C as __pageData,T as default};
diff --git a/assets/reference_completions.md.dAoa8r2o.js b/assets/reference_completions.md.yYhZHeJr.js
similarity index 99%
rename from assets/reference_completions.md.dAoa8r2o.js
rename to assets/reference_completions.md.yYhZHeJr.js
index a4d2e698..a1367323 100644
--- a/assets/reference_completions.md.dAoa8r2o.js
+++ b/assets/reference_completions.md.yYhZHeJr.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as t,R as a}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Completions Files","description":"","frontmatter":{"title":"Completions Files"},"headers":[],"relativePath":"reference/completions.md","filePath":"reference/completions.md","lastUpdated":1703773698000}'),e={name:"reference/completions.md"},n=a(`

Completions Files

See Also

Completions : Introduction to the different types of completions

Completions aren't limited to completions files, because other sources contribute to the completions list (see above). However, the most explicit way Sublime Text provides you to feed it completions is by means of .sublime-completions files.

This topic only deals with the format of a .sublime-completions file.

File Format

Completions are JSON files with the .sublime-completions extension. Entries in completions files can contain either snippet-like strings or plain text.

Example

Here's an example (with HTML completions):

json
{
+import{_ as s,o as i,c as t,R as a}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Completions Files","description":"","frontmatter":{"title":"Completions Files"},"headers":[],"relativePath":"reference/completions.md","filePath":"reference/completions.md","lastUpdated":1703774098000}'),e={name:"reference/completions.md"},n=a(`

Completions Files

See Also

Completions : Introduction to the different types of completions

Completions aren't limited to completions files, because other sources contribute to the completions list (see above). However, the most explicit way Sublime Text provides you to feed it completions is by means of .sublime-completions files.

This topic only deals with the format of a .sublime-completions file.

File Format

Completions are JSON files with the .sublime-completions extension. Entries in completions files can contain either snippet-like strings or plain text.

Example

Here's an example (with HTML completions):

json
{
    "scope": "text.html - source - meta.tag, punctuation.definition.tag.begin",
 
    "completions":
diff --git a/assets/reference_completions.md.dAoa8r2o.lean.js b/assets/reference_completions.md.yYhZHeJr.lean.js
similarity index 86%
rename from assets/reference_completions.md.dAoa8r2o.lean.js
rename to assets/reference_completions.md.yYhZHeJr.lean.js
index df0dbc6d..7ef5d47a 100644
--- a/assets/reference_completions.md.dAoa8r2o.lean.js
+++ b/assets/reference_completions.md.yYhZHeJr.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as t,R as a}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Completions Files","description":"","frontmatter":{"title":"Completions Files"},"headers":[],"relativePath":"reference/completions.md","filePath":"reference/completions.md","lastUpdated":1703773698000}'),e={name:"reference/completions.md"},n=a("",23),l=[n];function o(p,h,k,r,d,E){return i(),t("div",null,l)}const u=s(e,[["render",o]]);export{g as __pageData,u as default};
+import{_ as s,o as i,c as t,R as a}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Completions Files","description":"","frontmatter":{"title":"Completions Files"},"headers":[],"relativePath":"reference/completions.md","filePath":"reference/completions.md","lastUpdated":1703774098000}'),e={name:"reference/completions.md"},n=a("",23),l=[n];function o(p,h,k,r,d,E){return i(),t("div",null,l)}const u=s(e,[["render",o]]);export{g as __pageData,u as default};
diff --git a/assets/reference_index.md.5ym4GuWZ.js b/assets/reference_index.md.QPkQ1nWf.js
similarity index 91%
rename from assets/reference_index.md.5ym4GuWZ.js
rename to assets/reference_index.md.QPkQ1nWf.js
index 492e9e03..014fd253 100644
--- a/assets/reference_index.md.5ym4GuWZ.js
+++ b/assets/reference_index.md.QPkQ1nWf.js
@@ -1 +1 @@
-import{_ as n,o as t,c as a,k as e,a as r}from"./chunks/framework.e02z-eDF.js";const x=JSON.parse('{"title":"Reference","description":"","frontmatter":{"title":"Reference"},"headers":[],"relativePath":"reference/index.md","filePath":"reference/index.md","lastUpdated":1703773698000}'),c={name:"reference/index.md"},s=e("h1",{id:"reference",tabindex:"-1"},[r("Reference "),e("a",{class:"header-anchor",href:"#reference","aria-label":'Permalink to "Reference"'},"​")],-1),o=e("p",null,"This section contains concise technical information about Sublime Texts configuration files, also called resource files. It is intended as a quick reference for advanced users.",-1),i=[s,o];function d(f,l,_,h,p,m){return t(),a("div",null,i)}const k=n(c,[["render",d]]);export{x as __pageData,k as default};
+import{_ as n,o as t,c as a,k as e,a as r}from"./chunks/framework.e02z-eDF.js";const x=JSON.parse('{"title":"Reference","description":"","frontmatter":{"title":"Reference"},"headers":[],"relativePath":"reference/index.md","filePath":"reference/index.md","lastUpdated":1703774098000}'),c={name:"reference/index.md"},s=e("h1",{id:"reference",tabindex:"-1"},[r("Reference "),e("a",{class:"header-anchor",href:"#reference","aria-label":'Permalink to "Reference"'},"​")],-1),o=e("p",null,"This section contains concise technical information about Sublime Texts configuration files, also called resource files. It is intended as a quick reference for advanced users.",-1),i=[s,o];function d(f,l,_,h,p,m){return t(),a("div",null,i)}const k=n(c,[["render",d]]);export{x as __pageData,k as default};
diff --git a/assets/reference_index.md.5ym4GuWZ.lean.js b/assets/reference_index.md.QPkQ1nWf.lean.js
similarity index 91%
rename from assets/reference_index.md.5ym4GuWZ.lean.js
rename to assets/reference_index.md.QPkQ1nWf.lean.js
index 492e9e03..014fd253 100644
--- a/assets/reference_index.md.5ym4GuWZ.lean.js
+++ b/assets/reference_index.md.QPkQ1nWf.lean.js
@@ -1 +1 @@
-import{_ as n,o as t,c as a,k as e,a as r}from"./chunks/framework.e02z-eDF.js";const x=JSON.parse('{"title":"Reference","description":"","frontmatter":{"title":"Reference"},"headers":[],"relativePath":"reference/index.md","filePath":"reference/index.md","lastUpdated":1703773698000}'),c={name:"reference/index.md"},s=e("h1",{id:"reference",tabindex:"-1"},[r("Reference "),e("a",{class:"header-anchor",href:"#reference","aria-label":'Permalink to "Reference"'},"​")],-1),o=e("p",null,"This section contains concise technical information about Sublime Texts configuration files, also called resource files. It is intended as a quick reference for advanced users.",-1),i=[s,o];function d(f,l,_,h,p,m){return t(),a("div",null,i)}const k=n(c,[["render",d]]);export{x as __pageData,k as default};
+import{_ as n,o as t,c as a,k as e,a as r}from"./chunks/framework.e02z-eDF.js";const x=JSON.parse('{"title":"Reference","description":"","frontmatter":{"title":"Reference"},"headers":[],"relativePath":"reference/index.md","filePath":"reference/index.md","lastUpdated":1703774098000}'),c={name:"reference/index.md"},s=e("h1",{id:"reference",tabindex:"-1"},[r("Reference "),e("a",{class:"header-anchor",href:"#reference","aria-label":'Permalink to "Reference"'},"​")],-1),o=e("p",null,"This section contains concise technical information about Sublime Texts configuration files, also called resource files. It is intended as a quick reference for advanced users.",-1),i=[s,o];function d(f,l,_,h,p,m){return t(),a("div",null,i)}const k=n(c,[["render",d]]);export{x as __pageData,k as default};
diff --git a/assets/reference_key_bindings.md.aRVdPX8Y.js b/assets/reference_key_bindings.md.FocxM_HK.js
similarity index 99%
rename from assets/reference_key_bindings.md.aRVdPX8Y.js
rename to assets/reference_key_bindings.md.FocxM_HK.js
index 37f4bda4..02fffdb7 100644
--- a/assets/reference_key_bindings.md.aRVdPX8Y.js
+++ b/assets/reference_key_bindings.md.FocxM_HK.js
@@ -1,4 +1,4 @@
-import{_ as e,o as t,c as i,R as s}from"./chunks/framework.e02z-eDF.js";const y=JSON.parse('{"title":"Key Bindings","description":"","frontmatter":{"title":"Key Bindings"},"headers":[],"relativePath":"reference/key_bindings.md","filePath":"reference/key_bindings.md","lastUpdated":1703773698000}'),a={name:"reference/key_bindings.md"},o=s(`

Key Bindings

Key bindings map key presses to commands.

File Format

Key bindings are stored in .sublime-keymap files and defined in JSON. Keymap files may be located anywhere in a package.

Naming Keymap Files

Any keymap named Default.sublime-keymap will always be applied in all platforms.

Additionally, each platform can optionally have its own keymap:

  • Default (Windows).sublime-keymap
  • Default (OSX).sublime-keymap
  • Default (Linux).sublime-keymap

Sublime Text will ignore any .sublime-keymap file whose name doesn't follow the patterns just described.

Structure of a Key Binding

Keymaps are arrays of key bindings. These are all valid elements in a key binding:

keys : An array of case-sensitive keys. Modifiers can be specified with the + sign. You can build chords by adding elements to the array (for example, ["ctrl+k","ctrl+j"]). Ambiguous chords are resolved with a timeout.

command : Name of the command to be executed.

args : Dictionary of arguments to be passed to command. Keys must be names of parameters to command.

context : Array of conditions that determine a particular context. All conditions must evaluate to true for the context to be active. See Structure of a Context below for more information.

Here's an example:

json
{ "keys": ["shift+enter"], "command": "insert_snippet", "args": {"contents": "\\n\\t$0\\n"}, "context":
+import{_ as e,o as t,c as i,R as s}from"./chunks/framework.e02z-eDF.js";const y=JSON.parse('{"title":"Key Bindings","description":"","frontmatter":{"title":"Key Bindings"},"headers":[],"relativePath":"reference/key_bindings.md","filePath":"reference/key_bindings.md","lastUpdated":1703774098000}'),a={name:"reference/key_bindings.md"},o=s(`

Key Bindings

Key bindings map key presses to commands.

File Format

Key bindings are stored in .sublime-keymap files and defined in JSON. Keymap files may be located anywhere in a package.

Naming Keymap Files

Any keymap named Default.sublime-keymap will always be applied in all platforms.

Additionally, each platform can optionally have its own keymap:

  • Default (Windows).sublime-keymap
  • Default (OSX).sublime-keymap
  • Default (Linux).sublime-keymap

Sublime Text will ignore any .sublime-keymap file whose name doesn't follow the patterns just described.

Structure of a Key Binding

Keymaps are arrays of key bindings. These are all valid elements in a key binding:

keys : An array of case-sensitive keys. Modifiers can be specified with the + sign. You can build chords by adding elements to the array (for example, ["ctrl+k","ctrl+j"]). Ambiguous chords are resolved with a timeout.

command : Name of the command to be executed.

args : Dictionary of arguments to be passed to command. Keys must be names of parameters to command.

context : Array of conditions that determine a particular context. All conditions must evaluate to true for the context to be active. See Structure of a Context below for more information.

Here's an example:

json
{ "keys": ["shift+enter"], "command": "insert_snippet", "args": {"contents": "\\n\\t$0\\n"}, "context":
    [
       { "key": "setting.auto_indent", "operator": "equal", "operand": true },
       { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
diff --git a/assets/reference_key_bindings.md.aRVdPX8Y.lean.js b/assets/reference_key_bindings.md.FocxM_HK.lean.js
similarity index 86%
rename from assets/reference_key_bindings.md.aRVdPX8Y.lean.js
rename to assets/reference_key_bindings.md.FocxM_HK.lean.js
index 5d0d4a8d..52635015 100644
--- a/assets/reference_key_bindings.md.aRVdPX8Y.lean.js
+++ b/assets/reference_key_bindings.md.FocxM_HK.lean.js
@@ -1 +1 @@
-import{_ as e,o as t,c as i,R as s}from"./chunks/framework.e02z-eDF.js";const y=JSON.parse('{"title":"Key Bindings","description":"","frontmatter":{"title":"Key Bindings"},"headers":[],"relativePath":"reference/key_bindings.md","filePath":"reference/key_bindings.md","lastUpdated":1703773698000}'),a={name:"reference/key_bindings.md"},o=s("",75),d=[o];function n(r,l,h,c,p,k){return t(),i("div",null,d)}const g=e(a,[["render",n]]);export{y as __pageData,g as default};
+import{_ as e,o as t,c as i,R as s}from"./chunks/framework.e02z-eDF.js";const y=JSON.parse('{"title":"Key Bindings","description":"","frontmatter":{"title":"Key Bindings"},"headers":[],"relativePath":"reference/key_bindings.md","filePath":"reference/key_bindings.md","lastUpdated":1703774098000}'),a={name:"reference/key_bindings.md"},o=s("",75),d=[o];function n(r,l,h,c,p,k){return t(),i("div",null,d)}const g=e(a,[["render",n]]);export{y as __pageData,g as default};
diff --git a/assets/reference_keyboard_shortcuts_osx.md._UKInUPX.js b/assets/reference_keyboard_shortcuts_osx.md.YWxghirF.js
similarity index 99%
rename from assets/reference_keyboard_shortcuts_osx.md._UKInUPX.js
rename to assets/reference_keyboard_shortcuts_osx.md.YWxghirF.js
index c217ea49..07d81508 100644
--- a/assets/reference_keyboard_shortcuts_osx.md._UKInUPX.js
+++ b/assets/reference_keyboard_shortcuts_osx.md.YWxghirF.js
@@ -1 +1 @@
-import{_ as e,D as d,o as s,c as u,k as t,I as n,R as r,a as o}from"./chunks/framework.e02z-eDF.js";const Zt=JSON.parse('{"title":"Keyboard Shortcuts - OSX","description":"","frontmatter":{"title":"Keyboard Shortcuts - OSX"},"headers":[],"relativePath":"reference/keyboard_shortcuts_osx.md","filePath":"reference/keyboard_shortcuts_osx.md","lastUpdated":1703773698000}'),a={name:"reference/keyboard_shortcuts_osx.md"},c=r('

Keyboard Shortcuts - OSX

WARNING

This topic is a draft and may contain wrong information.

Editing

',3),i=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),h=t("td",null,"Cut line",-1),_=t("td",null,"Insert line after",-1),m=t("td",null,"Insert line before",-1),k=t("td",null,"Move line/selection up",-1),p=t("td",null,"Move line/selection down",-1),f=t("td",null,"Select line - Repeat to select next lines",-1),b=t("td",null,"Select word - Repeat to select next occurrence",-1),g=t("td",null,"Select all occurrences of current selection",-1),y=t("td",null,"Extra cursor on the line above",-1),w=t("td",null,"Extra cursor on the line below",-1),x=t("td",null,"Jump to closing parentheses Repeat to jump to opening parentheses",-1),S=t("td",null,"Select all contents of the current parentheses",-1),v=t("td",null,"Move to beginning of line",-1),C=t("td",null,"Move to beginning of text on line",-1),P=t("td",null,"Move to end of line",-1),T=t("td",null,"Delete from cursor to end of line",-1),K=t("td",null,"Delete from cursor to start of line",-1),N=t("td",null,"Indent current line(s)",-1),R=t("td",null,"Un-indent current line(s)",-1),G=t("td",null,"Duplicate line(s)",-1),I=t("td",null,"Join line below to the end of the current line",-1),D=t("td",null,"Comment/un-comment current line",-1),A=t("td",null,"Block comment current selection",-1),B=t("td",null,"Redo, or repeat last keyboard shortcut command",-1),E=t("td",null,"Paste and indent correctly",-1),F=t("td",null,"Select next auto-complete suggestion",-1),J=t("td",null,"Soft undo; jumps to your last change before undoing change when repeated",-1),M=t("td",null,"Column selection up",-1),O=t("td",null,"Column selection down",-1),V=t("td",null,"Wrap Selection in html tag",-1),q=t("td",null,"Delete current line of cursor",-1),X=t("h2",{id:"navigation-goto-anywhere",tabindex:"-1"},[o("Navigation/Goto Anywhere "),t("a",{class:"header-anchor",href:"#navigation-goto-anywhere","aria-label":'Permalink to "Navigation/Goto Anywhere"'},"​")],-1),$=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),j=t("td",null,"Quick-open files by name",-1),U=t("td",null,"Goto symbol",-1),W=t("tr",null,[t("td"),t("td",null,"Goto word in current file")],-1),L=t("td",null,"Goto line in current file",-1),Q=t("h2",{id:"general",tabindex:"-1"},[o("General "),t("a",{class:"header-anchor",href:"#general","aria-label":'Permalink to "General"'},"​")],-1),z=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),H=t("td",null,"Command Palette",-1),Y=t("td",null,"Python Console",-1),Z=t("td",null,"Toggle fullscreen mode",-1),tt=t("td",null,"Toggle distraction-free mode",-1),lt=t("td",null,"Toggle side bar",-1),nt=t("td",null,"Show scope in status bar",-1),ot=t("h2",{id:"find-replace",tabindex:"-1"},[o("Find/Replace "),t("a",{class:"header-anchor",href:"#find-replace","aria-label":'Permalink to "Find/Replace"'},"​")],-1),et=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),dt=t("td",null,"Find",-1),st=t("td",null,"Replace",-1),ut=t("td",null,"Find in files",-1),rt=t("td",null,"Incremental Find",-1),at=t("h2",{id:"scrolling",tabindex:"-1"},[o("Scrolling "),t("a",{class:"header-anchor",href:"#scrolling","aria-label":'Permalink to "Scrolling"'},"​")],-1),ct=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),it=t("td",null,"Scroll down one page",-1),ht=t("td",null,"Center current line vertically in page",-1),_t=t("td",null,"Scroll to end of file",-1),mt=t("td",null,"Scroll to start of file",-1),kt=t("h2",{id:"tabs",tabindex:"-1"},[o("Tabs "),t("a",{class:"header-anchor",href:"#tabs","aria-label":'Permalink to "Tabs"'},"​")],-1),pt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),ft=t("td",null,"Open last closed tab",-1),bt=t("td",null,"Jump to tab in current group",-1),gt=t("td",null,"Jump to 10th tab in current group",-1),yt=t("td",null,"Cycle left through tabs",-1),wt=t("td",null,"Cycle right through tabs",-1),xt=t("td",null,"Cycle up through recent tabs",-1),St=t("td",null,"Cycle down through recent tabs",-1),vt=t("tr",null,[t("td"),t("td",null,"Find in files")],-1),Ct=t("h2",{id:"split-window",tabindex:"-1"},[o("Split window "),t("a",{class:"header-anchor",href:"#split-window","aria-label":'Permalink to "Split window"'},"​")],-1),Pt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),Tt=t("td",null,"Revert view to single column",-1),Kt=t("td",null,"Split view into two columns",-1),Nt=t("td",null,"Split view into three columns",-1),Rt=t("td",null,"Split view into four columns",-1),Gt=t("td",null,"Set view to grid (4 groups)",-1),It=t("td",null,"Jump to group",-1),Dt=t("td",null,"Move file to specified group",-1),At=t("h2",{id:"bookmarks",tabindex:"-1"},[o("Bookmarks "),t("a",{class:"header-anchor",href:"#bookmarks","aria-label":'Permalink to "Bookmarks"'},"​")],-1),Bt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),Et=t("td",null,"Toggle bookmark",-1),Ft=t("td",null,"Next bookmark",-1),Jt=t("td",null,"Previous bookmark",-1),Mt=t("td",null,"Clear bookmarks",-1),Ot=t("h2",{id:"text-manipulation",tabindex:"-1"},[o("Text manipulation "),t("a",{class:"header-anchor",href:"#text-manipulation","aria-label":'Permalink to "Text manipulation"'},"​")],-1),Vt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),qt=t("td",null,"Transform to Uppercase",-1),Xt=t("td",null,"Transform to Lowercase",-1),$t=t("td",null,"Clip text upwards / downwards",-1);function jt(Ut,Wt,Lt,Qt,zt,Ht){const l=d("Key");return s(),u("div",null,[c,t("table",null,[i,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+x"})]),h]),t("tr",null,[t("td",null,[n(l,{k:"command+enter"})]),_]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+enter"})]),m]),t("tr",null,[t("td",null,[n(l,{k:"command+ctrl+up"})]),k]),t("tr",null,[t("td",null,[n(l,{k:"command+ctrl+down"})]),p]),t("tr",null,[t("td",null,[n(l,{k:"command+l"})]),f]),t("tr",null,[t("td",null,[n(l,{k:"command+d"})]),b]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+command+g"})]),g]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+up"})]),y]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+down"})]),w]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+m"})]),x]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+m"})]),S]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+a"})]),v]),t("tr",null,[t("td",null,[n(l,{k:"command+left"})]),C]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+e, command+right"})]),P]),t("tr",null,[t("td",null,[n(l,{k:"command+k, command+k"})]),T]),t("tr",null,[t("td",null,[n(l,{k:"command+k, command+backspace"})]),K]),t("tr",null,[t("td",null,[n(l,{k:"command+]"})]),N]),t("tr",null,[t("td",null,[n(l,{k:"command+["})]),R]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+d"})]),G]),t("tr",null,[t("td",null,[n(l,{k:"command+j"})]),I]),t("tr",null,[t("td",null,[n(l,{k:"command+/"})]),D]),t("tr",null,[t("td",null,[n(l,{k:"command+option+/"})]),A]),t("tr",null,[t("td",null,[n(l,{k:"command+y"})]),B]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+v"})]),E]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+space"})]),F]),t("tr",null,[t("td",null,[n(l,{k:"command+u"})]),J]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+up"})]),M]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+down"})]),O]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+w"})]),V]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+k"})]),q])])]),X,t("table",null,[$,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+p, command+t"})]),j]),t("tr",null,[t("td",null,[n(l,{k:"command+r"})]),U]),W,t("tr",null,[t("td",null,[n(l,{k:"ctrl+g"})]),L])])]),Q,t("table",null,[z,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+shift+p"})]),H]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+`"})]),Y]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+command+f"})]),Z]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+command+f"})]),tt]),t("tr",null,[t("td",null,[n(l,{k:"command+k, command+b"})]),lt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+p"})]),nt])])]),ot,t("table",null,[et,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+f"})]),dt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+f"})]),st]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+f"})]),ut]),t("tr",null,[t("td",null,[n(l,{k:"command+i"})]),rt])])]),at,t("table",null,[ct,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+v"})]),it]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+l"})]),ht]),t("tr",null,[t("td",null,[n(l,{k:"command+down"})]),_t]),t("tr",null,[t("td",null,[n(l,{k:"command+up"})]),mt])])]),kt,t("table",null,[pt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+shift+t"})]),ft]),t("tr",null,[t("td",null,[n(l,{k:"command+[1-9]"})]),bt]),t("tr",null,[t("td",null,[n(l,{k:"command+0"})]),gt]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+["})]),yt]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+]"})]),wt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+tab"})]),xt]),t("tr",null,[t("td",null,[n(l,{k:"shift+ctrl+tab"})]),St]),vt])]),Ct,t("table",null,[Pt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+option+1"})]),Tt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+2"})]),Kt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+3"})]),Nt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+4"})]),Rt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+5"})]),Gt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+[1-4]"})]),It]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+[1-4]"})]),Dt])])]),At,t("table",null,[Bt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+f2"})]),Et]),t("tr",null,[t("td",null,[n(l,{k:"f2"})]),Ft]),t("tr",null,[t("td",null,[n(l,{k:"shift+f2"})]),Jt]),t("tr",null,[t("td",null,[n(l,{k:"shift+command+f2"})]),Mt])])]),Ot,t("table",null,[Vt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+k, command+u"})]),qt]),t("tr",null,[t("td",null,[n(l,{k:"command+k, command+l"})]),Xt]),t("tr",null,[t("td",null,[n(l,{k:"command+ctrl+up, command+ctrl+down"})]),$t])])])])}const tl=e(a,[["render",jt]]);export{Zt as __pageData,tl as default}; +import{_ as e,D as d,o as s,c as u,k as t,I as n,R as r,a as o}from"./chunks/framework.e02z-eDF.js";const Zt=JSON.parse('{"title":"Keyboard Shortcuts - OSX","description":"","frontmatter":{"title":"Keyboard Shortcuts - OSX"},"headers":[],"relativePath":"reference/keyboard_shortcuts_osx.md","filePath":"reference/keyboard_shortcuts_osx.md","lastUpdated":1703774098000}'),a={name:"reference/keyboard_shortcuts_osx.md"},c=r('

Keyboard Shortcuts - OSX

WARNING

This topic is a draft and may contain wrong information.

Editing

',3),i=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),h=t("td",null,"Cut line",-1),_=t("td",null,"Insert line after",-1),m=t("td",null,"Insert line before",-1),k=t("td",null,"Move line/selection up",-1),p=t("td",null,"Move line/selection down",-1),f=t("td",null,"Select line - Repeat to select next lines",-1),b=t("td",null,"Select word - Repeat to select next occurrence",-1),g=t("td",null,"Select all occurrences of current selection",-1),y=t("td",null,"Extra cursor on the line above",-1),w=t("td",null,"Extra cursor on the line below",-1),x=t("td",null,"Jump to closing parentheses Repeat to jump to opening parentheses",-1),S=t("td",null,"Select all contents of the current parentheses",-1),v=t("td",null,"Move to beginning of line",-1),C=t("td",null,"Move to beginning of text on line",-1),P=t("td",null,"Move to end of line",-1),T=t("td",null,"Delete from cursor to end of line",-1),K=t("td",null,"Delete from cursor to start of line",-1),N=t("td",null,"Indent current line(s)",-1),R=t("td",null,"Un-indent current line(s)",-1),G=t("td",null,"Duplicate line(s)",-1),I=t("td",null,"Join line below to the end of the current line",-1),D=t("td",null,"Comment/un-comment current line",-1),A=t("td",null,"Block comment current selection",-1),B=t("td",null,"Redo, or repeat last keyboard shortcut command",-1),E=t("td",null,"Paste and indent correctly",-1),F=t("td",null,"Select next auto-complete suggestion",-1),J=t("td",null,"Soft undo; jumps to your last change before undoing change when repeated",-1),M=t("td",null,"Column selection up",-1),O=t("td",null,"Column selection down",-1),V=t("td",null,"Wrap Selection in html tag",-1),q=t("td",null,"Delete current line of cursor",-1),X=t("h2",{id:"navigation-goto-anywhere",tabindex:"-1"},[o("Navigation/Goto Anywhere "),t("a",{class:"header-anchor",href:"#navigation-goto-anywhere","aria-label":'Permalink to "Navigation/Goto Anywhere"'},"​")],-1),$=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),j=t("td",null,"Quick-open files by name",-1),U=t("td",null,"Goto symbol",-1),W=t("tr",null,[t("td"),t("td",null,"Goto word in current file")],-1),L=t("td",null,"Goto line in current file",-1),Q=t("h2",{id:"general",tabindex:"-1"},[o("General "),t("a",{class:"header-anchor",href:"#general","aria-label":'Permalink to "General"'},"​")],-1),z=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),H=t("td",null,"Command Palette",-1),Y=t("td",null,"Python Console",-1),Z=t("td",null,"Toggle fullscreen mode",-1),tt=t("td",null,"Toggle distraction-free mode",-1),lt=t("td",null,"Toggle side bar",-1),nt=t("td",null,"Show scope in status bar",-1),ot=t("h2",{id:"find-replace",tabindex:"-1"},[o("Find/Replace "),t("a",{class:"header-anchor",href:"#find-replace","aria-label":'Permalink to "Find/Replace"'},"​")],-1),et=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),dt=t("td",null,"Find",-1),st=t("td",null,"Replace",-1),ut=t("td",null,"Find in files",-1),rt=t("td",null,"Incremental Find",-1),at=t("h2",{id:"scrolling",tabindex:"-1"},[o("Scrolling "),t("a",{class:"header-anchor",href:"#scrolling","aria-label":'Permalink to "Scrolling"'},"​")],-1),ct=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),it=t("td",null,"Scroll down one page",-1),ht=t("td",null,"Center current line vertically in page",-1),_t=t("td",null,"Scroll to end of file",-1),mt=t("td",null,"Scroll to start of file",-1),kt=t("h2",{id:"tabs",tabindex:"-1"},[o("Tabs "),t("a",{class:"header-anchor",href:"#tabs","aria-label":'Permalink to "Tabs"'},"​")],-1),pt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),ft=t("td",null,"Open last closed tab",-1),bt=t("td",null,"Jump to tab in current group",-1),gt=t("td",null,"Jump to 10th tab in current group",-1),yt=t("td",null,"Cycle left through tabs",-1),wt=t("td",null,"Cycle right through tabs",-1),xt=t("td",null,"Cycle up through recent tabs",-1),St=t("td",null,"Cycle down through recent tabs",-1),vt=t("tr",null,[t("td"),t("td",null,"Find in files")],-1),Ct=t("h2",{id:"split-window",tabindex:"-1"},[o("Split window "),t("a",{class:"header-anchor",href:"#split-window","aria-label":'Permalink to "Split window"'},"​")],-1),Pt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),Tt=t("td",null,"Revert view to single column",-1),Kt=t("td",null,"Split view into two columns",-1),Nt=t("td",null,"Split view into three columns",-1),Rt=t("td",null,"Split view into four columns",-1),Gt=t("td",null,"Set view to grid (4 groups)",-1),It=t("td",null,"Jump to group",-1),Dt=t("td",null,"Move file to specified group",-1),At=t("h2",{id:"bookmarks",tabindex:"-1"},[o("Bookmarks "),t("a",{class:"header-anchor",href:"#bookmarks","aria-label":'Permalink to "Bookmarks"'},"​")],-1),Bt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),Et=t("td",null,"Toggle bookmark",-1),Ft=t("td",null,"Next bookmark",-1),Jt=t("td",null,"Previous bookmark",-1),Mt=t("td",null,"Clear bookmarks",-1),Ot=t("h2",{id:"text-manipulation",tabindex:"-1"},[o("Text manipulation "),t("a",{class:"header-anchor",href:"#text-manipulation","aria-label":'Permalink to "Text manipulation"'},"​")],-1),Vt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),qt=t("td",null,"Transform to Uppercase",-1),Xt=t("td",null,"Transform to Lowercase",-1),$t=t("td",null,"Clip text upwards / downwards",-1);function jt(Ut,Wt,Lt,Qt,zt,Ht){const l=d("Key");return s(),u("div",null,[c,t("table",null,[i,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+x"})]),h]),t("tr",null,[t("td",null,[n(l,{k:"command+enter"})]),_]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+enter"})]),m]),t("tr",null,[t("td",null,[n(l,{k:"command+ctrl+up"})]),k]),t("tr",null,[t("td",null,[n(l,{k:"command+ctrl+down"})]),p]),t("tr",null,[t("td",null,[n(l,{k:"command+l"})]),f]),t("tr",null,[t("td",null,[n(l,{k:"command+d"})]),b]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+command+g"})]),g]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+up"})]),y]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+down"})]),w]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+m"})]),x]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+m"})]),S]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+a"})]),v]),t("tr",null,[t("td",null,[n(l,{k:"command+left"})]),C]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+e, command+right"})]),P]),t("tr",null,[t("td",null,[n(l,{k:"command+k, command+k"})]),T]),t("tr",null,[t("td",null,[n(l,{k:"command+k, command+backspace"})]),K]),t("tr",null,[t("td",null,[n(l,{k:"command+]"})]),N]),t("tr",null,[t("td",null,[n(l,{k:"command+["})]),R]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+d"})]),G]),t("tr",null,[t("td",null,[n(l,{k:"command+j"})]),I]),t("tr",null,[t("td",null,[n(l,{k:"command+/"})]),D]),t("tr",null,[t("td",null,[n(l,{k:"command+option+/"})]),A]),t("tr",null,[t("td",null,[n(l,{k:"command+y"})]),B]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+v"})]),E]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+space"})]),F]),t("tr",null,[t("td",null,[n(l,{k:"command+u"})]),J]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+up"})]),M]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+down"})]),O]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+w"})]),V]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+k"})]),q])])]),X,t("table",null,[$,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+p, command+t"})]),j]),t("tr",null,[t("td",null,[n(l,{k:"command+r"})]),U]),W,t("tr",null,[t("td",null,[n(l,{k:"ctrl+g"})]),L])])]),Q,t("table",null,[z,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+shift+p"})]),H]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+`"})]),Y]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+command+f"})]),Z]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+command+f"})]),tt]),t("tr",null,[t("td",null,[n(l,{k:"command+k, command+b"})]),lt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+p"})]),nt])])]),ot,t("table",null,[et,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+f"})]),dt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+f"})]),st]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+f"})]),ut]),t("tr",null,[t("td",null,[n(l,{k:"command+i"})]),rt])])]),at,t("table",null,[ct,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+v"})]),it]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+l"})]),ht]),t("tr",null,[t("td",null,[n(l,{k:"command+down"})]),_t]),t("tr",null,[t("td",null,[n(l,{k:"command+up"})]),mt])])]),kt,t("table",null,[pt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+shift+t"})]),ft]),t("tr",null,[t("td",null,[n(l,{k:"command+[1-9]"})]),bt]),t("tr",null,[t("td",null,[n(l,{k:"command+0"})]),gt]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+["})]),yt]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+]"})]),wt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+tab"})]),xt]),t("tr",null,[t("td",null,[n(l,{k:"shift+ctrl+tab"})]),St]),vt])]),Ct,t("table",null,[Pt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+option+1"})]),Tt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+2"})]),Kt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+3"})]),Nt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+4"})]),Rt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+5"})]),Gt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+[1-4]"})]),It]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+[1-4]"})]),Dt])])]),At,t("table",null,[Bt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+f2"})]),Et]),t("tr",null,[t("td",null,[n(l,{k:"f2"})]),Ft]),t("tr",null,[t("td",null,[n(l,{k:"shift+f2"})]),Jt]),t("tr",null,[t("td",null,[n(l,{k:"shift+command+f2"})]),Mt])])]),Ot,t("table",null,[Vt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+k, command+u"})]),qt]),t("tr",null,[t("td",null,[n(l,{k:"command+k, command+l"})]),Xt]),t("tr",null,[t("td",null,[n(l,{k:"command+ctrl+up, command+ctrl+down"})]),$t])])])])}const tl=e(a,[["render",jt]]);export{Zt as __pageData,tl as default}; diff --git a/assets/reference_keyboard_shortcuts_osx.md._UKInUPX.lean.js b/assets/reference_keyboard_shortcuts_osx.md.YWxghirF.lean.js similarity index 99% rename from assets/reference_keyboard_shortcuts_osx.md._UKInUPX.lean.js rename to assets/reference_keyboard_shortcuts_osx.md.YWxghirF.lean.js index 29791940..7aa2bfea 100644 --- a/assets/reference_keyboard_shortcuts_osx.md._UKInUPX.lean.js +++ b/assets/reference_keyboard_shortcuts_osx.md.YWxghirF.lean.js @@ -1 +1 @@ -import{_ as e,D as d,o as s,c as u,k as t,I as n,R as r,a as o}from"./chunks/framework.e02z-eDF.js";const Zt=JSON.parse('{"title":"Keyboard Shortcuts - OSX","description":"","frontmatter":{"title":"Keyboard Shortcuts - OSX"},"headers":[],"relativePath":"reference/keyboard_shortcuts_osx.md","filePath":"reference/keyboard_shortcuts_osx.md","lastUpdated":1703773698000}'),a={name:"reference/keyboard_shortcuts_osx.md"},c=r("",3),i=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),h=t("td",null,"Cut line",-1),_=t("td",null,"Insert line after",-1),m=t("td",null,"Insert line before",-1),k=t("td",null,"Move line/selection up",-1),p=t("td",null,"Move line/selection down",-1),f=t("td",null,"Select line - Repeat to select next lines",-1),b=t("td",null,"Select word - Repeat to select next occurrence",-1),g=t("td",null,"Select all occurrences of current selection",-1),y=t("td",null,"Extra cursor on the line above",-1),w=t("td",null,"Extra cursor on the line below",-1),x=t("td",null,"Jump to closing parentheses Repeat to jump to opening parentheses",-1),S=t("td",null,"Select all contents of the current parentheses",-1),v=t("td",null,"Move to beginning of line",-1),C=t("td",null,"Move to beginning of text on line",-1),P=t("td",null,"Move to end of line",-1),T=t("td",null,"Delete from cursor to end of line",-1),K=t("td",null,"Delete from cursor to start of line",-1),N=t("td",null,"Indent current line(s)",-1),R=t("td",null,"Un-indent current line(s)",-1),G=t("td",null,"Duplicate line(s)",-1),I=t("td",null,"Join line below to the end of the current line",-1),D=t("td",null,"Comment/un-comment current line",-1),A=t("td",null,"Block comment current selection",-1),B=t("td",null,"Redo, or repeat last keyboard shortcut command",-1),E=t("td",null,"Paste and indent correctly",-1),F=t("td",null,"Select next auto-complete suggestion",-1),J=t("td",null,"Soft undo; jumps to your last change before undoing change when repeated",-1),M=t("td",null,"Column selection up",-1),O=t("td",null,"Column selection down",-1),V=t("td",null,"Wrap Selection in html tag",-1),q=t("td",null,"Delete current line of cursor",-1),X=t("h2",{id:"navigation-goto-anywhere",tabindex:"-1"},[o("Navigation/Goto Anywhere "),t("a",{class:"header-anchor",href:"#navigation-goto-anywhere","aria-label":'Permalink to "Navigation/Goto Anywhere"'},"​")],-1),$=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),j=t("td",null,"Quick-open files by name",-1),U=t("td",null,"Goto symbol",-1),W=t("tr",null,[t("td"),t("td",null,"Goto word in current file")],-1),L=t("td",null,"Goto line in current file",-1),Q=t("h2",{id:"general",tabindex:"-1"},[o("General "),t("a",{class:"header-anchor",href:"#general","aria-label":'Permalink to "General"'},"​")],-1),z=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),H=t("td",null,"Command Palette",-1),Y=t("td",null,"Python Console",-1),Z=t("td",null,"Toggle fullscreen mode",-1),tt=t("td",null,"Toggle distraction-free mode",-1),lt=t("td",null,"Toggle side bar",-1),nt=t("td",null,"Show scope in status bar",-1),ot=t("h2",{id:"find-replace",tabindex:"-1"},[o("Find/Replace "),t("a",{class:"header-anchor",href:"#find-replace","aria-label":'Permalink to "Find/Replace"'},"​")],-1),et=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),dt=t("td",null,"Find",-1),st=t("td",null,"Replace",-1),ut=t("td",null,"Find in files",-1),rt=t("td",null,"Incremental Find",-1),at=t("h2",{id:"scrolling",tabindex:"-1"},[o("Scrolling "),t("a",{class:"header-anchor",href:"#scrolling","aria-label":'Permalink to "Scrolling"'},"​")],-1),ct=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),it=t("td",null,"Scroll down one page",-1),ht=t("td",null,"Center current line vertically in page",-1),_t=t("td",null,"Scroll to end of file",-1),mt=t("td",null,"Scroll to start of file",-1),kt=t("h2",{id:"tabs",tabindex:"-1"},[o("Tabs "),t("a",{class:"header-anchor",href:"#tabs","aria-label":'Permalink to "Tabs"'},"​")],-1),pt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),ft=t("td",null,"Open last closed tab",-1),bt=t("td",null,"Jump to tab in current group",-1),gt=t("td",null,"Jump to 10th tab in current group",-1),yt=t("td",null,"Cycle left through tabs",-1),wt=t("td",null,"Cycle right through tabs",-1),xt=t("td",null,"Cycle up through recent tabs",-1),St=t("td",null,"Cycle down through recent tabs",-1),vt=t("tr",null,[t("td"),t("td",null,"Find in files")],-1),Ct=t("h2",{id:"split-window",tabindex:"-1"},[o("Split window "),t("a",{class:"header-anchor",href:"#split-window","aria-label":'Permalink to "Split window"'},"​")],-1),Pt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),Tt=t("td",null,"Revert view to single column",-1),Kt=t("td",null,"Split view into two columns",-1),Nt=t("td",null,"Split view into three columns",-1),Rt=t("td",null,"Split view into four columns",-1),Gt=t("td",null,"Set view to grid (4 groups)",-1),It=t("td",null,"Jump to group",-1),Dt=t("td",null,"Move file to specified group",-1),At=t("h2",{id:"bookmarks",tabindex:"-1"},[o("Bookmarks "),t("a",{class:"header-anchor",href:"#bookmarks","aria-label":'Permalink to "Bookmarks"'},"​")],-1),Bt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),Et=t("td",null,"Toggle bookmark",-1),Ft=t("td",null,"Next bookmark",-1),Jt=t("td",null,"Previous bookmark",-1),Mt=t("td",null,"Clear bookmarks",-1),Ot=t("h2",{id:"text-manipulation",tabindex:"-1"},[o("Text manipulation "),t("a",{class:"header-anchor",href:"#text-manipulation","aria-label":'Permalink to "Text manipulation"'},"​")],-1),Vt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),qt=t("td",null,"Transform to Uppercase",-1),Xt=t("td",null,"Transform to Lowercase",-1),$t=t("td",null,"Clip text upwards / downwards",-1);function jt(Ut,Wt,Lt,Qt,zt,Ht){const l=d("Key");return s(),u("div",null,[c,t("table",null,[i,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+x"})]),h]),t("tr",null,[t("td",null,[n(l,{k:"command+enter"})]),_]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+enter"})]),m]),t("tr",null,[t("td",null,[n(l,{k:"command+ctrl+up"})]),k]),t("tr",null,[t("td",null,[n(l,{k:"command+ctrl+down"})]),p]),t("tr",null,[t("td",null,[n(l,{k:"command+l"})]),f]),t("tr",null,[t("td",null,[n(l,{k:"command+d"})]),b]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+command+g"})]),g]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+up"})]),y]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+down"})]),w]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+m"})]),x]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+m"})]),S]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+a"})]),v]),t("tr",null,[t("td",null,[n(l,{k:"command+left"})]),C]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+e, command+right"})]),P]),t("tr",null,[t("td",null,[n(l,{k:"command+k, command+k"})]),T]),t("tr",null,[t("td",null,[n(l,{k:"command+k, command+backspace"})]),K]),t("tr",null,[t("td",null,[n(l,{k:"command+]"})]),N]),t("tr",null,[t("td",null,[n(l,{k:"command+["})]),R]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+d"})]),G]),t("tr",null,[t("td",null,[n(l,{k:"command+j"})]),I]),t("tr",null,[t("td",null,[n(l,{k:"command+/"})]),D]),t("tr",null,[t("td",null,[n(l,{k:"command+option+/"})]),A]),t("tr",null,[t("td",null,[n(l,{k:"command+y"})]),B]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+v"})]),E]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+space"})]),F]),t("tr",null,[t("td",null,[n(l,{k:"command+u"})]),J]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+up"})]),M]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+down"})]),O]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+w"})]),V]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+k"})]),q])])]),X,t("table",null,[$,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+p, command+t"})]),j]),t("tr",null,[t("td",null,[n(l,{k:"command+r"})]),U]),W,t("tr",null,[t("td",null,[n(l,{k:"ctrl+g"})]),L])])]),Q,t("table",null,[z,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+shift+p"})]),H]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+`"})]),Y]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+command+f"})]),Z]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+command+f"})]),tt]),t("tr",null,[t("td",null,[n(l,{k:"command+k, command+b"})]),lt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+p"})]),nt])])]),ot,t("table",null,[et,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+f"})]),dt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+f"})]),st]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+f"})]),ut]),t("tr",null,[t("td",null,[n(l,{k:"command+i"})]),rt])])]),at,t("table",null,[ct,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+v"})]),it]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+l"})]),ht]),t("tr",null,[t("td",null,[n(l,{k:"command+down"})]),_t]),t("tr",null,[t("td",null,[n(l,{k:"command+up"})]),mt])])]),kt,t("table",null,[pt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+shift+t"})]),ft]),t("tr",null,[t("td",null,[n(l,{k:"command+[1-9]"})]),bt]),t("tr",null,[t("td",null,[n(l,{k:"command+0"})]),gt]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+["})]),yt]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+]"})]),wt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+tab"})]),xt]),t("tr",null,[t("td",null,[n(l,{k:"shift+ctrl+tab"})]),St]),vt])]),Ct,t("table",null,[Pt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+option+1"})]),Tt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+2"})]),Kt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+3"})]),Nt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+4"})]),Rt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+5"})]),Gt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+[1-4]"})]),It]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+[1-4]"})]),Dt])])]),At,t("table",null,[Bt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+f2"})]),Et]),t("tr",null,[t("td",null,[n(l,{k:"f2"})]),Ft]),t("tr",null,[t("td",null,[n(l,{k:"shift+f2"})]),Jt]),t("tr",null,[t("td",null,[n(l,{k:"shift+command+f2"})]),Mt])])]),Ot,t("table",null,[Vt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+k, command+u"})]),qt]),t("tr",null,[t("td",null,[n(l,{k:"command+k, command+l"})]),Xt]),t("tr",null,[t("td",null,[n(l,{k:"command+ctrl+up, command+ctrl+down"})]),$t])])])])}const tl=e(a,[["render",jt]]);export{Zt as __pageData,tl as default}; +import{_ as e,D as d,o as s,c as u,k as t,I as n,R as r,a as o}from"./chunks/framework.e02z-eDF.js";const Zt=JSON.parse('{"title":"Keyboard Shortcuts - OSX","description":"","frontmatter":{"title":"Keyboard Shortcuts - OSX"},"headers":[],"relativePath":"reference/keyboard_shortcuts_osx.md","filePath":"reference/keyboard_shortcuts_osx.md","lastUpdated":1703774098000}'),a={name:"reference/keyboard_shortcuts_osx.md"},c=r("",3),i=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),h=t("td",null,"Cut line",-1),_=t("td",null,"Insert line after",-1),m=t("td",null,"Insert line before",-1),k=t("td",null,"Move line/selection up",-1),p=t("td",null,"Move line/selection down",-1),f=t("td",null,"Select line - Repeat to select next lines",-1),b=t("td",null,"Select word - Repeat to select next occurrence",-1),g=t("td",null,"Select all occurrences of current selection",-1),y=t("td",null,"Extra cursor on the line above",-1),w=t("td",null,"Extra cursor on the line below",-1),x=t("td",null,"Jump to closing parentheses Repeat to jump to opening parentheses",-1),S=t("td",null,"Select all contents of the current parentheses",-1),v=t("td",null,"Move to beginning of line",-1),C=t("td",null,"Move to beginning of text on line",-1),P=t("td",null,"Move to end of line",-1),T=t("td",null,"Delete from cursor to end of line",-1),K=t("td",null,"Delete from cursor to start of line",-1),N=t("td",null,"Indent current line(s)",-1),R=t("td",null,"Un-indent current line(s)",-1),G=t("td",null,"Duplicate line(s)",-1),I=t("td",null,"Join line below to the end of the current line",-1),D=t("td",null,"Comment/un-comment current line",-1),A=t("td",null,"Block comment current selection",-1),B=t("td",null,"Redo, or repeat last keyboard shortcut command",-1),E=t("td",null,"Paste and indent correctly",-1),F=t("td",null,"Select next auto-complete suggestion",-1),J=t("td",null,"Soft undo; jumps to your last change before undoing change when repeated",-1),M=t("td",null,"Column selection up",-1),O=t("td",null,"Column selection down",-1),V=t("td",null,"Wrap Selection in html tag",-1),q=t("td",null,"Delete current line of cursor",-1),X=t("h2",{id:"navigation-goto-anywhere",tabindex:"-1"},[o("Navigation/Goto Anywhere "),t("a",{class:"header-anchor",href:"#navigation-goto-anywhere","aria-label":'Permalink to "Navigation/Goto Anywhere"'},"​")],-1),$=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),j=t("td",null,"Quick-open files by name",-1),U=t("td",null,"Goto symbol",-1),W=t("tr",null,[t("td"),t("td",null,"Goto word in current file")],-1),L=t("td",null,"Goto line in current file",-1),Q=t("h2",{id:"general",tabindex:"-1"},[o("General "),t("a",{class:"header-anchor",href:"#general","aria-label":'Permalink to "General"'},"​")],-1),z=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),H=t("td",null,"Command Palette",-1),Y=t("td",null,"Python Console",-1),Z=t("td",null,"Toggle fullscreen mode",-1),tt=t("td",null,"Toggle distraction-free mode",-1),lt=t("td",null,"Toggle side bar",-1),nt=t("td",null,"Show scope in status bar",-1),ot=t("h2",{id:"find-replace",tabindex:"-1"},[o("Find/Replace "),t("a",{class:"header-anchor",href:"#find-replace","aria-label":'Permalink to "Find/Replace"'},"​")],-1),et=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),dt=t("td",null,"Find",-1),st=t("td",null,"Replace",-1),ut=t("td",null,"Find in files",-1),rt=t("td",null,"Incremental Find",-1),at=t("h2",{id:"scrolling",tabindex:"-1"},[o("Scrolling "),t("a",{class:"header-anchor",href:"#scrolling","aria-label":'Permalink to "Scrolling"'},"​")],-1),ct=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),it=t("td",null,"Scroll down one page",-1),ht=t("td",null,"Center current line vertically in page",-1),_t=t("td",null,"Scroll to end of file",-1),mt=t("td",null,"Scroll to start of file",-1),kt=t("h2",{id:"tabs",tabindex:"-1"},[o("Tabs "),t("a",{class:"header-anchor",href:"#tabs","aria-label":'Permalink to "Tabs"'},"​")],-1),pt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),ft=t("td",null,"Open last closed tab",-1),bt=t("td",null,"Jump to tab in current group",-1),gt=t("td",null,"Jump to 10th tab in current group",-1),yt=t("td",null,"Cycle left through tabs",-1),wt=t("td",null,"Cycle right through tabs",-1),xt=t("td",null,"Cycle up through recent tabs",-1),St=t("td",null,"Cycle down through recent tabs",-1),vt=t("tr",null,[t("td"),t("td",null,"Find in files")],-1),Ct=t("h2",{id:"split-window",tabindex:"-1"},[o("Split window "),t("a",{class:"header-anchor",href:"#split-window","aria-label":'Permalink to "Split window"'},"​")],-1),Pt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),Tt=t("td",null,"Revert view to single column",-1),Kt=t("td",null,"Split view into two columns",-1),Nt=t("td",null,"Split view into three columns",-1),Rt=t("td",null,"Split view into four columns",-1),Gt=t("td",null,"Set view to grid (4 groups)",-1),It=t("td",null,"Jump to group",-1),Dt=t("td",null,"Move file to specified group",-1),At=t("h2",{id:"bookmarks",tabindex:"-1"},[o("Bookmarks "),t("a",{class:"header-anchor",href:"#bookmarks","aria-label":'Permalink to "Bookmarks"'},"​")],-1),Bt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),Et=t("td",null,"Toggle bookmark",-1),Ft=t("td",null,"Next bookmark",-1),Jt=t("td",null,"Previous bookmark",-1),Mt=t("td",null,"Clear bookmarks",-1),Ot=t("h2",{id:"text-manipulation",tabindex:"-1"},[o("Text manipulation "),t("a",{class:"header-anchor",href:"#text-manipulation","aria-label":'Permalink to "Text manipulation"'},"​")],-1),Vt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),qt=t("td",null,"Transform to Uppercase",-1),Xt=t("td",null,"Transform to Lowercase",-1),$t=t("td",null,"Clip text upwards / downwards",-1);function jt(Ut,Wt,Lt,Qt,zt,Ht){const l=d("Key");return s(),u("div",null,[c,t("table",null,[i,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+x"})]),h]),t("tr",null,[t("td",null,[n(l,{k:"command+enter"})]),_]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+enter"})]),m]),t("tr",null,[t("td",null,[n(l,{k:"command+ctrl+up"})]),k]),t("tr",null,[t("td",null,[n(l,{k:"command+ctrl+down"})]),p]),t("tr",null,[t("td",null,[n(l,{k:"command+l"})]),f]),t("tr",null,[t("td",null,[n(l,{k:"command+d"})]),b]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+command+g"})]),g]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+up"})]),y]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+down"})]),w]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+m"})]),x]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+m"})]),S]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+a"})]),v]),t("tr",null,[t("td",null,[n(l,{k:"command+left"})]),C]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+e, command+right"})]),P]),t("tr",null,[t("td",null,[n(l,{k:"command+k, command+k"})]),T]),t("tr",null,[t("td",null,[n(l,{k:"command+k, command+backspace"})]),K]),t("tr",null,[t("td",null,[n(l,{k:"command+]"})]),N]),t("tr",null,[t("td",null,[n(l,{k:"command+["})]),R]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+d"})]),G]),t("tr",null,[t("td",null,[n(l,{k:"command+j"})]),I]),t("tr",null,[t("td",null,[n(l,{k:"command+/"})]),D]),t("tr",null,[t("td",null,[n(l,{k:"command+option+/"})]),A]),t("tr",null,[t("td",null,[n(l,{k:"command+y"})]),B]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+v"})]),E]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+space"})]),F]),t("tr",null,[t("td",null,[n(l,{k:"command+u"})]),J]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+up"})]),M]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+down"})]),O]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+w"})]),V]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+k"})]),q])])]),X,t("table",null,[$,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+p, command+t"})]),j]),t("tr",null,[t("td",null,[n(l,{k:"command+r"})]),U]),W,t("tr",null,[t("td",null,[n(l,{k:"ctrl+g"})]),L])])]),Q,t("table",null,[z,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+shift+p"})]),H]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+`"})]),Y]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+command+f"})]),Z]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+command+f"})]),tt]),t("tr",null,[t("td",null,[n(l,{k:"command+k, command+b"})]),lt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+p"})]),nt])])]),ot,t("table",null,[et,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+f"})]),dt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+f"})]),st]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+f"})]),ut]),t("tr",null,[t("td",null,[n(l,{k:"command+i"})]),rt])])]),at,t("table",null,[ct,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+v"})]),it]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+l"})]),ht]),t("tr",null,[t("td",null,[n(l,{k:"command+down"})]),_t]),t("tr",null,[t("td",null,[n(l,{k:"command+up"})]),mt])])]),kt,t("table",null,[pt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+shift+t"})]),ft]),t("tr",null,[t("td",null,[n(l,{k:"command+[1-9]"})]),bt]),t("tr",null,[t("td",null,[n(l,{k:"command+0"})]),gt]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+["})]),yt]),t("tr",null,[t("td",null,[n(l,{k:"command+shift+]"})]),wt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+tab"})]),xt]),t("tr",null,[t("td",null,[n(l,{k:"shift+ctrl+tab"})]),St]),vt])]),Ct,t("table",null,[Pt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+option+1"})]),Tt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+2"})]),Kt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+3"})]),Nt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+4"})]),Rt]),t("tr",null,[t("td",null,[n(l,{k:"command+option+5"})]),Gt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+[1-4]"})]),It]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+[1-4]"})]),Dt])])]),At,t("table",null,[Bt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+f2"})]),Et]),t("tr",null,[t("td",null,[n(l,{k:"f2"})]),Ft]),t("tr",null,[t("td",null,[n(l,{k:"shift+f2"})]),Jt]),t("tr",null,[t("td",null,[n(l,{k:"shift+command+f2"})]),Mt])])]),Ot,t("table",null,[Vt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"command+k, command+u"})]),qt]),t("tr",null,[t("td",null,[n(l,{k:"command+k, command+l"})]),Xt]),t("tr",null,[t("td",null,[n(l,{k:"command+ctrl+up, command+ctrl+down"})]),$t])])])])}const tl=e(a,[["render",jt]]);export{Zt as __pageData,tl as default}; diff --git a/assets/reference_keyboard_shortcuts_win.md.9eDwNeRU.js b/assets/reference_keyboard_shortcuts_win.md.2W6q_BNW.js similarity index 99% rename from assets/reference_keyboard_shortcuts_win.md.9eDwNeRU.js rename to assets/reference_keyboard_shortcuts_win.md.2W6q_BNW.js index 3da521bf..73bd2bb7 100644 --- a/assets/reference_keyboard_shortcuts_win.md.9eDwNeRU.js +++ b/assets/reference_keyboard_shortcuts_win.md.2W6q_BNW.js @@ -1 +1 @@ -import{_ as o,D as s,o as d,c as r,k as t,I as n,a as e,R as u}from"./chunks/framework.e02z-eDF.js";const Et=JSON.parse('{"title":"Keyboard Shortcuts - Windows/Linux","description":"","frontmatter":{"title":"Keyboard Shortcuts - Windows/Linux"},"headers":[],"relativePath":"reference/keyboard_shortcuts_win.md","filePath":"reference/keyboard_shortcuts_win.md","lastUpdated":1703773698000}'),i={name:"reference/keyboard_shortcuts_win.md"},a=u('

Keyboard Shortcuts - Windows/Linux

WARNING

This topic is a draft and may contain wrong information.

Editing

',3),c=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),h=t("td",null,"Cut line",-1),_=t("td",null,"Insert line after",-1),k=t("td",null,"Insert line before",-1),p=t("td",null,"Move line/selection up",-1),m=t("td",null,"Move line/selection down",-1),b=t("td",null,"Select line - Repeat to select next lines",-1),f=t("td",null,"Select word - Repeat select others occurrences",-1),w=t("td",null,"Jump to closing parentheses Repeat to jump to opening parentheses",-1),y=t("td",null,"Select all contents of the current parentheses",-1),g=t("td",null,"Delete Line",-1),x=t("td",null,"Delete from cursor to end of line",-1),v=t("td",null,"Delete from cursor to start of line",-1),C=t("td",null,"Indent current line(s)",-1),S=t("td",null,"Un-indent current line(s)",-1),P=t("td",null,"Duplicate line(s)",-1),K=t("td",null,"Join line below to the end of the current line",-1),T=t("td",null,"Comment/un-comment current line",-1),N=t("td",null,"Block comment current selection",-1),R=t("td",null,"Redo, or repeat last keyboard shortcut command",-1),G=t("td",null,"Paste and indent correctly",-1),W=t("td",null,"Select next auto-complete suggestion",-1),D=t("td",null,"soft undo; jumps to your last change before undoing change when repeated",-1),I=t("td",null,"Wrap Selection in html tag",-1),L=t("td",null,"Close current html tag",-1),A=t("h2",{id:"windows",tabindex:"-1"},[e("Windows "),t("a",{class:"header-anchor",href:"#windows","aria-label":'Permalink to "Windows"'},"​")],-1),B=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),V=t("td",null,"Column selection up",-1),F=t("td",null,"Column selection down",-1),q=t("h2",{id:"linux",tabindex:"-1"},[e("Linux "),t("a",{class:"header-anchor",href:"#linux","aria-label":'Permalink to "Linux"'},"​")],-1),E=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),J=t("td",null,"Column selection up",-1),$=t("td",null,"Column selection down",-1),j=t("h2",{id:"navigation-goto-anywhere",tabindex:"-1"},[e("Navigation/Goto Anywhere "),t("a",{class:"header-anchor",href:"#navigation-goto-anywhere","aria-label":'Permalink to "Navigation/Goto Anywhere"'},"​")],-1),M=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),O=t("td",null,"Quick-open files by name",-1),U=t("td",null,"Goto symbol",-1),Q=t("td",null,"Goto word in current file",-1),z=t("td",null,"Goto line in current file",-1),H=t("h2",{id:"general",tabindex:"-1"},[e("General "),t("a",{class:"header-anchor",href:"#general","aria-label":'Permalink to "General"'},"​")],-1),X=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),Y=t("td",null,"Command prompt",-1),Z=t("td",null,"Toggle side bar",-1),tt=t("td",null,"Show scope in status bar",-1),lt=t("h2",{id:"find-replace",tabindex:"-1"},[e("Find/Replace "),t("a",{class:"header-anchor",href:"#find-replace","aria-label":'Permalink to "Find/Replace"'},"​")],-1),nt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),et=t("td",null,"Find",-1),ot=t("td",null,"Replace",-1),st=t("td",null,"Find in files",-1),dt=t("h2",{id:"tabs",tabindex:"-1"},[e("Tabs "),t("a",{class:"header-anchor",href:"#tabs","aria-label":'Permalink to "Tabs"'},"​")],-1),rt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),ut=t("td",null,"Open last closed tab",-1),it=t("td",null,"Cycle up through tabs",-1),at=t("td",null,"Cycle down through tabs",-1),ct=t("td",null,"Close current tab",-1),ht=t("td",null,"Switch to tab number",-1),_t=t("h2",{id:"split-window",tabindex:"-1"},[e("Split window "),t("a",{class:"header-anchor",href:"#split-window","aria-label":'Permalink to "Split window"'},"​")],-1),kt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),pt=t("td",null,"Revert view to single column",-1),mt=t("td",null,"Split view into two columns",-1),bt=t("td",null,"Split view into three columns",-1),ft=t("td",null,"Split view into four columns",-1),wt=t("td",null,"Set view to grid (4 groups)",-1),yt=t("td",null,"Split view into two rows",-1),gt=t("td",null,"Jump to group",-1),xt=t("td",null,"Move file to specified group",-1),vt=t("h2",{id:"bookmarks",tabindex:"-1"},[e("Bookmarks "),t("a",{class:"header-anchor",href:"#bookmarks","aria-label":'Permalink to "Bookmarks"'},"​")],-1),Ct=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),St=t("td",null,"Toggle bookmark",-1),Pt=t("td",null,"Next bookmark",-1),Kt=t("td",null,"Previous bookmark",-1),Tt=t("td",null,"Clear bookmarks",-1),Nt=t("h2",{id:"text-manipulation",tabindex:"-1"},[e("Text manipulation "),t("a",{class:"header-anchor",href:"#text-manipulation","aria-label":'Permalink to "Text manipulation"'},"​")],-1),Rt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),Gt=t("td",null,"Transform to upper case",-1),Wt=t("td",null,"Transform to lower case",-1);function Dt(It,Lt,At,Bt,Vt,Ft){const l=s("Key");return d(),r("div",null,[a,t("table",null,[c,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+x"})]),h]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+enter"})]),_]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+enter"})]),k]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+up"})]),p]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+down"})]),m]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+l"})]),b]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+d"})]),f]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+m"})]),w]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+m"})]),y]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+k"})]),g]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+k"})]),x]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+backspace"})]),v]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+]"})]),C]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+["})]),S]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+d"})]),P]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+j"})]),K]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+/"})]),T]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+/"})]),N]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+y"})]),R]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+v"})]),G]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+space"})]),W]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+u"})]),D]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+w"})]),I]),t("tr",null,[t("td",null,[n(l,{k:"alt+."})]),L])])]),A,t("table",null,[B,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+alt+up"})]),V]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+alt+down"})]),F])])]),q,t("table",null,[E,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"alt+shift+up"})]),J]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+down"})]),$])])]),j,t("table",null,[M,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+p"})]),O]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+r"})]),U]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+;"})]),Q]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+g"})]),z])])]),H,t("table",null,[X,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+p"})]),Y]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+b"})]),Z]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+alt+p"})]),tt])])]),lt,t("table",null,[nt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+f"})]),et]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+h"})]),ot]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+f"})]),st])])]),dt,t("table",null,[rt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+t"})]),ut]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+pageup"})]),it]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+pagedown"})]),at]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+tab"})]),t("td",null,[e("Switch to a previous tab, hold "),n(l,{k:"tab"}),e(" and repeat "),n(l,{k:"tab"}),e(" to cycle through previous tabs")])]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+tab"})]),t("td",null,[e("Switch in reverse order to a previous tab, hold "),n(l,{k:"ctrl+shift"}),e(" and repeat "),n(l,{k:"tab"}),e(" to cycle through previous tabs in reverse")])]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+w"})]),ct]),t("tr",null,[t("td",null,[n(l,{k:"alt+[1-9]"})]),ht])])]),_t,t("table",null,[kt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"alt+shift+1"})]),pt]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+2"})]),mt]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+3"})]),bt]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+4"})]),ft]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+5"})]),wt]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+8"})]),yt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+[1-4]"})]),gt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+[1-4]"})]),xt])])]),vt,t("table",null,[Ct,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+f2"})]),St]),t("tr",null,[t("td",null,[n(l,{k:"F2"})]),Pt]),t("tr",null,[t("td",null,[n(l,{k:"shift+f2"})]),Kt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+f2"})]),Tt])])]),Nt,t("table",null,[Rt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+u"})]),Gt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+l"})]),Wt])])])])}const Jt=o(i,[["render",Dt]]);export{Et as __pageData,Jt as default}; +import{_ as o,D as s,o as d,c as r,k as t,I as n,a as e,R as u}from"./chunks/framework.e02z-eDF.js";const Et=JSON.parse('{"title":"Keyboard Shortcuts - Windows/Linux","description":"","frontmatter":{"title":"Keyboard Shortcuts - Windows/Linux"},"headers":[],"relativePath":"reference/keyboard_shortcuts_win.md","filePath":"reference/keyboard_shortcuts_win.md","lastUpdated":1703774098000}'),i={name:"reference/keyboard_shortcuts_win.md"},a=u('

Keyboard Shortcuts - Windows/Linux

WARNING

This topic is a draft and may contain wrong information.

Editing

',3),c=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),h=t("td",null,"Cut line",-1),_=t("td",null,"Insert line after",-1),k=t("td",null,"Insert line before",-1),p=t("td",null,"Move line/selection up",-1),m=t("td",null,"Move line/selection down",-1),b=t("td",null,"Select line - Repeat to select next lines",-1),f=t("td",null,"Select word - Repeat select others occurrences",-1),w=t("td",null,"Jump to closing parentheses Repeat to jump to opening parentheses",-1),y=t("td",null,"Select all contents of the current parentheses",-1),g=t("td",null,"Delete Line",-1),x=t("td",null,"Delete from cursor to end of line",-1),v=t("td",null,"Delete from cursor to start of line",-1),C=t("td",null,"Indent current line(s)",-1),S=t("td",null,"Un-indent current line(s)",-1),P=t("td",null,"Duplicate line(s)",-1),K=t("td",null,"Join line below to the end of the current line",-1),T=t("td",null,"Comment/un-comment current line",-1),N=t("td",null,"Block comment current selection",-1),R=t("td",null,"Redo, or repeat last keyboard shortcut command",-1),G=t("td",null,"Paste and indent correctly",-1),W=t("td",null,"Select next auto-complete suggestion",-1),D=t("td",null,"soft undo; jumps to your last change before undoing change when repeated",-1),I=t("td",null,"Wrap Selection in html tag",-1),L=t("td",null,"Close current html tag",-1),A=t("h2",{id:"windows",tabindex:"-1"},[e("Windows "),t("a",{class:"header-anchor",href:"#windows","aria-label":'Permalink to "Windows"'},"​")],-1),B=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),V=t("td",null,"Column selection up",-1),F=t("td",null,"Column selection down",-1),q=t("h2",{id:"linux",tabindex:"-1"},[e("Linux "),t("a",{class:"header-anchor",href:"#linux","aria-label":'Permalink to "Linux"'},"​")],-1),E=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),J=t("td",null,"Column selection up",-1),$=t("td",null,"Column selection down",-1),j=t("h2",{id:"navigation-goto-anywhere",tabindex:"-1"},[e("Navigation/Goto Anywhere "),t("a",{class:"header-anchor",href:"#navigation-goto-anywhere","aria-label":'Permalink to "Navigation/Goto Anywhere"'},"​")],-1),M=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),O=t("td",null,"Quick-open files by name",-1),U=t("td",null,"Goto symbol",-1),Q=t("td",null,"Goto word in current file",-1),z=t("td",null,"Goto line in current file",-1),H=t("h2",{id:"general",tabindex:"-1"},[e("General "),t("a",{class:"header-anchor",href:"#general","aria-label":'Permalink to "General"'},"​")],-1),X=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),Y=t("td",null,"Command prompt",-1),Z=t("td",null,"Toggle side bar",-1),tt=t("td",null,"Show scope in status bar",-1),lt=t("h2",{id:"find-replace",tabindex:"-1"},[e("Find/Replace "),t("a",{class:"header-anchor",href:"#find-replace","aria-label":'Permalink to "Find/Replace"'},"​")],-1),nt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),et=t("td",null,"Find",-1),ot=t("td",null,"Replace",-1),st=t("td",null,"Find in files",-1),dt=t("h2",{id:"tabs",tabindex:"-1"},[e("Tabs "),t("a",{class:"header-anchor",href:"#tabs","aria-label":'Permalink to "Tabs"'},"​")],-1),rt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),ut=t("td",null,"Open last closed tab",-1),it=t("td",null,"Cycle up through tabs",-1),at=t("td",null,"Cycle down through tabs",-1),ct=t("td",null,"Close current tab",-1),ht=t("td",null,"Switch to tab number",-1),_t=t("h2",{id:"split-window",tabindex:"-1"},[e("Split window "),t("a",{class:"header-anchor",href:"#split-window","aria-label":'Permalink to "Split window"'},"​")],-1),kt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),pt=t("td",null,"Revert view to single column",-1),mt=t("td",null,"Split view into two columns",-1),bt=t("td",null,"Split view into three columns",-1),ft=t("td",null,"Split view into four columns",-1),wt=t("td",null,"Set view to grid (4 groups)",-1),yt=t("td",null,"Split view into two rows",-1),gt=t("td",null,"Jump to group",-1),xt=t("td",null,"Move file to specified group",-1),vt=t("h2",{id:"bookmarks",tabindex:"-1"},[e("Bookmarks "),t("a",{class:"header-anchor",href:"#bookmarks","aria-label":'Permalink to "Bookmarks"'},"​")],-1),Ct=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),St=t("td",null,"Toggle bookmark",-1),Pt=t("td",null,"Next bookmark",-1),Kt=t("td",null,"Previous bookmark",-1),Tt=t("td",null,"Clear bookmarks",-1),Nt=t("h2",{id:"text-manipulation",tabindex:"-1"},[e("Text manipulation "),t("a",{class:"header-anchor",href:"#text-manipulation","aria-label":'Permalink to "Text manipulation"'},"​")],-1),Rt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),Gt=t("td",null,"Transform to upper case",-1),Wt=t("td",null,"Transform to lower case",-1);function Dt(It,Lt,At,Bt,Vt,Ft){const l=s("Key");return d(),r("div",null,[a,t("table",null,[c,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+x"})]),h]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+enter"})]),_]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+enter"})]),k]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+up"})]),p]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+down"})]),m]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+l"})]),b]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+d"})]),f]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+m"})]),w]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+m"})]),y]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+k"})]),g]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+k"})]),x]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+backspace"})]),v]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+]"})]),C]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+["})]),S]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+d"})]),P]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+j"})]),K]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+/"})]),T]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+/"})]),N]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+y"})]),R]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+v"})]),G]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+space"})]),W]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+u"})]),D]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+w"})]),I]),t("tr",null,[t("td",null,[n(l,{k:"alt+."})]),L])])]),A,t("table",null,[B,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+alt+up"})]),V]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+alt+down"})]),F])])]),q,t("table",null,[E,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"alt+shift+up"})]),J]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+down"})]),$])])]),j,t("table",null,[M,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+p"})]),O]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+r"})]),U]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+;"})]),Q]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+g"})]),z])])]),H,t("table",null,[X,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+p"})]),Y]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+b"})]),Z]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+alt+p"})]),tt])])]),lt,t("table",null,[nt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+f"})]),et]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+h"})]),ot]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+f"})]),st])])]),dt,t("table",null,[rt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+t"})]),ut]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+pageup"})]),it]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+pagedown"})]),at]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+tab"})]),t("td",null,[e("Switch to a previous tab, hold "),n(l,{k:"tab"}),e(" and repeat "),n(l,{k:"tab"}),e(" to cycle through previous tabs")])]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+tab"})]),t("td",null,[e("Switch in reverse order to a previous tab, hold "),n(l,{k:"ctrl+shift"}),e(" and repeat "),n(l,{k:"tab"}),e(" to cycle through previous tabs in reverse")])]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+w"})]),ct]),t("tr",null,[t("td",null,[n(l,{k:"alt+[1-9]"})]),ht])])]),_t,t("table",null,[kt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"alt+shift+1"})]),pt]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+2"})]),mt]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+3"})]),bt]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+4"})]),ft]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+5"})]),wt]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+8"})]),yt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+[1-4]"})]),gt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+[1-4]"})]),xt])])]),vt,t("table",null,[Ct,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+f2"})]),St]),t("tr",null,[t("td",null,[n(l,{k:"F2"})]),Pt]),t("tr",null,[t("td",null,[n(l,{k:"shift+f2"})]),Kt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+f2"})]),Tt])])]),Nt,t("table",null,[Rt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+u"})]),Gt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+l"})]),Wt])])])])}const Jt=o(i,[["render",Dt]]);export{Et as __pageData,Jt as default}; diff --git a/assets/reference_keyboard_shortcuts_win.md.9eDwNeRU.lean.js b/assets/reference_keyboard_shortcuts_win.md.2W6q_BNW.lean.js similarity index 99% rename from assets/reference_keyboard_shortcuts_win.md.9eDwNeRU.lean.js rename to assets/reference_keyboard_shortcuts_win.md.2W6q_BNW.lean.js index bdd96eb9..384f700a 100644 --- a/assets/reference_keyboard_shortcuts_win.md.9eDwNeRU.lean.js +++ b/assets/reference_keyboard_shortcuts_win.md.2W6q_BNW.lean.js @@ -1 +1 @@ -import{_ as o,D as s,o as d,c as r,k as t,I as n,a as e,R as u}from"./chunks/framework.e02z-eDF.js";const Et=JSON.parse('{"title":"Keyboard Shortcuts - Windows/Linux","description":"","frontmatter":{"title":"Keyboard Shortcuts - Windows/Linux"},"headers":[],"relativePath":"reference/keyboard_shortcuts_win.md","filePath":"reference/keyboard_shortcuts_win.md","lastUpdated":1703773698000}'),i={name:"reference/keyboard_shortcuts_win.md"},a=u("",3),c=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),h=t("td",null,"Cut line",-1),_=t("td",null,"Insert line after",-1),k=t("td",null,"Insert line before",-1),p=t("td",null,"Move line/selection up",-1),m=t("td",null,"Move line/selection down",-1),b=t("td",null,"Select line - Repeat to select next lines",-1),f=t("td",null,"Select word - Repeat select others occurrences",-1),w=t("td",null,"Jump to closing parentheses Repeat to jump to opening parentheses",-1),y=t("td",null,"Select all contents of the current parentheses",-1),g=t("td",null,"Delete Line",-1),x=t("td",null,"Delete from cursor to end of line",-1),v=t("td",null,"Delete from cursor to start of line",-1),C=t("td",null,"Indent current line(s)",-1),S=t("td",null,"Un-indent current line(s)",-1),P=t("td",null,"Duplicate line(s)",-1),K=t("td",null,"Join line below to the end of the current line",-1),T=t("td",null,"Comment/un-comment current line",-1),N=t("td",null,"Block comment current selection",-1),R=t("td",null,"Redo, or repeat last keyboard shortcut command",-1),G=t("td",null,"Paste and indent correctly",-1),W=t("td",null,"Select next auto-complete suggestion",-1),D=t("td",null,"soft undo; jumps to your last change before undoing change when repeated",-1),I=t("td",null,"Wrap Selection in html tag",-1),L=t("td",null,"Close current html tag",-1),A=t("h2",{id:"windows",tabindex:"-1"},[e("Windows "),t("a",{class:"header-anchor",href:"#windows","aria-label":'Permalink to "Windows"'},"​")],-1),B=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),V=t("td",null,"Column selection up",-1),F=t("td",null,"Column selection down",-1),q=t("h2",{id:"linux",tabindex:"-1"},[e("Linux "),t("a",{class:"header-anchor",href:"#linux","aria-label":'Permalink to "Linux"'},"​")],-1),E=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),J=t("td",null,"Column selection up",-1),$=t("td",null,"Column selection down",-1),j=t("h2",{id:"navigation-goto-anywhere",tabindex:"-1"},[e("Navigation/Goto Anywhere "),t("a",{class:"header-anchor",href:"#navigation-goto-anywhere","aria-label":'Permalink to "Navigation/Goto Anywhere"'},"​")],-1),M=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),O=t("td",null,"Quick-open files by name",-1),U=t("td",null,"Goto symbol",-1),Q=t("td",null,"Goto word in current file",-1),z=t("td",null,"Goto line in current file",-1),H=t("h2",{id:"general",tabindex:"-1"},[e("General "),t("a",{class:"header-anchor",href:"#general","aria-label":'Permalink to "General"'},"​")],-1),X=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),Y=t("td",null,"Command prompt",-1),Z=t("td",null,"Toggle side bar",-1),tt=t("td",null,"Show scope in status bar",-1),lt=t("h2",{id:"find-replace",tabindex:"-1"},[e("Find/Replace "),t("a",{class:"header-anchor",href:"#find-replace","aria-label":'Permalink to "Find/Replace"'},"​")],-1),nt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),et=t("td",null,"Find",-1),ot=t("td",null,"Replace",-1),st=t("td",null,"Find in files",-1),dt=t("h2",{id:"tabs",tabindex:"-1"},[e("Tabs "),t("a",{class:"header-anchor",href:"#tabs","aria-label":'Permalink to "Tabs"'},"​")],-1),rt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),ut=t("td",null,"Open last closed tab",-1),it=t("td",null,"Cycle up through tabs",-1),at=t("td",null,"Cycle down through tabs",-1),ct=t("td",null,"Close current tab",-1),ht=t("td",null,"Switch to tab number",-1),_t=t("h2",{id:"split-window",tabindex:"-1"},[e("Split window "),t("a",{class:"header-anchor",href:"#split-window","aria-label":'Permalink to "Split window"'},"​")],-1),kt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),pt=t("td",null,"Revert view to single column",-1),mt=t("td",null,"Split view into two columns",-1),bt=t("td",null,"Split view into three columns",-1),ft=t("td",null,"Split view into four columns",-1),wt=t("td",null,"Set view to grid (4 groups)",-1),yt=t("td",null,"Split view into two rows",-1),gt=t("td",null,"Jump to group",-1),xt=t("td",null,"Move file to specified group",-1),vt=t("h2",{id:"bookmarks",tabindex:"-1"},[e("Bookmarks "),t("a",{class:"header-anchor",href:"#bookmarks","aria-label":'Permalink to "Bookmarks"'},"​")],-1),Ct=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),St=t("td",null,"Toggle bookmark",-1),Pt=t("td",null,"Next bookmark",-1),Kt=t("td",null,"Previous bookmark",-1),Tt=t("td",null,"Clear bookmarks",-1),Nt=t("h2",{id:"text-manipulation",tabindex:"-1"},[e("Text manipulation "),t("a",{class:"header-anchor",href:"#text-manipulation","aria-label":'Permalink to "Text manipulation"'},"​")],-1),Rt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),Gt=t("td",null,"Transform to upper case",-1),Wt=t("td",null,"Transform to lower case",-1);function Dt(It,Lt,At,Bt,Vt,Ft){const l=s("Key");return d(),r("div",null,[a,t("table",null,[c,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+x"})]),h]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+enter"})]),_]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+enter"})]),k]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+up"})]),p]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+down"})]),m]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+l"})]),b]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+d"})]),f]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+m"})]),w]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+m"})]),y]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+k"})]),g]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+k"})]),x]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+backspace"})]),v]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+]"})]),C]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+["})]),S]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+d"})]),P]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+j"})]),K]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+/"})]),T]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+/"})]),N]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+y"})]),R]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+v"})]),G]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+space"})]),W]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+u"})]),D]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+w"})]),I]),t("tr",null,[t("td",null,[n(l,{k:"alt+."})]),L])])]),A,t("table",null,[B,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+alt+up"})]),V]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+alt+down"})]),F])])]),q,t("table",null,[E,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"alt+shift+up"})]),J]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+down"})]),$])])]),j,t("table",null,[M,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+p"})]),O]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+r"})]),U]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+;"})]),Q]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+g"})]),z])])]),H,t("table",null,[X,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+p"})]),Y]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+b"})]),Z]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+alt+p"})]),tt])])]),lt,t("table",null,[nt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+f"})]),et]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+h"})]),ot]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+f"})]),st])])]),dt,t("table",null,[rt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+t"})]),ut]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+pageup"})]),it]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+pagedown"})]),at]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+tab"})]),t("td",null,[e("Switch to a previous tab, hold "),n(l,{k:"tab"}),e(" and repeat "),n(l,{k:"tab"}),e(" to cycle through previous tabs")])]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+tab"})]),t("td",null,[e("Switch in reverse order to a previous tab, hold "),n(l,{k:"ctrl+shift"}),e(" and repeat "),n(l,{k:"tab"}),e(" to cycle through previous tabs in reverse")])]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+w"})]),ct]),t("tr",null,[t("td",null,[n(l,{k:"alt+[1-9]"})]),ht])])]),_t,t("table",null,[kt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"alt+shift+1"})]),pt]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+2"})]),mt]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+3"})]),bt]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+4"})]),ft]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+5"})]),wt]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+8"})]),yt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+[1-4]"})]),gt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+[1-4]"})]),xt])])]),vt,t("table",null,[Ct,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+f2"})]),St]),t("tr",null,[t("td",null,[n(l,{k:"F2"})]),Pt]),t("tr",null,[t("td",null,[n(l,{k:"shift+f2"})]),Kt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+f2"})]),Tt])])]),Nt,t("table",null,[Rt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+u"})]),Gt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+l"})]),Wt])])])])}const Jt=o(i,[["render",Dt]]);export{Et as __pageData,Jt as default}; +import{_ as o,D as s,o as d,c as r,k as t,I as n,a as e,R as u}from"./chunks/framework.e02z-eDF.js";const Et=JSON.parse('{"title":"Keyboard Shortcuts - Windows/Linux","description":"","frontmatter":{"title":"Keyboard Shortcuts - Windows/Linux"},"headers":[],"relativePath":"reference/keyboard_shortcuts_win.md","filePath":"reference/keyboard_shortcuts_win.md","lastUpdated":1703774098000}'),i={name:"reference/keyboard_shortcuts_win.md"},a=u("",3),c=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),h=t("td",null,"Cut line",-1),_=t("td",null,"Insert line after",-1),k=t("td",null,"Insert line before",-1),p=t("td",null,"Move line/selection up",-1),m=t("td",null,"Move line/selection down",-1),b=t("td",null,"Select line - Repeat to select next lines",-1),f=t("td",null,"Select word - Repeat select others occurrences",-1),w=t("td",null,"Jump to closing parentheses Repeat to jump to opening parentheses",-1),y=t("td",null,"Select all contents of the current parentheses",-1),g=t("td",null,"Delete Line",-1),x=t("td",null,"Delete from cursor to end of line",-1),v=t("td",null,"Delete from cursor to start of line",-1),C=t("td",null,"Indent current line(s)",-1),S=t("td",null,"Un-indent current line(s)",-1),P=t("td",null,"Duplicate line(s)",-1),K=t("td",null,"Join line below to the end of the current line",-1),T=t("td",null,"Comment/un-comment current line",-1),N=t("td",null,"Block comment current selection",-1),R=t("td",null,"Redo, or repeat last keyboard shortcut command",-1),G=t("td",null,"Paste and indent correctly",-1),W=t("td",null,"Select next auto-complete suggestion",-1),D=t("td",null,"soft undo; jumps to your last change before undoing change when repeated",-1),I=t("td",null,"Wrap Selection in html tag",-1),L=t("td",null,"Close current html tag",-1),A=t("h2",{id:"windows",tabindex:"-1"},[e("Windows "),t("a",{class:"header-anchor",href:"#windows","aria-label":'Permalink to "Windows"'},"​")],-1),B=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),V=t("td",null,"Column selection up",-1),F=t("td",null,"Column selection down",-1),q=t("h2",{id:"linux",tabindex:"-1"},[e("Linux "),t("a",{class:"header-anchor",href:"#linux","aria-label":'Permalink to "Linux"'},"​")],-1),E=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),J=t("td",null,"Column selection up",-1),$=t("td",null,"Column selection down",-1),j=t("h2",{id:"navigation-goto-anywhere",tabindex:"-1"},[e("Navigation/Goto Anywhere "),t("a",{class:"header-anchor",href:"#navigation-goto-anywhere","aria-label":'Permalink to "Navigation/Goto Anywhere"'},"​")],-1),M=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),O=t("td",null,"Quick-open files by name",-1),U=t("td",null,"Goto symbol",-1),Q=t("td",null,"Goto word in current file",-1),z=t("td",null,"Goto line in current file",-1),H=t("h2",{id:"general",tabindex:"-1"},[e("General "),t("a",{class:"header-anchor",href:"#general","aria-label":'Permalink to "General"'},"​")],-1),X=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),Y=t("td",null,"Command prompt",-1),Z=t("td",null,"Toggle side bar",-1),tt=t("td",null,"Show scope in status bar",-1),lt=t("h2",{id:"find-replace",tabindex:"-1"},[e("Find/Replace "),t("a",{class:"header-anchor",href:"#find-replace","aria-label":'Permalink to "Find/Replace"'},"​")],-1),nt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),et=t("td",null,"Find",-1),ot=t("td",null,"Replace",-1),st=t("td",null,"Find in files",-1),dt=t("h2",{id:"tabs",tabindex:"-1"},[e("Tabs "),t("a",{class:"header-anchor",href:"#tabs","aria-label":'Permalink to "Tabs"'},"​")],-1),rt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),ut=t("td",null,"Open last closed tab",-1),it=t("td",null,"Cycle up through tabs",-1),at=t("td",null,"Cycle down through tabs",-1),ct=t("td",null,"Close current tab",-1),ht=t("td",null,"Switch to tab number",-1),_t=t("h2",{id:"split-window",tabindex:"-1"},[e("Split window "),t("a",{class:"header-anchor",href:"#split-window","aria-label":'Permalink to "Split window"'},"​")],-1),kt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),pt=t("td",null,"Revert view to single column",-1),mt=t("td",null,"Split view into two columns",-1),bt=t("td",null,"Split view into three columns",-1),ft=t("td",null,"Split view into four columns",-1),wt=t("td",null,"Set view to grid (4 groups)",-1),yt=t("td",null,"Split view into two rows",-1),gt=t("td",null,"Jump to group",-1),xt=t("td",null,"Move file to specified group",-1),vt=t("h2",{id:"bookmarks",tabindex:"-1"},[e("Bookmarks "),t("a",{class:"header-anchor",href:"#bookmarks","aria-label":'Permalink to "Bookmarks"'},"​")],-1),Ct=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),St=t("td",null,"Toggle bookmark",-1),Pt=t("td",null,"Next bookmark",-1),Kt=t("td",null,"Previous bookmark",-1),Tt=t("td",null,"Clear bookmarks",-1),Nt=t("h2",{id:"text-manipulation",tabindex:"-1"},[e("Text manipulation "),t("a",{class:"header-anchor",href:"#text-manipulation","aria-label":'Permalink to "Text manipulation"'},"​")],-1),Rt=t("thead",null,[t("tr",null,[t("th",null,"Keypress"),t("th",null,"Command")])],-1),Gt=t("td",null,"Transform to upper case",-1),Wt=t("td",null,"Transform to lower case",-1);function Dt(It,Lt,At,Bt,Vt,Ft){const l=s("Key");return d(),r("div",null,[a,t("table",null,[c,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+x"})]),h]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+enter"})]),_]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+enter"})]),k]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+up"})]),p]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+down"})]),m]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+l"})]),b]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+d"})]),f]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+m"})]),w]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+m"})]),y]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+k"})]),g]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+k"})]),x]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+backspace"})]),v]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+]"})]),C]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+["})]),S]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+d"})]),P]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+j"})]),K]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+/"})]),T]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+/"})]),N]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+y"})]),R]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+v"})]),G]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+space"})]),W]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+u"})]),D]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+w"})]),I]),t("tr",null,[t("td",null,[n(l,{k:"alt+."})]),L])])]),A,t("table",null,[B,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+alt+up"})]),V]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+alt+down"})]),F])])]),q,t("table",null,[E,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"alt+shift+up"})]),J]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+down"})]),$])])]),j,t("table",null,[M,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+p"})]),O]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+r"})]),U]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+;"})]),Q]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+g"})]),z])])]),H,t("table",null,[X,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+p"})]),Y]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+b"})]),Z]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+alt+p"})]),tt])])]),lt,t("table",null,[nt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+f"})]),et]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+h"})]),ot]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+f"})]),st])])]),dt,t("table",null,[rt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+t"})]),ut]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+pageup"})]),it]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+pagedown"})]),at]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+tab"})]),t("td",null,[e("Switch to a previous tab, hold "),n(l,{k:"tab"}),e(" and repeat "),n(l,{k:"tab"}),e(" to cycle through previous tabs")])]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+tab"})]),t("td",null,[e("Switch in reverse order to a previous tab, hold "),n(l,{k:"ctrl+shift"}),e(" and repeat "),n(l,{k:"tab"}),e(" to cycle through previous tabs in reverse")])]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+w"})]),ct]),t("tr",null,[t("td",null,[n(l,{k:"alt+[1-9]"})]),ht])])]),_t,t("table",null,[kt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"alt+shift+1"})]),pt]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+2"})]),mt]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+3"})]),bt]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+4"})]),ft]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+5"})]),wt]),t("tr",null,[t("td",null,[n(l,{k:"alt+shift+8"})]),yt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+[1-4]"})]),gt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+[1-4]"})]),xt])])]),vt,t("table",null,[Ct,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+f2"})]),St]),t("tr",null,[t("td",null,[n(l,{k:"F2"})]),Pt]),t("tr",null,[t("td",null,[n(l,{k:"shift+f2"})]),Kt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+shift+f2"})]),Tt])])]),Nt,t("table",null,[Rt,t("tbody",null,[t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+u"})]),Gt]),t("tr",null,[t("td",null,[n(l,{k:"ctrl+k, ctrl+l"})]),Wt])])])])}const Jt=o(i,[["render",Dt]]);export{Et as __pageData,Jt as default}; diff --git a/assets/reference_menus.md.hQYWrLru.js b/assets/reference_menus.md.eLErO9Gt.js similarity index 99% rename from assets/reference_menus.md.hQYWrLru.js rename to assets/reference_menus.md.eLErO9Gt.js index f2b5c9f4..1d574b34 100644 --- a/assets/reference_menus.md.hQYWrLru.js +++ b/assets/reference_menus.md.eLErO9Gt.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as a,R as t}from"./chunks/framework.e02z-eDF.js";const c=JSON.parse('{"title":"Menus","description":"","frontmatter":{"title":"Menus"},"headers":[],"relativePath":"reference/menus.md","filePath":"reference/menus.md","lastUpdated":1703773698000}'),n={name:"reference/menus.md"},e=t(`

Menus

See Also

Documentation on menus : Explains how menus work and what you can do with them.

File Format

FormatDescription
FormatJSON (with comments)
Extension.sublime-menu
NameOne out of the list of available menus. See Available Menus for the complete name list and what menu they represent.
LocationAny under Packages
ContentA list of Menu Item objects

Example

The following is an excerpt from the default Main.sublime-menu file.

json
[
+import{_ as s,o as i,c as a,R as t}from"./chunks/framework.e02z-eDF.js";const c=JSON.parse('{"title":"Menus","description":"","frontmatter":{"title":"Menus"},"headers":[],"relativePath":"reference/menus.md","filePath":"reference/menus.md","lastUpdated":1703774098000}'),n={name:"reference/menus.md"},e=t(`

Menus

See Also

Documentation on menus : Explains how menus work and what you can do with them.

File Format

FormatDescription
FormatJSON (with comments)
Extension.sublime-menu
NameOne out of the list of available menus. See Available Menus for the complete name list and what menu they represent.
LocationAny under Packages
ContentA list of Menu Item objects

Example

The following is an excerpt from the default Main.sublime-menu file.

json
[
     {
         "caption": "Edit",
         "mnemonic": "E",
diff --git a/assets/reference_menus.md.hQYWrLru.lean.js b/assets/reference_menus.md.eLErO9Gt.lean.js
similarity index 85%
rename from assets/reference_menus.md.hQYWrLru.lean.js
rename to assets/reference_menus.md.eLErO9Gt.lean.js
index 631479f2..a9878aa3 100644
--- a/assets/reference_menus.md.hQYWrLru.lean.js
+++ b/assets/reference_menus.md.eLErO9Gt.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,R as t}from"./chunks/framework.e02z-eDF.js";const c=JSON.parse('{"title":"Menus","description":"","frontmatter":{"title":"Menus"},"headers":[],"relativePath":"reference/menus.md","filePath":"reference/menus.md","lastUpdated":1703773698000}'),n={name:"reference/menus.md"},e=t("",18),h=[e];function l(p,k,o,E,d,r){return i(),a("div",null,h)}const m=s(n,[["render",l]]);export{c as __pageData,m as default};
+import{_ as s,o as i,c as a,R as t}from"./chunks/framework.e02z-eDF.js";const c=JSON.parse('{"title":"Menus","description":"","frontmatter":{"title":"Menus"},"headers":[],"relativePath":"reference/menus.md","filePath":"reference/menus.md","lastUpdated":1703774098000}'),n={name:"reference/menus.md"},e=t("",18),h=[e];function l(p,k,o,E,d,r){return i(),a("div",null,h)}const m=s(n,[["render",l]]);export{c as __pageData,m as default};
diff --git a/assets/reference_metadata.md.DqdXp5sB.js b/assets/reference_metadata.md.436MM5vk.js
similarity index 99%
rename from assets/reference_metadata.md.DqdXp5sB.js
rename to assets/reference_metadata.md.436MM5vk.js
index fa242c1b..00d13357 100644
--- a/assets/reference_metadata.md.DqdXp5sB.js
+++ b/assets/reference_metadata.md.436MM5vk.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,R as t}from"./chunks/framework.e02z-eDF.js";const o=JSON.parse('{"title":"Metadata Files","description":"","frontmatter":{"title":"Metadata Files"},"headers":[],"relativePath":"reference/metadata.md","filePath":"reference/metadata.md","lastUpdated":1703773698000}'),n={name:"reference/metadata.md"},e=t(`

Metadata Files

Metadata are parameters that can be assigned to certain text sections using scope selectors.

These paremeters can be used for many purposes; for example:

  • specifying the current comment markers, even within embedded source code, so that you can toggle comments in any syntax,
  • defining rules for auto-indentation,
  • marking symbols that Sublime Text will allow you to browse to quickly.

Furthermore, snippets can access metadata declared in the shellVariables setting, which allows you to create a snippet that has different contents depending on where it's used.

File Format

Metadata files have the .tmPreferences extension and use the Property List format. The file name is ignored by Sublime Text.

Metadata files are inherited from TextMate.

Example

Here's an example of a metadata file:

xml
<?xml version="1.0" encoding="UTF-8"?>
+import{_ as s,o as i,c as a,R as t}from"./chunks/framework.e02z-eDF.js";const o=JSON.parse('{"title":"Metadata Files","description":"","frontmatter":{"title":"Metadata Files"},"headers":[],"relativePath":"reference/metadata.md","filePath":"reference/metadata.md","lastUpdated":1703774098000}'),n={name:"reference/metadata.md"},e=t(`

Metadata Files

Metadata are parameters that can be assigned to certain text sections using scope selectors.

These paremeters can be used for many purposes; for example:

  • specifying the current comment markers, even within embedded source code, so that you can toggle comments in any syntax,
  • defining rules for auto-indentation,
  • marking symbols that Sublime Text will allow you to browse to quickly.

Furthermore, snippets can access metadata declared in the shellVariables setting, which allows you to create a snippet that has different contents depending on where it's used.

File Format

Metadata files have the .tmPreferences extension and use the Property List format. The file name is ignored by Sublime Text.

Metadata files are inherited from TextMate.

Example

Here's an example of a metadata file:

xml
<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
diff --git a/assets/reference_metadata.md.DqdXp5sB.lean.js b/assets/reference_metadata.md.436MM5vk.lean.js
similarity index 86%
rename from assets/reference_metadata.md.DqdXp5sB.lean.js
rename to assets/reference_metadata.md.436MM5vk.lean.js
index 3e98c3ef..35cd9dfd 100644
--- a/assets/reference_metadata.md.DqdXp5sB.lean.js
+++ b/assets/reference_metadata.md.436MM5vk.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,R as t}from"./chunks/framework.e02z-eDF.js";const o=JSON.parse('{"title":"Metadata Files","description":"","frontmatter":{"title":"Metadata Files"},"headers":[],"relativePath":"reference/metadata.md","filePath":"reference/metadata.md","lastUpdated":1703773698000}'),n={name:"reference/metadata.md"},e=t("",56),l=[e];function h(k,p,E,r,d,g){return i(),a("div",null,l)}const c=s(n,[["render",h]]);export{o as __pageData,c as default};
+import{_ as s,o as i,c as a,R as t}from"./chunks/framework.e02z-eDF.js";const o=JSON.parse('{"title":"Metadata Files","description":"","frontmatter":{"title":"Metadata Files"},"headers":[],"relativePath":"reference/metadata.md","filePath":"reference/metadata.md","lastUpdated":1703774098000}'),n={name:"reference/metadata.md"},e=t("",56),l=[e];function h(k,p,E,r,d,g){return i(),a("div",null,l)}const c=s(n,[["render",h]]);export{o as __pageData,c as default};
diff --git a/assets/reference_mouse_bindings.md.vweUacWW.js b/assets/reference_mouse_bindings.md.lxpYH4mL.js
similarity index 99%
rename from assets/reference_mouse_bindings.md.vweUacWW.js
rename to assets/reference_mouse_bindings.md.lxpYH4mL.js
index 69850a7d..20e12ae8 100644
--- a/assets/reference_mouse_bindings.md.vweUacWW.js
+++ b/assets/reference_mouse_bindings.md.lxpYH4mL.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as e,R as a}from"./chunks/framework.e02z-eDF.js";const u=JSON.parse('{"title":"Mouse Bindings","description":"","frontmatter":{"title":"Mouse Bindings"},"headers":[],"relativePath":"reference/mouse_bindings.md","filePath":"reference/mouse_bindings.md","lastUpdated":1703773698000}'),t={name:"reference/mouse_bindings.md"},n=a(`

Mouse Bindings

The mousemap files (which have the extension .sublime-mousemap) control what commands are executed when a user performs an action with a mouse, e.g. clicking a mouse button, scrolling the scroll wheel, etc.

File Format

Mousmap files are JSON files, following the naming schema of Keybindings.

Here is a small excerpt from Default/Default (Windows).sublime-mousemap:

json
[
+import{_ as s,o as i,c as e,R as a}from"./chunks/framework.e02z-eDF.js";const u=JSON.parse('{"title":"Mouse Bindings","description":"","frontmatter":{"title":"Mouse Bindings"},"headers":[],"relativePath":"reference/mouse_bindings.md","filePath":"reference/mouse_bindings.md","lastUpdated":1703774098000}'),t={name:"reference/mouse_bindings.md"},n=a(`

Mouse Bindings

The mousemap files (which have the extension .sublime-mousemap) control what commands are executed when a user performs an action with a mouse, e.g. clicking a mouse button, scrolling the scroll wheel, etc.

File Format

Mousmap files are JSON files, following the naming schema of Keybindings.

Here is a small excerpt from Default/Default (Windows).sublime-mousemap:

json
[
     // Basic drag select
     {
         "button": "button1", "count": 1,
diff --git a/assets/reference_mouse_bindings.md.vweUacWW.lean.js b/assets/reference_mouse_bindings.md.lxpYH4mL.lean.js
similarity index 86%
rename from assets/reference_mouse_bindings.md.vweUacWW.lean.js
rename to assets/reference_mouse_bindings.md.lxpYH4mL.lean.js
index ba2a21cf..4538f455 100644
--- a/assets/reference_mouse_bindings.md.vweUacWW.lean.js
+++ b/assets/reference_mouse_bindings.md.lxpYH4mL.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as e,R as a}from"./chunks/framework.e02z-eDF.js";const u=JSON.parse('{"title":"Mouse Bindings","description":"","frontmatter":{"title":"Mouse Bindings"},"headers":[],"relativePath":"reference/mouse_bindings.md","filePath":"reference/mouse_bindings.md","lastUpdated":1703773698000}'),t={name:"reference/mouse_bindings.md"},n=a("",21),h=[n];function o(p,l,k,d,r,c){return i(),e("div",null,h)}const g=s(t,[["render",o]]);export{u as __pageData,g as default};
+import{_ as s,o as i,c as e,R as a}from"./chunks/framework.e02z-eDF.js";const u=JSON.parse('{"title":"Mouse Bindings","description":"","frontmatter":{"title":"Mouse Bindings"},"headers":[],"relativePath":"reference/mouse_bindings.md","filePath":"reference/mouse_bindings.md","lastUpdated":1703774098000}'),t={name:"reference/mouse_bindings.md"},n=a("",21),h=[n];function o(p,l,k,d,r,c){return i(),e("div",null,h)}const g=s(t,[["render",o]]);export{u as __pageData,g as default};
diff --git a/assets/reference_plugins.md.ntaE7vcS.js b/assets/reference_plugins.md._92VSgfX.js
similarity index 99%
rename from assets/reference_plugins.md.ntaE7vcS.js
rename to assets/reference_plugins.md._92VSgfX.js
index 54185b5b..53f35604 100644
--- a/assets/reference_plugins.md.ntaE7vcS.js
+++ b/assets/reference_plugins.md._92VSgfX.js
@@ -1 +1 @@
-import{_ as e,o as a,c as o,R as t}from"./chunks/framework.e02z-eDF.js";const f=JSON.parse('{"title":"Plugins","description":"","frontmatter":{"title":"Plugins"},"headers":[],"relativePath":"reference/plugins.md","filePath":"reference/plugins.md","lastUpdated":1703773698000}'),n={name:"reference/plugins.md"},i=t('

Plugins

See Also

API Reference : More information on the Python API.

Plugins are Python scripts subclassing any of the *Command or *Listener classes from the sublime_plugin module.

Where to Store Plugins

Sublime Text will look for plugins in these places:

  • Packages
  • Packages/<pkg_name>
  • .sublime-package files

Plugin files nested deeper in Packages won't be loaded.

All plugins should live inside a folder of their own and not directly under Packages. This will spare you confusions when Sublime Text attempts to sort packages for loading.

Conventions for Command Names

By convention, Sublime Text command class names are suffixed with Command and written as NamesLikeThisCommand.

However, command names are automatically transformed from NamesLikeThisCommand to name_like_this. Thus, ExampleCommand would become example, and AnotherExampleCommand would become another_example.

In names for classes defining commands, use NameLikeThisCommand. To call a command from the API, use the standardized name_like_this.

Types of Commands

  • sublime_plugin.ApplicationCommand
  • sublime_plugin.WindowCommand
  • sublime_plugin.TextCommand

Instances of WindowCommand have a .window attribute pointing to the window instance that created them. Similarly, instances of TextCommand have a .view attribute. ApplicationCommand instances don't have either.

Shared Traits for Commands

All commands must implement a .run() method.

All commands may additionally provide methods to change their visibility, enabled state, default caption in menus, or even their name (discouraged).

How to Call Commands from the API

Depending on the type of command, use a reference to a View or a Window and call <object>.run_command('command_name'). In addition to the command's name, .run_command accepts a dictionary whose keys are the names of valid parameters for said command:

python
window.run_command("echo", {"Tempus": "Irreparabile", "Fugit": "."})

All user-provided arguments to commands must JSON-serializable. This includes strings, integers, floats, booleans, None, and the recursive list and dict types. Mapping keys must be strings.

Text Commands and the edit Object

Text commands receive an edit object passed to them by Sublime Text.

All actions done within an edit are grouped as a single undo action. Callbacks such as on_modified() and on_selection_modified() are called when the most outer edit operation is finished.

The edit object's life time is solely managed by Sublime Text internally. Plugin authors must ensure to perform all editing operations within the run() method of text commands so that macros and repeating commands work as expected.

Responding to Events

Any subclass of EventListener will be able to respond to events. You cannot make a class derive both from EventListener and from any other type of command.

WARNING

Expensive operations in event listeners can cause Sublime Text to become unresponsive, especially in events triggered frequently, like on_modified() and on_selection_modified(). Be careful of how much work is done in these and don't implement events you don't need, even if they just pass.

Sublime Text and the Python Standard Library

The most significant omission from the default distribution is the tkinter module. Otherwise, you can access the entire Python standard library for the Python version Sublime Text ships with.

Automatic Plugin Reload

Sublime Text will reload topmost Python modules as they change (perhaps because you are editing a .py file within Packages). By contrast, Python subpackages won't be reloaded automatically, and this can lead to confusion while you're developing plugins. Generally speaking, it's best to restart Sublime Text after you've made changes to plugin files, so all changes can take effect.

',33),s=[i];function d(l,c,r,m,h,p){return a(),o("div",null,s)}const g=e(n,[["render",d]]);export{f as __pageData,g as default}; +import{_ as e,o as a,c as o,R as t}from"./chunks/framework.e02z-eDF.js";const f=JSON.parse('{"title":"Plugins","description":"","frontmatter":{"title":"Plugins"},"headers":[],"relativePath":"reference/plugins.md","filePath":"reference/plugins.md","lastUpdated":1703774098000}'),n={name:"reference/plugins.md"},i=t('

Plugins

See Also

API Reference : More information on the Python API.

Plugins are Python scripts subclassing any of the *Command or *Listener classes from the sublime_plugin module.

Where to Store Plugins

Sublime Text will look for plugins in these places:

  • Packages
  • Packages/<pkg_name>
  • .sublime-package files

Plugin files nested deeper in Packages won't be loaded.

All plugins should live inside a folder of their own and not directly under Packages. This will spare you confusions when Sublime Text attempts to sort packages for loading.

Conventions for Command Names

By convention, Sublime Text command class names are suffixed with Command and written as NamesLikeThisCommand.

However, command names are automatically transformed from NamesLikeThisCommand to name_like_this. Thus, ExampleCommand would become example, and AnotherExampleCommand would become another_example.

In names for classes defining commands, use NameLikeThisCommand. To call a command from the API, use the standardized name_like_this.

Types of Commands

  • sublime_plugin.ApplicationCommand
  • sublime_plugin.WindowCommand
  • sublime_plugin.TextCommand

Instances of WindowCommand have a .window attribute pointing to the window instance that created them. Similarly, instances of TextCommand have a .view attribute. ApplicationCommand instances don't have either.

Shared Traits for Commands

All commands must implement a .run() method.

All commands may additionally provide methods to change their visibility, enabled state, default caption in menus, or even their name (discouraged).

How to Call Commands from the API

Depending on the type of command, use a reference to a View or a Window and call <object>.run_command('command_name'). In addition to the command's name, .run_command accepts a dictionary whose keys are the names of valid parameters for said command:

python
window.run_command("echo", {"Tempus": "Irreparabile", "Fugit": "."})

All user-provided arguments to commands must JSON-serializable. This includes strings, integers, floats, booleans, None, and the recursive list and dict types. Mapping keys must be strings.

Text Commands and the edit Object

Text commands receive an edit object passed to them by Sublime Text.

All actions done within an edit are grouped as a single undo action. Callbacks such as on_modified() and on_selection_modified() are called when the most outer edit operation is finished.

The edit object's life time is solely managed by Sublime Text internally. Plugin authors must ensure to perform all editing operations within the run() method of text commands so that macros and repeating commands work as expected.

Responding to Events

Any subclass of EventListener will be able to respond to events. You cannot make a class derive both from EventListener and from any other type of command.

WARNING

Expensive operations in event listeners can cause Sublime Text to become unresponsive, especially in events triggered frequently, like on_modified() and on_selection_modified(). Be careful of how much work is done in these and don't implement events you don't need, even if they just pass.

Sublime Text and the Python Standard Library

The most significant omission from the default distribution is the tkinter module. Otherwise, you can access the entire Python standard library for the Python version Sublime Text ships with.

Automatic Plugin Reload

Sublime Text will reload topmost Python modules as they change (perhaps because you are editing a .py file within Packages). By contrast, Python subpackages won't be reloaded automatically, and this can lead to confusion while you're developing plugins. Generally speaking, it's best to restart Sublime Text after you've made changes to plugin files, so all changes can take effect.

',33),s=[i];function d(l,c,r,m,h,p){return a(),o("div",null,s)}const g=e(n,[["render",d]]);export{f as __pageData,g as default}; diff --git a/assets/reference_plugins.md.ntaE7vcS.lean.js b/assets/reference_plugins.md._92VSgfX.lean.js similarity index 85% rename from assets/reference_plugins.md.ntaE7vcS.lean.js rename to assets/reference_plugins.md._92VSgfX.lean.js index d14d8b31..743204c6 100644 --- a/assets/reference_plugins.md.ntaE7vcS.lean.js +++ b/assets/reference_plugins.md._92VSgfX.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as o,R as t}from"./chunks/framework.e02z-eDF.js";const f=JSON.parse('{"title":"Plugins","description":"","frontmatter":{"title":"Plugins"},"headers":[],"relativePath":"reference/plugins.md","filePath":"reference/plugins.md","lastUpdated":1703773698000}'),n={name:"reference/plugins.md"},i=t("",33),s=[i];function d(l,c,r,m,h,p){return a(),o("div",null,s)}const g=e(n,[["render",d]]);export{f as __pageData,g as default}; +import{_ as e,o as a,c as o,R as t}from"./chunks/framework.e02z-eDF.js";const f=JSON.parse('{"title":"Plugins","description":"","frontmatter":{"title":"Plugins"},"headers":[],"relativePath":"reference/plugins.md","filePath":"reference/plugins.md","lastUpdated":1703774098000}'),n={name:"reference/plugins.md"},i=t("",33),s=[i];function d(l,c,r,m,h,p){return a(),o("div",null,s)}const g=e(n,[["render",d]]);export{f as __pageData,g as default}; diff --git a/assets/reference_projects.md.6jFyUGxQ.js b/assets/reference_projects.md.keXLkGTk.js similarity index 99% rename from assets/reference_projects.md.6jFyUGxQ.js rename to assets/reference_projects.md.keXLkGTk.js index 6f86ff85..ace563e0 100644 --- a/assets/reference_projects.md.6jFyUGxQ.js +++ b/assets/reference_projects.md.keXLkGTk.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as t,R as a}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Projects","description":"","frontmatter":{"title":"Projects"},"headers":[],"relativePath":"reference/projects.md","filePath":"reference/projects.md","lastUpdated":1703773698000}'),e={name:"reference/projects.md"},n=a(`

Projects

See Also

Documentation on projects : Explains how to work with projects.

Official Documentation on projects : May provide more up-to-date details.

Project information is saved in metadata files that can be edited to allow advanced configuration other than adding or removing folders. To edit the project file of the currently active project via the Project → Edit Project menu. An anonymous project cannot be configured in any way, because no .sublime-project file exists for it.

File Format

FormatDescription
FormatJSON (with comments)
Extension.sublime-project
NameAny
LocationAnywhere on your file system
ContentMetadata for projects

Example

Project metadata is split across three topmost sections:

  • folders, for the included folders;
  • settings, for project-specific settings; and
  • build_systems, for project-specific build systems.
json
{
+import{_ as s,o as i,c as t,R as a}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Projects","description":"","frontmatter":{"title":"Projects"},"headers":[],"relativePath":"reference/projects.md","filePath":"reference/projects.md","lastUpdated":1703774098000}'),e={name:"reference/projects.md"},n=a(`

Projects

See Also

Documentation on projects : Explains how to work with projects.

Official Documentation on projects : May provide more up-to-date details.

Project information is saved in metadata files that can be edited to allow advanced configuration other than adding or removing folders. To edit the project file of the currently active project via the Project → Edit Project menu. An anonymous project cannot be configured in any way, because no .sublime-project file exists for it.

File Format

FormatDescription
FormatJSON (with comments)
Extension.sublime-project
NameAny
LocationAnywhere on your file system
ContentMetadata for projects

Example

Project metadata is split across three topmost sections:

  • folders, for the included folders;
  • settings, for project-specific settings; and
  • build_systems, for project-specific build systems.
json
{
     "folders":
     [
         {
diff --git a/assets/reference_projects.md.6jFyUGxQ.lean.js b/assets/reference_projects.md.keXLkGTk.lean.js
similarity index 85%
rename from assets/reference_projects.md.6jFyUGxQ.lean.js
rename to assets/reference_projects.md.keXLkGTk.lean.js
index 0edcce6c..9eaf20ab 100644
--- a/assets/reference_projects.md.6jFyUGxQ.lean.js
+++ b/assets/reference_projects.md.keXLkGTk.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as t,R as a}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Projects","description":"","frontmatter":{"title":"Projects"},"headers":[],"relativePath":"reference/projects.md","filePath":"reference/projects.md","lastUpdated":1703773698000}'),e={name:"reference/projects.md"},n=a("",35),l=[n];function p(o,h,r,d,c,k){return i(),t("div",null,l)}const u=s(e,[["render",p]]);export{g as __pageData,u as default};
+import{_ as s,o as i,c as t,R as a}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Projects","description":"","frontmatter":{"title":"Projects"},"headers":[],"relativePath":"reference/projects.md","filePath":"reference/projects.md","lastUpdated":1703774098000}'),e={name:"reference/projects.md"},n=a("",35),l=[n];function p(o,h,r,d,c,k){return i(),t("div",null,l)}const u=s(e,[["render",p]]);export{g as __pageData,u as default};
diff --git a/assets/reference_python_api.md.atI6Thij.js b/assets/reference_python_api.md.N8o2lw1s.js
similarity index 99%
rename from assets/reference_python_api.md.atI6Thij.js
rename to assets/reference_python_api.md.N8o2lw1s.js
index c57cf210..8c26d9db 100644
--- a/assets/reference_python_api.md.atI6Thij.js
+++ b/assets/reference_python_api.md.N8o2lw1s.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,R as t}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Python API","description":"","frontmatter":{"title":"Python API"},"headers":[],"relativePath":"reference/python_api.md","filePath":"reference/python_api.md","lastUpdated":1703773698000}'),n={name:"reference/python_api.md"},h=t(`

Python API

The official documentation covers the majority of the available API. This document only serves as an addition to that.

Exploring the API

A quick way to see the API in action:

  1. Launch the View Package File command from the command palette.
  2. Insert and filter for Default/.py and choose one of the default plugins to view their source code.

You can not directly edit these files and should not under normal conditions, but they serve as a good reference for the API in usage.

Of course, you may also refer to the source code of any open-source third-party plugin.

Missing in the official docs

There are a few things that are not (yet) documented in the official documentation. A list of undocumented functions or inconsistencies in the documentation has been collected in a GitHub issue.

Following are a few methods (read: one) that we have written our own documentation for.

Window.set_layout

Signature : Window.set_layout(layout: dict)

Changes the tile-based panel layout of view groups. Returns None.

Expects a dictionary like this::

py
{"cols": [float], "rows": [float], "cells": [[int]]}

where [type] represents a list of type.

cols : A list of the column separators (floating point numbers), should start with 0 (left) and end with 1 (right).

rows : A list of the row separators (floating point numbers), should start with 0 (top) and end with 1 (bottom).

cells : A list of cell lists which describe a cell's boundaries each. Cells can be imagines as rectangles with the rows and cols specified along in this dictionary. Think like this:

[x1, y1, x2, y2]

where all values are integers respectively and map to the cols and rows indices. Thus, a cell with [0, 0, 1, 2] translates to a cell from the top left to the first column and the second row separator (in a 2x2 grid this would be bottom center).

Note

rows and cols are not tested for boundaries and they are not adjusted either. Thus, it is possible to specify values lower than 0 or higher than 1 and Sublime Text will in fact treat them accordingly. That means you can crop views or create borders. It is not known whether the "background color" of these empty spaces can be modified, the default is black. Use at your own risk!

The order of column or row separators is not checked either. If you, for example, use a reversed column list like [1, 0.5, 0] you get to see two black panels. Sublime Text is unusable in this state.

Examples

py
# A 2-column layout with a separator in the middle
+import{_ as s,o as i,c as a,R as t}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Python API","description":"","frontmatter":{"title":"Python API"},"headers":[],"relativePath":"reference/python_api.md","filePath":"reference/python_api.md","lastUpdated":1703774098000}'),n={name:"reference/python_api.md"},h=t(`

Python API

The official documentation covers the majority of the available API. This document only serves as an addition to that.

Exploring the API

A quick way to see the API in action:

  1. Launch the View Package File command from the command palette.
  2. Insert and filter for Default/.py and choose one of the default plugins to view their source code.

You can not directly edit these files and should not under normal conditions, but they serve as a good reference for the API in usage.

Of course, you may also refer to the source code of any open-source third-party plugin.

Missing in the official docs

There are a few things that are not (yet) documented in the official documentation. A list of undocumented functions or inconsistencies in the documentation has been collected in a GitHub issue.

Following are a few methods (read: one) that we have written our own documentation for.

Window.set_layout

Signature : Window.set_layout(layout: dict)

Changes the tile-based panel layout of view groups. Returns None.

Expects a dictionary like this::

py
{"cols": [float], "rows": [float], "cells": [[int]]}

where [type] represents a list of type.

cols : A list of the column separators (floating point numbers), should start with 0 (left) and end with 1 (right).

rows : A list of the row separators (floating point numbers), should start with 0 (top) and end with 1 (bottom).

cells : A list of cell lists which describe a cell's boundaries each. Cells can be imagines as rectangles with the rows and cols specified along in this dictionary. Think like this:

[x1, y1, x2, y2]

where all values are integers respectively and map to the cols and rows indices. Thus, a cell with [0, 0, 1, 2] translates to a cell from the top left to the first column and the second row separator (in a 2x2 grid this would be bottom center).

Note

rows and cols are not tested for boundaries and they are not adjusted either. Thus, it is possible to specify values lower than 0 or higher than 1 and Sublime Text will in fact treat them accordingly. That means you can crop views or create borders. It is not known whether the "background color" of these empty spaces can be modified, the default is black. Use at your own risk!

The order of column or row separators is not checked either. If you, for example, use a reversed column list like [1, 0.5, 0] you get to see two black panels. Sublime Text is unusable in this state.

Examples

py
# A 2-column layout with a separator in the middle
 window.set_layout({
     "cols": [0, 0.5, 1],
     "rows": [0, 1],
diff --git a/assets/reference_python_api.md.atI6Thij.lean.js b/assets/reference_python_api.md.N8o2lw1s.lean.js
similarity index 86%
rename from assets/reference_python_api.md.atI6Thij.lean.js
rename to assets/reference_python_api.md.N8o2lw1s.lean.js
index 19f5dc95..d463c7bd 100644
--- a/assets/reference_python_api.md.atI6Thij.lean.js
+++ b/assets/reference_python_api.md.N8o2lw1s.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,R as t}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Python API","description":"","frontmatter":{"title":"Python API"},"headers":[],"relativePath":"reference/python_api.md","filePath":"reference/python_api.md","lastUpdated":1703773698000}'),n={name:"reference/python_api.md"},h=t("",25),e=[h];function l(p,k,r,o,E,d){return i(),a("div",null,e)}const y=s(n,[["render",l]]);export{g as __pageData,y as default};
+import{_ as s,o as i,c as a,R as t}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Python API","description":"","frontmatter":{"title":"Python API"},"headers":[],"relativePath":"reference/python_api.md","filePath":"reference/python_api.md","lastUpdated":1703774098000}'),n={name:"reference/python_api.md"},h=t("",25),e=[h];function l(p,k,r,o,E,d){return i(),a("div",null,e)}const y=s(n,[["render",l]]);export{g as __pageData,y as default};
diff --git a/assets/reference_settings.md.CD7b_OSJ.js b/assets/reference_settings.md.JAvsN6m2.js
similarity index 99%
rename from assets/reference_settings.md.CD7b_OSJ.js
rename to assets/reference_settings.md.JAvsN6m2.js
index 06926d68..c617d660 100644
--- a/assets/reference_settings.md.CD7b_OSJ.js
+++ b/assets/reference_settings.md.JAvsN6m2.js
@@ -1 +1 @@
-import{_ as s,D as d,o as c,c as n,k as t,a as e,I as a,R as i}from"./chunks/framework.e02z-eDF.js";const A=JSON.parse('{"title":"Settings","description":"","frontmatter":{"title":"Settings"},"headers":[],"relativePath":"reference/settings.md","filePath":"reference/settings.md","lastUpdated":1703773698000}'),r={name:"reference/settings.md"},l=i('

Settings

WARNING

This page may contain outdated or incomplete information. You can see a description of most available settings in the default settings file (Preferences → Settings or Default/Preferences.sublime-settings).

See Also

Settings User Guide : Explanations for how settings work in Sublime Text.

Global Settings

These settings can only be modified from Preferences.sublime-settings and Preferences ({platform}).sublime-settings.

theme : Theme to be used. Accepts a file base name (e. g.: Default.sublime-theme).

scroll_speed : Set to 0 to disable smooth scrolling. Set to a value between 0 and 1 to scroll slower, or set to a value larger than 1 to scroll faster.

hot_exit : Exiting the application or window with an associated project with hot_exit enabled will cause it to close immediately without prompting. Unsaved modifications and open files will be preserved and restored when next starting.

remember_open_files : Determines whether to reopen the buffers that were open when Sublime Text was last closed.

open_files_in_new_window : macOS only. When filters are opened from Finder, or by dragging onto the dock icon, this controls if a new window is created or not.

close_windows_when_empty : Close windows as soon as the last file is closed, unless there's a folder open within the window.

show_full_path : Show the full path to files in the title bar.

preview_on_click : If true, preview file contents when clicking on a file in the side bar. Double clicking or editing the preview will open the file and assign it a tab.

folder_exclude_patterns : Excludes the matching folders from the side bar, GoTo Anything, etc.

file_exclude_patterns : Excludes the matching files from the side bar, GoTo Anything, etc.

binary_file_patterns : Excludes the matching files from GoTo Anything and Find in Files but not the side bar.

show_tab_close_buttons : If false, hides the tabs' close buttons until the mouse hovers over the tab.

mouse_wheel_switches_tabs : If true, scrolling the mouse wheel will cause tabs to switch if the cursor is in the tab area.

open_files_in_new_window : macOS only. When filters are opened from Finder, or by dragging onto the dock icon, this controls whether a new window is created or not.

ignored_packages : A list of packages that will be ignored (not loaded).

File Settings

Whitespace and Indentation

auto_indent : Toggles automatic indentation.

tab_size : Number of spaces a tab is considered equal to.

',24),p=t("code",null,"translate_tabs_to_spaces",-1),h=t("code",null,"tab_size",-1),u=t("code",null,"use_tab_stops",-1),_=t("code",null,"translate_tabs_to_spaces",-1),f=t("code",null,"true",-1),g=t("code",null,"tab_size",-1),m=i('

trim_automatic_white_space : Toggles deletion of white space added by auto_indent.

detect_indentation : Set to false to disable detection of tabs vs. spaces whenever a buffer is loaded. If set to true, it automatically will modify translate_tabs_to_spaces and tab_size.

draw_white_space : Valid values: none, selection, all.

trim_trailing_white_space_on_save : Set to true to remove white space on save.

Visual Settings

always_show_minimap_viewport : If set to true, then it will always show rectangle on minimap highlighting current document position; defualt false, which shows position only on mouse over the minimap.

color_scheme : Sets the colors used for text highlighting. Accepts a path rooted at the data directory (e.g.: Packages/Color Scheme - Default/Monokai Bright.tmTheme).

font_face : Font face to be used for editable text.

font_size : Size of the font for editable text.

font_options : Valid values: bold, italic, no_antialias, gray_antialias, subpixel_antialias, directwrite (Windows).

gutter : Toggles display of gutter.

rulers : Columns in which to display vertical rules. Accepts a list of numeric values (such as [79, 89, 99]) or a single numeric value (for example, 79).

draw_minimap_border : Set to true to draw a border around the minimap's region corresponding to the the view's currently visible text. The active color scheme's minimapBorder key controls the border's color.

highlight_line : Set to false to stop highlighting lines with a cursor.

line_padding_top : Additional spacing at the top of each line, in pixels.

line_padding_bottom : Additional spacing at the bottom of each line, in pixels.

scroll_past_end : Set to false to disable scrolling past the end of the buffer. If true, Sublime Text will leave a wide, empty margin between the last line and the bottom of the window.

line_numbers : Toggles display of line numbers in the gutter.

word_wrap : If set to false, long lines will be clipped instead of wrapped. Scroll the screen horizontally to see the clipped text.

wrap_width : If greater than 0, wraps long lines at the specified column as opposed to the window width. Only takes effect if word_wrap is set to true.

indent_subsequent_lines : If set to false, wrapped lines will not be indented. Only takes effect if word_wrap is set to true.

draw_centered : If set to true, text will be drawn centered rather than left-aligned.

match_brackets : Set to false to disable underlining the brackets surrounding the cursor.

match_brackets_content : Set this to false if you'd rather have brackets highlighted only when the cursor is next to one.

match_brackets_square : Set to false to stop highlighting square brackets. Only takes effect if match_brackets is true.

match_brackets_braces : Set to false to stop highlighting curly brackets. Only takes effect if match_brackets is true.

match_brackets_angle : Set to false to stop highlighting angle brackets. Only takes effect if match_brackets is true.

Automatic Behavior

auto_match_enabled : Toggles automatic pairing of quotes, brackets, etc.

save_on_focus_lost : Set to true to save files automatically when switching to a different file or application.

find_selected_text : If true, the selected text will be copied into the find panel when it's shown.

word_separators : Characters considered to divide words for actions like advancing the cursor, etc. Not used for every context where a notion of a word separator is useful (for example, word wrapping). In some contexts, the text might be tokenized based on other criteria (for example, the syntax definition rules).

ensure_newline_at_eof_on_save : Always adds a new line at the end of the file if not present when saving.

System and Miscellaneous Settings

is_widget : Returns true if the buffer is an input field in a dialog, as opposed to a regular buffer.

spell_check : Toggles the spell checker.

dictionary : Word list to be used by the spell checker. Accepts a path rooted at the data directory (such as Packages/Language - English/en_US.dic). You can add more dictionaries.

fallback_encoding : The encoding to use when the encoding can't be determined automatically. ASCII, UTF-8 and UTF-16 encodings will be detected automatically .

default_line_ending : Determines what characters to use to designate new lines. Valid values: system (OS-dependant), windows (CRLF) and unix (LF).

',39),b=t("code",null,"tab_completion",-1),w=i('

Build and Error Navigation Settings

result_file_regex and result_line_regex : Regular expressions used to extract error information from some output dumped into a view or output panel. Follows the same rules as error capturing in build systems.

result_base_dir : Folder to start looking for offending files based on information extracted with result_file_regex and result_line_regex.

build_env : List of paths to add to build systems by default.

File and Directory Settings

default_dir : Sets the default save folder for the view.

Input Settings

command_mode : If set to true, the buffer will ignore key strokes. Useful when emulating Vim's modal behavior.

',8);function k(y,S,v,x,T,I){const o=d("Key");return c(),n("div",null,[l,t("p",null,[p,e(" : Determines whether to replace a tab character with "),h,e(" number of spaces when "),a(o,{k:"tab"}),e(" is pressed.")]),t("p",null,[u,e(" : If "),_,e(" is "),f,e(", will make "),a(o,{k:"tab"}),e(" and")]),a(o,{k:"backspace"}),e(" insert/delete "),g,e(" number of spaces per key press."),m,t("p",null,[b,e(" : Determines whether pressing "),a(o,{k:"tab"}),e(" will insert completions.")]),w])}const P=s(r,[["render",k]]);export{A as __pageData,P as default}; +import{_ as s,D as d,o as c,c as n,k as t,a as e,I as a,R as i}from"./chunks/framework.e02z-eDF.js";const A=JSON.parse('{"title":"Settings","description":"","frontmatter":{"title":"Settings"},"headers":[],"relativePath":"reference/settings.md","filePath":"reference/settings.md","lastUpdated":1703774098000}'),r={name:"reference/settings.md"},l=i('

Settings

WARNING

This page may contain outdated or incomplete information. You can see a description of most available settings in the default settings file (Preferences → Settings or Default/Preferences.sublime-settings).

See Also

Settings User Guide : Explanations for how settings work in Sublime Text.

Global Settings

These settings can only be modified from Preferences.sublime-settings and Preferences ({platform}).sublime-settings.

theme : Theme to be used. Accepts a file base name (e. g.: Default.sublime-theme).

scroll_speed : Set to 0 to disable smooth scrolling. Set to a value between 0 and 1 to scroll slower, or set to a value larger than 1 to scroll faster.

hot_exit : Exiting the application or window with an associated project with hot_exit enabled will cause it to close immediately without prompting. Unsaved modifications and open files will be preserved and restored when next starting.

remember_open_files : Determines whether to reopen the buffers that were open when Sublime Text was last closed.

open_files_in_new_window : macOS only. When filters are opened from Finder, or by dragging onto the dock icon, this controls if a new window is created or not.

close_windows_when_empty : Close windows as soon as the last file is closed, unless there's a folder open within the window.

show_full_path : Show the full path to files in the title bar.

preview_on_click : If true, preview file contents when clicking on a file in the side bar. Double clicking or editing the preview will open the file and assign it a tab.

folder_exclude_patterns : Excludes the matching folders from the side bar, GoTo Anything, etc.

file_exclude_patterns : Excludes the matching files from the side bar, GoTo Anything, etc.

binary_file_patterns : Excludes the matching files from GoTo Anything and Find in Files but not the side bar.

show_tab_close_buttons : If false, hides the tabs' close buttons until the mouse hovers over the tab.

mouse_wheel_switches_tabs : If true, scrolling the mouse wheel will cause tabs to switch if the cursor is in the tab area.

open_files_in_new_window : macOS only. When filters are opened from Finder, or by dragging onto the dock icon, this controls whether a new window is created or not.

ignored_packages : A list of packages that will be ignored (not loaded).

File Settings

Whitespace and Indentation

auto_indent : Toggles automatic indentation.

tab_size : Number of spaces a tab is considered equal to.

',24),p=t("code",null,"translate_tabs_to_spaces",-1),h=t("code",null,"tab_size",-1),u=t("code",null,"use_tab_stops",-1),_=t("code",null,"translate_tabs_to_spaces",-1),f=t("code",null,"true",-1),g=t("code",null,"tab_size",-1),m=i('

trim_automatic_white_space : Toggles deletion of white space added by auto_indent.

detect_indentation : Set to false to disable detection of tabs vs. spaces whenever a buffer is loaded. If set to true, it automatically will modify translate_tabs_to_spaces and tab_size.

draw_white_space : Valid values: none, selection, all.

trim_trailing_white_space_on_save : Set to true to remove white space on save.

Visual Settings

always_show_minimap_viewport : If set to true, then it will always show rectangle on minimap highlighting current document position; defualt false, which shows position only on mouse over the minimap.

color_scheme : Sets the colors used for text highlighting. Accepts a path rooted at the data directory (e.g.: Packages/Color Scheme - Default/Monokai Bright.tmTheme).

font_face : Font face to be used for editable text.

font_size : Size of the font for editable text.

font_options : Valid values: bold, italic, no_antialias, gray_antialias, subpixel_antialias, directwrite (Windows).

gutter : Toggles display of gutter.

rulers : Columns in which to display vertical rules. Accepts a list of numeric values (such as [79, 89, 99]) or a single numeric value (for example, 79).

draw_minimap_border : Set to true to draw a border around the minimap's region corresponding to the the view's currently visible text. The active color scheme's minimapBorder key controls the border's color.

highlight_line : Set to false to stop highlighting lines with a cursor.

line_padding_top : Additional spacing at the top of each line, in pixels.

line_padding_bottom : Additional spacing at the bottom of each line, in pixels.

scroll_past_end : Set to false to disable scrolling past the end of the buffer. If true, Sublime Text will leave a wide, empty margin between the last line and the bottom of the window.

line_numbers : Toggles display of line numbers in the gutter.

word_wrap : If set to false, long lines will be clipped instead of wrapped. Scroll the screen horizontally to see the clipped text.

wrap_width : If greater than 0, wraps long lines at the specified column as opposed to the window width. Only takes effect if word_wrap is set to true.

indent_subsequent_lines : If set to false, wrapped lines will not be indented. Only takes effect if word_wrap is set to true.

draw_centered : If set to true, text will be drawn centered rather than left-aligned.

match_brackets : Set to false to disable underlining the brackets surrounding the cursor.

match_brackets_content : Set this to false if you'd rather have brackets highlighted only when the cursor is next to one.

match_brackets_square : Set to false to stop highlighting square brackets. Only takes effect if match_brackets is true.

match_brackets_braces : Set to false to stop highlighting curly brackets. Only takes effect if match_brackets is true.

match_brackets_angle : Set to false to stop highlighting angle brackets. Only takes effect if match_brackets is true.

Automatic Behavior

auto_match_enabled : Toggles automatic pairing of quotes, brackets, etc.

save_on_focus_lost : Set to true to save files automatically when switching to a different file or application.

find_selected_text : If true, the selected text will be copied into the find panel when it's shown.

word_separators : Characters considered to divide words for actions like advancing the cursor, etc. Not used for every context where a notion of a word separator is useful (for example, word wrapping). In some contexts, the text might be tokenized based on other criteria (for example, the syntax definition rules).

ensure_newline_at_eof_on_save : Always adds a new line at the end of the file if not present when saving.

System and Miscellaneous Settings

is_widget : Returns true if the buffer is an input field in a dialog, as opposed to a regular buffer.

spell_check : Toggles the spell checker.

dictionary : Word list to be used by the spell checker. Accepts a path rooted at the data directory (such as Packages/Language - English/en_US.dic). You can add more dictionaries.

fallback_encoding : The encoding to use when the encoding can't be determined automatically. ASCII, UTF-8 and UTF-16 encodings will be detected automatically .

default_line_ending : Determines what characters to use to designate new lines. Valid values: system (OS-dependant), windows (CRLF) and unix (LF).

',39),b=t("code",null,"tab_completion",-1),w=i('

Build and Error Navigation Settings

result_file_regex and result_line_regex : Regular expressions used to extract error information from some output dumped into a view or output panel. Follows the same rules as error capturing in build systems.

result_base_dir : Folder to start looking for offending files based on information extracted with result_file_regex and result_line_regex.

build_env : List of paths to add to build systems by default.

File and Directory Settings

default_dir : Sets the default save folder for the view.

Input Settings

command_mode : If set to true, the buffer will ignore key strokes. Useful when emulating Vim's modal behavior.

',8);function k(y,S,v,x,T,I){const o=d("Key");return c(),n("div",null,[l,t("p",null,[p,e(" : Determines whether to replace a tab character with "),h,e(" number of spaces when "),a(o,{k:"tab"}),e(" is pressed.")]),t("p",null,[u,e(" : If "),_,e(" is "),f,e(", will make "),a(o,{k:"tab"}),e(" and")]),a(o,{k:"backspace"}),e(" insert/delete "),g,e(" number of spaces per key press."),m,t("p",null,[b,e(" : Determines whether pressing "),a(o,{k:"tab"}),e(" will insert completions.")]),w])}const P=s(r,[["render",k]]);export{A as __pageData,P as default}; diff --git a/assets/reference_settings.md.CD7b_OSJ.lean.js b/assets/reference_settings.md.JAvsN6m2.lean.js similarity index 94% rename from assets/reference_settings.md.CD7b_OSJ.lean.js rename to assets/reference_settings.md.JAvsN6m2.lean.js index d8c6582d..225cb27a 100644 --- a/assets/reference_settings.md.CD7b_OSJ.lean.js +++ b/assets/reference_settings.md.JAvsN6m2.lean.js @@ -1 +1 @@ -import{_ as s,D as d,o as c,c as n,k as t,a as e,I as a,R as i}from"./chunks/framework.e02z-eDF.js";const A=JSON.parse('{"title":"Settings","description":"","frontmatter":{"title":"Settings"},"headers":[],"relativePath":"reference/settings.md","filePath":"reference/settings.md","lastUpdated":1703773698000}'),r={name:"reference/settings.md"},l=i("",24),p=t("code",null,"translate_tabs_to_spaces",-1),h=t("code",null,"tab_size",-1),u=t("code",null,"use_tab_stops",-1),_=t("code",null,"translate_tabs_to_spaces",-1),f=t("code",null,"true",-1),g=t("code",null,"tab_size",-1),m=i("",39),b=t("code",null,"tab_completion",-1),w=i("",8);function k(y,S,v,x,T,I){const o=d("Key");return c(),n("div",null,[l,t("p",null,[p,e(" : Determines whether to replace a tab character with "),h,e(" number of spaces when "),a(o,{k:"tab"}),e(" is pressed.")]),t("p",null,[u,e(" : If "),_,e(" is "),f,e(", will make "),a(o,{k:"tab"}),e(" and")]),a(o,{k:"backspace"}),e(" insert/delete "),g,e(" number of spaces per key press."),m,t("p",null,[b,e(" : Determines whether pressing "),a(o,{k:"tab"}),e(" will insert completions.")]),w])}const P=s(r,[["render",k]]);export{A as __pageData,P as default}; +import{_ as s,D as d,o as c,c as n,k as t,a as e,I as a,R as i}from"./chunks/framework.e02z-eDF.js";const A=JSON.parse('{"title":"Settings","description":"","frontmatter":{"title":"Settings"},"headers":[],"relativePath":"reference/settings.md","filePath":"reference/settings.md","lastUpdated":1703774098000}'),r={name:"reference/settings.md"},l=i("",24),p=t("code",null,"translate_tabs_to_spaces",-1),h=t("code",null,"tab_size",-1),u=t("code",null,"use_tab_stops",-1),_=t("code",null,"translate_tabs_to_spaces",-1),f=t("code",null,"true",-1),g=t("code",null,"tab_size",-1),m=i("",39),b=t("code",null,"tab_completion",-1),w=i("",8);function k(y,S,v,x,T,I){const o=d("Key");return c(),n("div",null,[l,t("p",null,[p,e(" : Determines whether to replace a tab character with "),h,e(" number of spaces when "),a(o,{k:"tab"}),e(" is pressed.")]),t("p",null,[u,e(" : If "),_,e(" is "),f,e(", will make "),a(o,{k:"tab"}),e(" and")]),a(o,{k:"backspace"}),e(" insert/delete "),g,e(" number of spaces per key press."),m,t("p",null,[b,e(" : Determines whether pressing "),a(o,{k:"tab"}),e(" will insert completions.")]),w])}const P=s(r,[["render",k]]);export{A as __pageData,P as default}; diff --git a/assets/reference_symbols.md.TjYzk43K.js b/assets/reference_symbols.md.rVZM5-IJ.js similarity index 99% rename from assets/reference_symbols.md.TjYzk43K.js rename to assets/reference_symbols.md.rVZM5-IJ.js index 65e8dbad..3b5ddfa4 100644 --- a/assets/reference_symbols.md.TjYzk43K.js +++ b/assets/reference_symbols.md.rVZM5-IJ.js @@ -1,4 +1,4 @@ -import{_ as t,D as n,o as l,c as e,k as s,I as a,R as h,a as p}from"./chunks/framework.e02z-eDF.js";const F=JSON.parse('{"title":"Symbols","description":"","frontmatter":{"title":"Symbols"},"headers":[],"relativePath":"reference/symbols.md","filePath":"reference/symbols.md","lastUpdated":1703773698000}'),k={name:"reference/symbols.md"},E=h(`

Symbols

Sublime Text provides basic support for symbol navigation (jumping to class and function definitions, etc.). Symbol navigation can be enabled for any type of file.

The symbol navigation framework in Sublime Text is strictly text-based. No lexical or syntactical analysis is performed.

Format

Symbols are defined using metadata files. Because symbol definition files are commonly required by packages, they are discussed separately in this page for convenience.

Just as regular metadata files, symbol definition files have the .tmPreferences extension and use the Property List format. The file name is ignored by Sublime Text.

See Also

Metadata : Detailed documentation on metadata files.

Defining Symbols

Sublime Text features two types of symbol list: a local symbol list (active file) and a global symbol list (project-wide). Using symbol definition files, you can target both individually.

Symbol definition files use scope selectors to capture symbols in source code files.

Several symbol definition files can coexist in the same package. For example, two symbol definition files could work in tandem: one would define all symbols, and a second one could selectively hide some of them if they were uninteresting for users.

Let's see an example of a symbol definition file:

xml
<?xml version="1.0" encoding="UTF-8"?>
+import{_ as t,D as n,o as l,c as e,k as s,I as a,R as h,a as p}from"./chunks/framework.e02z-eDF.js";const F=JSON.parse('{"title":"Symbols","description":"","frontmatter":{"title":"Symbols"},"headers":[],"relativePath":"reference/symbols.md","filePath":"reference/symbols.md","lastUpdated":1703774098000}'),k={name:"reference/symbols.md"},E=h(`

Symbols

Sublime Text provides basic support for symbol navigation (jumping to class and function definitions, etc.). Symbol navigation can be enabled for any type of file.

The symbol navigation framework in Sublime Text is strictly text-based. No lexical or syntactical analysis is performed.

Format

Symbols are defined using metadata files. Because symbol definition files are commonly required by packages, they are discussed separately in this page for convenience.

Just as regular metadata files, symbol definition files have the .tmPreferences extension and use the Property List format. The file name is ignored by Sublime Text.

See Also

Metadata : Detailed documentation on metadata files.

Defining Symbols

Sublime Text features two types of symbol list: a local symbol list (active file) and a global symbol list (project-wide). Using symbol definition files, you can target both individually.

Symbol definition files use scope selectors to capture symbols in source code files.

Several symbol definition files can coexist in the same package. For example, two symbol definition files could work in tandem: one would define all symbols, and a second one could selectively hide some of them if they were uninteresting for users.

Let's see an example of a symbol definition file:

xml
<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
diff --git a/assets/reference_symbols.md.TjYzk43K.lean.js b/assets/reference_symbols.md.rVZM5-IJ.lean.js
similarity index 94%
rename from assets/reference_symbols.md.TjYzk43K.lean.js
rename to assets/reference_symbols.md.rVZM5-IJ.lean.js
index 6d396105..bcaab08e 100644
--- a/assets/reference_symbols.md.TjYzk43K.lean.js
+++ b/assets/reference_symbols.md.rVZM5-IJ.lean.js
@@ -1 +1 @@
-import{_ as t,D as n,o as l,c as e,k as s,I as a,R as h,a as p}from"./chunks/framework.e02z-eDF.js";const F=JSON.parse('{"title":"Symbols","description":"","frontmatter":{"title":"Symbols"},"headers":[],"relativePath":"reference/symbols.md","filePath":"reference/symbols.md","lastUpdated":1703773698000}'),k={name:"reference/symbols.md"},E=h("",44),r=s("thead",null,[s("tr",null,[s("th",null,"Shortcut"),s("th",null,"Description")])],-1),o=s("td",null,"Go to definition",-1),d=s("td",null,"Show local symbol list",-1),g=s("td",null,"Show global symbol list",-1),y=s("div",{class:"info custom-block"},[s("p",{class:"custom-block-title"},"See Also"),s("p",null,[s("a",{href:"/guide/usage/file-management/navigation.html#goto-anything"},"Goto Anything"),p(" : Browsing symbols using Goto Anything.")])],-1);function c(u,m,b,f,D,A){const i=n("Key");return l(),e("div",null,[E,s("table",null,[r,s("tbody",null,[s("tr",null,[s("td",null,[a(i,{k:"f12"})]),o]),s("tr",null,[s("td",null,[a(i,{k:"ctrl+r"})]),d]),s("tr",null,[s("td",null,[a(i,{k:"ctrl+shift+r"})]),g])])]),y])}const x=t(k,[["render",c]]);export{F as __pageData,x as default};
+import{_ as t,D as n,o as l,c as e,k as s,I as a,R as h,a as p}from"./chunks/framework.e02z-eDF.js";const F=JSON.parse('{"title":"Symbols","description":"","frontmatter":{"title":"Symbols"},"headers":[],"relativePath":"reference/symbols.md","filePath":"reference/symbols.md","lastUpdated":1703774098000}'),k={name:"reference/symbols.md"},E=h("",44),r=s("thead",null,[s("tr",null,[s("th",null,"Shortcut"),s("th",null,"Description")])],-1),o=s("td",null,"Go to definition",-1),d=s("td",null,"Show local symbol list",-1),g=s("td",null,"Show global symbol list",-1),y=s("div",{class:"info custom-block"},[s("p",{class:"custom-block-title"},"See Also"),s("p",null,[s("a",{href:"/guide/usage/file-management/navigation.html#goto-anything"},"Goto Anything"),p(" : Browsing symbols using Goto Anything.")])],-1);function c(u,m,b,f,D,A){const i=n("Key");return l(),e("div",null,[E,s("table",null,[r,s("tbody",null,[s("tr",null,[s("td",null,[a(i,{k:"f12"})]),o]),s("tr",null,[s("td",null,[a(i,{k:"ctrl+r"})]),d]),s("tr",null,[s("td",null,[a(i,{k:"ctrl+shift+r"})]),g])])]),y])}const x=t(k,[["render",c]]);export{F as __pageData,x as default};
diff --git a/assets/reference_syntaxdefs_legacy.md.rHCEsfbY.js b/assets/reference_syntaxdefs_legacy.md.lDaXKVmv.js
similarity index 99%
rename from assets/reference_syntaxdefs_legacy.md.rHCEsfbY.js
rename to assets/reference_syntaxdefs_legacy.md.lDaXKVmv.js
index dd890406..16d70dce 100644
--- a/assets/reference_syntaxdefs_legacy.md.rHCEsfbY.js
+++ b/assets/reference_syntaxdefs_legacy.md.lDaXKVmv.js
@@ -1,4 +1,4 @@
-import{_ as s,o as i,c as a,R as n}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Syntax Definitions (Legacy)","description":"","frontmatter":{"title":"Syntax Definitions (Legacy)"},"headers":[],"relativePath":"reference/syntaxdefs_legacy.md","filePath":"reference/syntaxdefs_legacy.md","lastUpdated":1703773698000}'),t={name:"reference/syntaxdefs_legacy.md"},e=n(`

Syntax Definitions (Legacy)

WARNING

In Sublime Text 3.0 (Build 3084), a new syntax definition format has been added, with the .sublime-syntax extension.

It is highly encouraged to be used in favor of the legacy format described in this document, unless compatibility with older versions or other editors using this format is desired.

See the official documentation for details.

This document describes the old .tmLanguage format inherited from TextMate.

File Format

TextMate syntax definitions are Plist files with the .tmLanguage extension. However, for convenience in this reference document, YAML is shown instead.

Additionally, Sublime Text also understands the .hidden-tmLanguage extension, which can not be selected by the user but only by set by plugins. "Find in Files" makes use of this. The downsite is that these can not be included by import statements in other language definitions.

yaml
---
+import{_ as s,o as i,c as a,R as n}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Syntax Definitions (Legacy)","description":"","frontmatter":{"title":"Syntax Definitions (Legacy)"},"headers":[],"relativePath":"reference/syntaxdefs_legacy.md","filePath":"reference/syntaxdefs_legacy.md","lastUpdated":1703774098000}'),t={name:"reference/syntaxdefs_legacy.md"},e=n(`

Syntax Definitions (Legacy)

WARNING

In Sublime Text 3.0 (Build 3084), a new syntax definition format has been added, with the .sublime-syntax extension.

It is highly encouraged to be used in favor of the legacy format described in this document, unless compatibility with older versions or other editors using this format is desired.

See the official documentation for details.

This document describes the old .tmLanguage format inherited from TextMate.

File Format

TextMate syntax definitions are Plist files with the .tmLanguage extension. However, for convenience in this reference document, YAML is shown instead.

Additionally, Sublime Text also understands the .hidden-tmLanguage extension, which can not be selected by the user but only by set by plugins. "Find in Files" makes use of this. The downsite is that these can not be included by import statements in other language definitions.

yaml
---
 
 # {{ $frontmatter.title }}
 name: Sublime Snippet (Raw)
diff --git a/assets/reference_syntaxdefs_legacy.md.rHCEsfbY.lean.js b/assets/reference_syntaxdefs_legacy.md.lDaXKVmv.lean.js
similarity index 87%
rename from assets/reference_syntaxdefs_legacy.md.rHCEsfbY.lean.js
rename to assets/reference_syntaxdefs_legacy.md.lDaXKVmv.lean.js
index d145e78f..67322231 100644
--- a/assets/reference_syntaxdefs_legacy.md.rHCEsfbY.lean.js
+++ b/assets/reference_syntaxdefs_legacy.md.lDaXKVmv.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as a,R as n}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Syntax Definitions (Legacy)","description":"","frontmatter":{"title":"Syntax Definitions (Legacy)"},"headers":[],"relativePath":"reference/syntaxdefs_legacy.md","filePath":"reference/syntaxdefs_legacy.md","lastUpdated":1703773698000}'),t={name:"reference/syntaxdefs_legacy.md"},e=n("",40),h=[e];function l(p,k,r,d,E,o){return i(),a("div",null,h)}const y=s(t,[["render",l]]);export{g as __pageData,y as default};
+import{_ as s,o as i,c as a,R as n}from"./chunks/framework.e02z-eDF.js";const g=JSON.parse('{"title":"Syntax Definitions (Legacy)","description":"","frontmatter":{"title":"Syntax Definitions (Legacy)"},"headers":[],"relativePath":"reference/syntaxdefs_legacy.md","filePath":"reference/syntaxdefs_legacy.md","lastUpdated":1703774098000}'),t={name:"reference/syntaxdefs_legacy.md"},e=n("",40),h=[e];function l(p,k,r,d,E,o){return i(),a("div",null,h)}const y=s(t,[["render",l]]);export{g as __pageData,y as default};
diff --git a/assets/style.uFazi2F0.css b/assets/style.zWldQL4n.css
similarity index 99%
rename from assets/style.uFazi2F0.css
rename to assets/style.zWldQL4n.css
index 59294047..bc55e82d 100644
--- a/assets/style.uFazi2F0.css
+++ b/assets/style.zWldQL4n.css
@@ -1 +1 @@
-@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic.jIZ9REo5.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic-ext.8T9wMG5w.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek.Cb5wWeGA.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek-ext.9JiNzaSO.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin.bvIUbFQP.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin-ext.GZWE-KO4.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-vietnamese.paY3CzEB.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic.-nLMcIwj.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic-ext.OVycGSDq.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek.PSfer2Kc.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek-ext.hznxWNZO.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin.27E69YJn.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin-ext.RnFly65-.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-vietnamese.xzQHe1q1.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Chinese Quotes;src:local("PingFang SC Regular"),local("PingFang SC"),local("SimHei"),local("Source Han Sans SC");unicode-range:U+2018,U+2019,U+201C,U+201D}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Chinese Quotes", "Inter var", "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4'/%3E%3C/svg%3E")}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-green-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-green-1);--vp-code-line-diff-remove-color: var(--vp-c-red-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-red-1);--vp-code-line-warning-color: var(--vp-c-yellow-soft);--vp-code-line-error-color: var(--vp-c-red-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-brand-soft);--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-gray-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-brand-1);--vp-badge-tip-bg: var(--vp-c-brand-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);direction:ltr;font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{display:inline-block;margin:auto 2px -2px}mjx-container>svg{margin:auto}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-brand-1)}.custom-block.tip a:hover{color:var(--vp-c-brand-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin-bottom:4px;text-align:center;letter-spacing:1px;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge[data-v-8e5de7b5]{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.vp-doc h1>.VPBadge[data-v-8e5de7b5]{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge[data-v-8e5de7b5]{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge[data-v-8e5de7b5]{vertical-align:middle}.vp-doc h4>.VPBadge[data-v-8e5de7b5],.vp-doc h5>.VPBadge[data-v-8e5de7b5],.vp-doc h6>.VPBadge[data-v-8e5de7b5]{vertical-align:middle;line-height:18px}.VPBadge.info[data-v-8e5de7b5]{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip[data-v-8e5de7b5]{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning[data-v-8e5de7b5]{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger[data-v-8e5de7b5]{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-d91a541d]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-d91a541d],.VPBackdrop.fade-leave-to[data-v-d91a541d]{opacity:0}.VPBackdrop.fade-leave-active[data-v-d91a541d]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-d91a541d]{display:none}}.NotFound[data-v-cfc4d30e]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-cfc4d30e]{padding:96px 32px 168px}}.code[data-v-cfc4d30e]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-cfc4d30e]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-cfc4d30e]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-cfc4d30e]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-cfc4d30e]{padding-top:20px}.link[data-v-cfc4d30e]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-cfc4d30e]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-2e1d0d89]{position:relative;z-index:1}.nested[data-v-2e1d0d89]{padding-left:16px}.outline-link[data-v-2e1d0d89]{display:block;line-height:28px;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s;font-weight:400}.outline-link[data-v-2e1d0d89]:hover,.outline-link.active[data-v-2e1d0d89]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-2e1d0d89]{padding-left:13px}.VPDocAsideOutline[data-v-804edd04]{display:none}.VPDocAsideOutline.has-outline[data-v-804edd04]{display:block}.content[data-v-804edd04]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-804edd04]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-804edd04]{letter-spacing:.4px;line-height:28px;font-size:13px;font-weight:600}.VPDocAside[data-v-36271f2f]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-36271f2f]{flex-grow:1}.VPDocAside[data-v-36271f2f] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-36271f2f] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-36271f2f] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-16b61710]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-16b61710]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-a58c023b]{margin-top:64px}.edit-info[data-v-a58c023b]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-a58c023b]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-a58c023b]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-a58c023b]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-a58c023b]{margin-right:8px;width:14px;height:14px;fill:currentColor}.prev-next[data-v-a58c023b]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-a58c023b]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-a58c023b]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-a58c023b]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-a58c023b]{margin-left:auto;text-align:right}.desc[data-v-a58c023b]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-a58c023b]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDocOutlineDropdown[data-v-f870817c]{margin-bottom:48px}.VPDocOutlineDropdown button[data-v-f870817c]{display:block;font-size:14px;font-weight:500;line-height:24px;border:1px solid var(--vp-c-border);padding:4px 12px;color:var(--vp-c-text-2);background-color:var(--vp-c-default-soft);border-radius:8px;transition:color .5s}.VPDocOutlineDropdown button[data-v-f870817c]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPDocOutlineDropdown button.open[data-v-f870817c]{color:var(--vp-c-text-1)}.icon[data-v-f870817c]{display:inline-block;vertical-align:middle;width:16px;height:16px;fill:currentColor}[data-v-f870817c] .outline-link{font-size:14px;font-weight:400}.open>.icon[data-v-f870817c]{transform:rotate(90deg)}.items[data-v-f870817c]{margin-top:12px;border-left:1px solid var(--vp-c-divider)}.VPDoc[data-v-82d617ea]{padding:32px 24px 96px;width:100%}.VPDoc .VPDocOutlineDropdown[data-v-82d617ea]{display:none}@media (min-width: 960px) and (max-width: 1279px){.VPDoc .VPDocOutlineDropdown[data-v-82d617ea]{display:block}}@media (min-width: 768px){.VPDoc[data-v-82d617ea]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-82d617ea]{padding:32px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-82d617ea]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-82d617ea]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-82d617ea]{display:flex;justify-content:center}.VPDoc .aside[data-v-82d617ea]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-82d617ea]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-82d617ea]{max-width:1104px}}.container[data-v-82d617ea]{margin:0 auto;width:100%}.aside[data-v-82d617ea]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-82d617ea]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-82d617ea]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 32px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-82d617ea]::-webkit-scrollbar{display:none}.aside-curtain[data-v-82d617ea]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-82d617ea]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 32px));padding-bottom:32px}.content[data-v-82d617ea]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-82d617ea]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-82d617ea]{order:1;margin:0;min-width:640px}}.content-container[data-v-82d617ea]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-82d617ea]{max-width:688px}.external-link-icon-enabled :is(.vp-doc a[href*="://"][data-v-82d617ea],.vp-doc a[target=_blank][data-v-82d617ea]):after{content:"";color:currentColor}.VPButton[data-v-4a2eba7d]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-4a2eba7d]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-4a2eba7d]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-4a2eba7d]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-4a2eba7d]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-4a2eba7d]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-4a2eba7d]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-4a2eba7d]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-4a2eba7d]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-4a2eba7d]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-4a2eba7d]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-4a2eba7d]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-4a2eba7d]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-dd6296fd]{display:none}.dark .VPImage.light[data-v-dd6296fd]{display:none}.VPHero[data-v-ae913f1f]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-ae913f1f]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-ae913f1f]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-ae913f1f]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-ae913f1f]{flex-direction:row}}.main[data-v-ae913f1f]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-ae913f1f]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-ae913f1f]{text-align:left}}@media (min-width: 960px){.main[data-v-ae913f1f]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-ae913f1f]{max-width:592px}}.name[data-v-ae913f1f],.text[data-v-ae913f1f]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-ae913f1f],.VPHero.has-image .text[data-v-ae913f1f]{margin:0 auto}.name[data-v-ae913f1f]{color:var(--vp-home-hero-name-color)}.clip[data-v-ae913f1f]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-ae913f1f],.text[data-v-ae913f1f]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-ae913f1f],.text[data-v-ae913f1f]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-ae913f1f],.VPHero.has-image .text[data-v-ae913f1f]{margin:0}}.tagline[data-v-ae913f1f]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-ae913f1f]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-ae913f1f]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-ae913f1f]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-ae913f1f]{margin:0}}.actions[data-v-ae913f1f]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-ae913f1f]{justify-content:center}@media (min-width: 640px){.actions[data-v-ae913f1f]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-ae913f1f]{justify-content:flex-start}}.action[data-v-ae913f1f]{flex-shrink:0;padding:6px}.image[data-v-ae913f1f]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-ae913f1f]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-ae913f1f]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-ae913f1f]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-ae913f1f]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-ae913f1f]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-ae913f1f]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-ae913f1f]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-ae913f1f]{width:320px;height:320px}}[data-v-ae913f1f] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-ae913f1f] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-ae913f1f] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-0c85ab1e]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-0c85ab1e]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-0c85ab1e]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-0c85ab1e]>.VPImage{margin-bottom:20px}.icon[data-v-0c85ab1e]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-0c85ab1e]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-0c85ab1e]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-0c85ab1e]{padding-top:8px}.link-text-value[data-v-0c85ab1e]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-0c85ab1e]{display:inline-block;margin-left:6px;width:14px;height:14px;fill:currentColor}.VPFeatures[data-v-785260d0]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-785260d0]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-785260d0]{padding:0 64px}}.container[data-v-785260d0]{margin:0 auto;max-width:1152px}.items[data-v-785260d0]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-785260d0]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-785260d0],.item.grid-4[data-v-785260d0],.item.grid-6[data-v-785260d0]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-785260d0],.item.grid-4[data-v-785260d0]{width:50%}.item.grid-3[data-v-785260d0],.item.grid-6[data-v-785260d0]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-785260d0]{width:25%}}.VPHome[data-v-019b2e8b]{padding-bottom:96px}.VPHome[data-v-019b2e8b] .VPHomeSponsors{margin-top:112px;margin-bottom:-128px}@media (min-width: 768px){.VPHome[data-v-019b2e8b]{padding-bottom:128px}}.VPContent[data-v-25166022]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-25166022]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-25166022]{margin:0}@media (min-width: 960px){.VPContent[data-v-25166022]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-25166022]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-25166022]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-2167236e]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-2167236e]{display:none}.VPFooter[data-v-2167236e] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-2167236e] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-2167236e]{padding:32px}}.container[data-v-2167236e]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-2167236e],.copyright[data-v-2167236e]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-5eabed16]{padding:12px 20px 11px}.VPLocalNavOutlineDropdown button[data-v-5eabed16]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-5eabed16]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-5eabed16]{color:var(--vp-c-text-1)}.icon[data-v-5eabed16]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}[data-v-5eabed16] .outline-link{font-size:14px;padding:2px 0}.open>.icon[data-v-5eabed16]{transform:rotate(90deg)}.items[data-v-5eabed16]{position:absolute;top:64px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}.header[data-v-5eabed16]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-5eabed16]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-5eabed16]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-5eabed16]{transition:all .2s ease-out}.flyout-leave-active[data-v-5eabed16]{transition:all .15s ease-in}.flyout-enter-from[data-v-5eabed16],.flyout-leave-to[data-v-5eabed16]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-c59684ea]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--vp-c-gutter);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-c59684ea]{position:fixed}.VPLocalNav.reached-top[data-v-c59684ea]{border-top-color:transparent}@media (min-width: 960px){.VPLocalNav[data-v-c59684ea]{display:none}}.menu[data-v-c59684ea]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-c59684ea]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-c59684ea]{padding:0 32px}}.menu-icon[data-v-c59684ea]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPOutlineDropdown[data-v-c59684ea]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-c59684ea]{padding:12px 32px 11px}}.VPSwitch[data-v-ec2307f5]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-ec2307f5]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-ec2307f5]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-ec2307f5]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-ec2307f5] svg{position:absolute;top:3px;left:3px;width:12px;height:12px;fill:var(--vp-c-text-2)}.dark .icon[data-v-ec2307f5] svg{fill:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-fc143792]{opacity:1}.moon[data-v-fc143792],.dark .sun[data-v-fc143792]{opacity:0}.dark .moon[data-v-fc143792]{opacity:1}.dark .VPSwitchAppearance[data-v-fc143792] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-69a12f88]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-69a12f88]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-f3f1d0d6]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-f3f1d0d6]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-f3f1d0d6]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-f3f1d0d6]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-5f3ba920]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-5f3ba920]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-5f3ba920]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-5f3ba920]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-c11177e2]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-c11177e2] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-c11177e2] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-c11177e2] .group:last-child{padding-bottom:0}.VPMenu[data-v-c11177e2] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-c11177e2] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-c11177e2] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-c11177e2] .action{padding-left:24px}.VPFlyout[data-v-17a03ba2]{position:relative}.VPFlyout[data-v-17a03ba2]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-17a03ba2]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-17a03ba2]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-17a03ba2]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-17a03ba2]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-17a03ba2],.button[aria-expanded=true]+.menu[data-v-17a03ba2]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-17a03ba2]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-17a03ba2]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-17a03ba2]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-17a03ba2]{margin-right:0;width:16px;height:16px;fill:currentColor}.text-icon[data-v-17a03ba2]{margin-left:4px;width:14px;height:14px;fill:currentColor}.icon[data-v-17a03ba2]{width:20px;height:20px;fill:currentColor;transition:fill .25s}.menu[data-v-17a03ba2]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-b18e39b7]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-b18e39b7]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-b18e39b7]>svg{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-7aefb0ed]{display:flex;justify-content:center}.VPNavBarExtra[data-v-33ccd86e]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-33ccd86e]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-33ccd86e]{display:none}}.trans-title[data-v-33ccd86e]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-33ccd86e],.item.social-links[data-v-33ccd86e]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-33ccd86e]{min-width:176px}.appearance-action[data-v-33ccd86e]{margin-right:-2px}.social-links-list[data-v-33ccd86e]{margin:-4px -8px}.VPNavBarHamburger[data-v-aa14a2e0]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-aa14a2e0]{display:none}}.container[data-v-aa14a2e0]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-aa14a2e0]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-aa14a2e0]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-aa14a2e0]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-aa14a2e0]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-aa14a2e0]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-aa14a2e0]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-aa14a2e0],.VPNavBarHamburger.active:hover .middle[data-v-aa14a2e0],.VPNavBarHamburger.active:hover .bottom[data-v-aa14a2e0]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-aa14a2e0],.middle[data-v-aa14a2e0],.bottom[data-v-aa14a2e0]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-aa14a2e0]{top:0;left:0;transform:translate(0)}.middle[data-v-aa14a2e0]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-aa14a2e0]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-e0a0d8dd]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-e0a0d8dd],.VPNavBarMenuLink[data-v-e0a0d8dd]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-b64f523b]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-b64f523b]{display:flex}}/*! @docsearch/css 3.5.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-33543233]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-33543233]{display:flex;align-items:center}}.title[data-v-c5d320aa]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-c5d320aa]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-c5d320aa]{border-bottom-color:var(--vp-c-divider)}}[data-v-c5d320aa] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-264b4d47]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-264b4d47]{display:flex;align-items:center}}.title[data-v-264b4d47]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-b92ea2b7]{position:relative;border-bottom:1px solid transparent;padding:0 8px 0 24px;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap}@media (min-width: 768px){.VPNavBar[data-v-b92ea2b7]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar[data-v-b92ea2b7]{padding:0}.VPNavBar[data-v-b92ea2b7]:not(.has-sidebar):not(.top){border-bottom-color:var(--vp-c-gutter);background-color:var(--vp-nav-bg-color)}}.container[data-v-b92ea2b7]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-b92ea2b7],.container>.content[data-v-b92ea2b7]{pointer-events:none}.container[data-v-b92ea2b7] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-b92ea2b7]{max-width:100%}}.title[data-v-b92ea2b7]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-b92ea2b7]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-b92ea2b7]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-b92ea2b7]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-b92ea2b7]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-b92ea2b7]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-b92ea2b7]{display:flex;justify-content:flex-end;align-items:center;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.top) .content-body[data-v-b92ea2b7]{position:relative;background-color:var(--vp-nav-bg-color)}}@media (max-width: 767px){.content-body[data-v-b92ea2b7]{column-gap:.5rem}}.menu+.translations[data-v-b92ea2b7]:before,.menu+.appearance[data-v-b92ea2b7]:before,.menu+.social-links[data-v-b92ea2b7]:before,.translations+.appearance[data-v-b92ea2b7]:before,.appearance+.social-links[data-v-b92ea2b7]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-b92ea2b7]:before,.translations+.appearance[data-v-b92ea2b7]:before{margin-right:16px}.appearance+.social-links[data-v-b92ea2b7]:before{margin-left:16px}.social-links[data-v-b92ea2b7]{margin-right:-8px}@media (min-width: 960px){.VPNavBar.has-sidebar .curtain[data-v-b92ea2b7]{position:absolute;right:0;bottom:-31px;width:calc(100% - var(--vp-sidebar-width));height:32px}.VPNavBar.has-sidebar .curtain[data-v-b92ea2b7]:before{display:block;width:100%;height:32px;background:linear-gradient(var(--vp-c-bg),transparent 70%);content:""}}@media (min-width: 1440px){.VPNavBar.has-sidebar .curtain[data-v-b92ea2b7]{width:calc(100% - ((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width)))}}.VPNavScreenAppearance[data-v-651bd865]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-651bd865]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-f054d3ad]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-f054d3ad]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-5979f4e5]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-5979f4e5]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-0eb82c6c]{display:block}.title[data-v-0eb82c6c]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-5e140e0a]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-5e140e0a]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-5e140e0a]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-5e140e0a]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-5e140e0a]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-5e140e0a]{transform:rotate(45deg)}.button[data-v-5e140e0a]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-5e140e0a]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-5e140e0a]{width:14px;height:14px;fill:var(--vp-c-text-2);transition:fill .5s,transform .25s}.group[data-v-5e140e0a]:first-child{padding-top:0}.group+.group[data-v-5e140e0a],.group+.item[data-v-5e140e0a]{padding-top:4px}.VPNavScreenTranslations[data-v-dab85674]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-dab85674]{height:auto}.title[data-v-dab85674]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-dab85674]{width:16px;height:16px;fill:currentColor}.icon.lang[data-v-dab85674]{margin-right:8px}.icon.chevron[data-v-dab85674]{margin-left:4px}.list[data-v-dab85674]{padding:4px 0 0 24px}.link[data-v-dab85674]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-81f57899]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-81f57899],.VPNavScreen.fade-leave-active[data-v-81f57899]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-81f57899],.VPNavScreen.fade-leave-active .container[data-v-81f57899]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-81f57899],.VPNavScreen.fade-leave-to[data-v-81f57899]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-81f57899],.VPNavScreen.fade-leave-to .container[data-v-81f57899]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-81f57899]{display:none}}.container[data-v-81f57899]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-81f57899],.menu+.appearance[data-v-81f57899],.translations+.appearance[data-v-81f57899]{margin-top:24px}.menu+.social-links[data-v-81f57899]{margin-top:16px}.appearance+.social-links[data-v-81f57899]{margin-top:16px}.VPNav[data-v-7fde9db3]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-7fde9db3]{position:fixed}}.VPSidebarItem.level-0[data-v-5f199203]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-5f199203]{padding-bottom:10px}.item[data-v-5f199203]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-5f199203]{cursor:pointer}.indicator[data-v-5f199203]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-5f199203],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-5f199203],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-5f199203],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-5f199203]{background-color:var(--vp-c-brand-1)}.link[data-v-5f199203]{display:flex;align-items:center;flex-grow:1}.text[data-v-5f199203]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-5f199203]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-5f199203],.VPSidebarItem.level-2 .text[data-v-5f199203],.VPSidebarItem.level-3 .text[data-v-5f199203],.VPSidebarItem.level-4 .text[data-v-5f199203],.VPSidebarItem.level-5 .text[data-v-5f199203]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-5f199203],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-5f199203],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-5f199203],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-5f199203],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-5f199203],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-5f199203]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-5f199203],.VPSidebarItem.level-1.has-active>.item>.text[data-v-5f199203],.VPSidebarItem.level-2.has-active>.item>.text[data-v-5f199203],.VPSidebarItem.level-3.has-active>.item>.text[data-v-5f199203],.VPSidebarItem.level-4.has-active>.item>.text[data-v-5f199203],.VPSidebarItem.level-5.has-active>.item>.text[data-v-5f199203],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-5f199203],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-5f199203],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-5f199203],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-5f199203],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-5f199203],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-5f199203]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-5f199203],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-5f199203],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-5f199203],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-5f199203],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-5f199203],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-5f199203]{color:var(--vp-c-brand-1)}.caret[data-v-5f199203]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-5f199203]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-5f199203]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-5f199203]{width:18px;height:18px;fill:currentColor;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-5f199203]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-5f199203],.VPSidebarItem.level-2 .items[data-v-5f199203],.VPSidebarItem.level-3 .items[data-v-5f199203],.VPSidebarItem.level-4 .items[data-v-5f199203],.VPSidebarItem.level-5 .items[data-v-5f199203]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-5f199203]{display:none}.VPSidebar[data-v-ff32fb20]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-ff32fb20]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-ff32fb20]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-ff32fb20]{z-index:1;padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-ff32fb20]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-ff32fb20]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-ff32fb20]{outline:0}.group+.group[data-v-ff32fb20]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-ff32fb20]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-288d5425]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-288d5425]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-288d5425]{top:14px;left:16px}}.Layout[data-v-2457d3ed]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-b3d73fdf]{border-top:1px solid var(--vp-c-gutter);padding:88px 24px 96px;background-color:var(--vp-c-bg)}.container[data-v-b3d73fdf]{margin:0 auto;max-width:1152px}.love[data-v-b3d73fdf]{margin:0 auto;width:28px;height:28px;color:var(--vp-c-text-3)}.icon[data-v-b3d73fdf]{width:28px;height:28px;fill:currentColor}.message[data-v-b3d73fdf]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-b3d73fdf]{padding-top:32px}.action[data-v-b3d73fdf]{padding-top:40px;text-align:center}.VPTeamPage[data-v-2152923c]{padding-bottom:96px}@media (min-width: 768px){.VPTeamPage[data-v-2152923c]{padding-bottom:128px}}.VPTeamPageSection+.VPTeamPageSection[data-v-2152923c-s],.VPTeamMembers+.VPTeamPageSection[data-v-2152923c-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-2152923c-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-2152923c-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-2152923c-s],.VPTeamMembers+.VPTeamPageSection[data-v-2152923c-s]{margin-top:96px}}.VPTeamMembers[data-v-2152923c-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-2152923c-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-2152923c-s]{padding:0 64px}}.VPTeamPageTitle[data-v-4e1991bc]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-4e1991bc]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-4e1991bc]{padding:80px 64px 48px}}.title[data-v-4e1991bc]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-4e1991bc]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-4e1991bc]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-4e1991bc]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-88abd926]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-88abd926]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-88abd926]{padding:0 64px}}.title[data-v-88abd926]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-88abd926]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-88abd926]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-88abd926]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-88abd926]{padding-top:40px}.VPTeamMembersItem[data-v-0629ebc7]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-0629ebc7]{padding:32px}.VPTeamMembersItem.small .data[data-v-0629ebc7]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-0629ebc7]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-0629ebc7]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-0629ebc7]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-0629ebc7]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-0629ebc7]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-0629ebc7]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-0629ebc7]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-0629ebc7]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-0629ebc7]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-0629ebc7]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-0629ebc7]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-0629ebc7]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-0629ebc7]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-0629ebc7]{text-align:center}.avatar[data-v-0629ebc7]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-0629ebc7]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-0629ebc7]{margin:0;font-weight:600}.affiliation[data-v-0629ebc7]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-0629ebc7]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-0629ebc7]:hover{color:var(--vp-c-brand-1)}.desc[data-v-0629ebc7]{margin:0 auto}.desc[data-v-0629ebc7] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-0629ebc7]{display:flex;justify-content:center;height:56px}.sp-link[data-v-0629ebc7]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-0629ebc7]:hover,.sp .sp-link.link[data-v-0629ebc7]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-0629ebc7]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPTeamMembers.small .container[data-v-67d9d947]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-67d9d947]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-67d9d947]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-67d9d947]{max-width:876px}.VPTeamMembers.medium .container[data-v-67d9d947]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-67d9d947]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-67d9d947]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-67d9d947]{max-width:760px}.container[data-v-67d9d947]{display:grid;gap:24px;margin:0 auto;max-width:1152px}dd{margin-inline-start:1em;padding:0 0 .75em}dt.defined-term{font-weight:600;color:#8b9c16}.term{font-weight:400;color:#8b9c16}.term-not-found{color:#8b0000}.custom-layout[data-v-f37d1169]{padding:0 24px}@media (min-width: 640px){.custom-layout[data-v-f37d1169]{padding:0 48px}}@media (min-width: 960px){.custom-layout[data-v-f37d1169]{padding:0 64px}}.custom-container[data-v-f37d1169]{max-width:1152px;margin:2rem auto 0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:1rem}.contributors-card[data-v-2d63f958]{--item-height: 256px;--item-width: 180px;--item-gap: 0px;background-color:var(--vp-c-bg-soft);color:var(--vp-c-text-1);min-height:400px;border-radius:10px;padding:24px}.contributors-card h1[data-v-2d63f958]{font-size:1.75rem;font-weight:600}.hidden[data-v-2d63f958]{display:none}.toggleButton[data-v-2d63f958]{cursor:pointer}.icon-container[data-v-2d63f958]{display:inline-block;width:24px;height:24px;position:relative}.contributors[data-v-2d63f958]{max-height:calc(var(--item-height) * 2);overflow:hidden}#showMoreToggle:checked~.contributors[data-v-2d63f958]{max-height:none}#showMoreToggle:checked~.toggleButton .show[data-v-2d63f958],#showMoreToggle:not(:checked)~.toggleButton .hide[data-v-2d63f958]{display:none}.contributors-card .VPTeamMembers>.container{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--item-gap)}.contributors-card .VPTeamMembers>.container>.item{width:var(--item-width);height:var(--item-height)}:root{--vp-c-sponsor: #fd1d7c;--vp-font-family-base: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--vp-font-family-mono: Menlo, Monaco, Consolas, monospace}:root{--vp-c-brand-1: hsl(36, 80%, 52%);--vp-c-brand-2: hsl(36, 90%, 62%);--vp-c-brand-3: hsl(36, 95%, 78%);--vp-c-brand-soft: hsla(36, 80%, 52%, .25);--vp-c-bg: hsl(0, 0%, 95%);--vp-c-bg-alt: hsl(0, 0%, 100%);--vp-c-bg-elv: hsl(0, 0%, 97%);--vp-c-bg-soft: hsl(0, 0%, 90%);--vp-nav-bg-color: var(--vp-c-bg);--vp-home-hero-name-color: var(--vp-c-brand);--vp-button-brand-bg: var(--vp-c-brand);--vp-custom-block-tip-bg: rgb(204 204 204 / 16%);--vp-c-divider: var(--vp-c-bg-soft)}:root.dark{--vp-c-bg: hsl(215, 17%, 18.5%);--vp-c-bg-alt: hsl(215, 17%, 16%);--vp-c-bg-elv: hsl(215, 17%, 24%);--vp-c-bg-soft: hsl(215, 17%, 16%);--docsearch-container-background: hsla(0,0%,40%,.3)}.VPNavBar:not(.has-sidebar):not(.top){border-bottom-color:transparent!important}.VPNavBar.top #local-search>button{background-color:var(--vp-c-bg-elv)}dt.defined-term{color:var(--vp-c-brand)!important;text-transform:uppercase}kbd{display:inline-block;padding:0 .6em;font-size:.85em;color:var(--vp-c-text-1);vertical-align:middle;background-color:var(--vp-c-bg-elv);border:solid 1px;border-radius:3px;box-shadow:0 1px #0003,0 0 0 2px var(--vp-c-bg-soft) inset;margin-right:.2em;transition:all .2s ease}kbd:active{background-color:var(--vp-c-bg-soft)}
+@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic.jIZ9REo5.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic-ext.8T9wMG5w.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek.Cb5wWeGA.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek-ext.9JiNzaSO.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin.bvIUbFQP.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin-ext.GZWE-KO4.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-vietnamese.paY3CzEB.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic.-nLMcIwj.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic-ext.OVycGSDq.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek.PSfer2Kc.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek-ext.hznxWNZO.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin.27E69YJn.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin-ext.RnFly65-.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-vietnamese.xzQHe1q1.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Chinese Quotes;src:local("PingFang SC Regular"),local("PingFang SC"),local("SimHei"),local("Source Han Sans SC");unicode-range:U+2018,U+2019,U+201C,U+201D}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Chinese Quotes", "Inter var", "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4'/%3E%3C/svg%3E")}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-green-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-green-1);--vp-code-line-diff-remove-color: var(--vp-c-red-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-red-1);--vp-code-line-warning-color: var(--vp-c-yellow-soft);--vp-code-line-error-color: var(--vp-c-red-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-brand-soft);--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-gray-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-brand-1);--vp-badge-tip-bg: var(--vp-c-brand-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);direction:ltr;font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{display:inline-block;margin:auto 2px -2px}mjx-container>svg{margin:auto}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-brand-1)}.custom-block.tip a:hover{color:var(--vp-c-brand-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin-bottom:4px;text-align:center;letter-spacing:1px;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge[data-v-8e5de7b5]{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.vp-doc h1>.VPBadge[data-v-8e5de7b5]{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge[data-v-8e5de7b5]{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge[data-v-8e5de7b5]{vertical-align:middle}.vp-doc h4>.VPBadge[data-v-8e5de7b5],.vp-doc h5>.VPBadge[data-v-8e5de7b5],.vp-doc h6>.VPBadge[data-v-8e5de7b5]{vertical-align:middle;line-height:18px}.VPBadge.info[data-v-8e5de7b5]{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip[data-v-8e5de7b5]{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning[data-v-8e5de7b5]{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger[data-v-8e5de7b5]{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-d91a541d]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-d91a541d],.VPBackdrop.fade-leave-to[data-v-d91a541d]{opacity:0}.VPBackdrop.fade-leave-active[data-v-d91a541d]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-d91a541d]{display:none}}.NotFound[data-v-cfc4d30e]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-cfc4d30e]{padding:96px 32px 168px}}.code[data-v-cfc4d30e]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-cfc4d30e]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-cfc4d30e]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-cfc4d30e]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-cfc4d30e]{padding-top:20px}.link[data-v-cfc4d30e]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-cfc4d30e]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-2e1d0d89]{position:relative;z-index:1}.nested[data-v-2e1d0d89]{padding-left:16px}.outline-link[data-v-2e1d0d89]{display:block;line-height:28px;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s;font-weight:400}.outline-link[data-v-2e1d0d89]:hover,.outline-link.active[data-v-2e1d0d89]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-2e1d0d89]{padding-left:13px}.VPDocAsideOutline[data-v-804edd04]{display:none}.VPDocAsideOutline.has-outline[data-v-804edd04]{display:block}.content[data-v-804edd04]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-804edd04]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-804edd04]{letter-spacing:.4px;line-height:28px;font-size:13px;font-weight:600}.VPDocAside[data-v-36271f2f]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-36271f2f]{flex-grow:1}.VPDocAside[data-v-36271f2f] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-36271f2f] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-36271f2f] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-16b61710]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-16b61710]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-a58c023b]{margin-top:64px}.edit-info[data-v-a58c023b]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-a58c023b]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-a58c023b]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-a58c023b]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-a58c023b]{margin-right:8px;width:14px;height:14px;fill:currentColor}.prev-next[data-v-a58c023b]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-a58c023b]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-a58c023b]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-a58c023b]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-a58c023b]{margin-left:auto;text-align:right}.desc[data-v-a58c023b]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-a58c023b]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDocOutlineDropdown[data-v-f870817c]{margin-bottom:48px}.VPDocOutlineDropdown button[data-v-f870817c]{display:block;font-size:14px;font-weight:500;line-height:24px;border:1px solid var(--vp-c-border);padding:4px 12px;color:var(--vp-c-text-2);background-color:var(--vp-c-default-soft);border-radius:8px;transition:color .5s}.VPDocOutlineDropdown button[data-v-f870817c]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPDocOutlineDropdown button.open[data-v-f870817c]{color:var(--vp-c-text-1)}.icon[data-v-f870817c]{display:inline-block;vertical-align:middle;width:16px;height:16px;fill:currentColor}[data-v-f870817c] .outline-link{font-size:14px;font-weight:400}.open>.icon[data-v-f870817c]{transform:rotate(90deg)}.items[data-v-f870817c]{margin-top:12px;border-left:1px solid var(--vp-c-divider)}.VPDoc[data-v-82d617ea]{padding:32px 24px 96px;width:100%}.VPDoc .VPDocOutlineDropdown[data-v-82d617ea]{display:none}@media (min-width: 960px) and (max-width: 1279px){.VPDoc .VPDocOutlineDropdown[data-v-82d617ea]{display:block}}@media (min-width: 768px){.VPDoc[data-v-82d617ea]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-82d617ea]{padding:32px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-82d617ea]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-82d617ea]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-82d617ea]{display:flex;justify-content:center}.VPDoc .aside[data-v-82d617ea]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-82d617ea]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-82d617ea]{max-width:1104px}}.container[data-v-82d617ea]{margin:0 auto;width:100%}.aside[data-v-82d617ea]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-82d617ea]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-82d617ea]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 32px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-82d617ea]::-webkit-scrollbar{display:none}.aside-curtain[data-v-82d617ea]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-82d617ea]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 32px));padding-bottom:32px}.content[data-v-82d617ea]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-82d617ea]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-82d617ea]{order:1;margin:0;min-width:640px}}.content-container[data-v-82d617ea]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-82d617ea]{max-width:688px}.external-link-icon-enabled :is(.vp-doc a[href*="://"][data-v-82d617ea],.vp-doc a[target=_blank][data-v-82d617ea]):after{content:"";color:currentColor}.VPButton[data-v-4a2eba7d]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-4a2eba7d]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-4a2eba7d]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-4a2eba7d]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-4a2eba7d]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-4a2eba7d]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-4a2eba7d]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-4a2eba7d]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-4a2eba7d]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-4a2eba7d]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-4a2eba7d]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-4a2eba7d]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-4a2eba7d]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-dd6296fd]{display:none}.dark .VPImage.light[data-v-dd6296fd]{display:none}.VPHero[data-v-ae913f1f]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-ae913f1f]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-ae913f1f]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-ae913f1f]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-ae913f1f]{flex-direction:row}}.main[data-v-ae913f1f]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-ae913f1f]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-ae913f1f]{text-align:left}}@media (min-width: 960px){.main[data-v-ae913f1f]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-ae913f1f]{max-width:592px}}.name[data-v-ae913f1f],.text[data-v-ae913f1f]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-ae913f1f],.VPHero.has-image .text[data-v-ae913f1f]{margin:0 auto}.name[data-v-ae913f1f]{color:var(--vp-home-hero-name-color)}.clip[data-v-ae913f1f]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-ae913f1f],.text[data-v-ae913f1f]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-ae913f1f],.text[data-v-ae913f1f]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-ae913f1f],.VPHero.has-image .text[data-v-ae913f1f]{margin:0}}.tagline[data-v-ae913f1f]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-ae913f1f]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-ae913f1f]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-ae913f1f]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-ae913f1f]{margin:0}}.actions[data-v-ae913f1f]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-ae913f1f]{justify-content:center}@media (min-width: 640px){.actions[data-v-ae913f1f]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-ae913f1f]{justify-content:flex-start}}.action[data-v-ae913f1f]{flex-shrink:0;padding:6px}.image[data-v-ae913f1f]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-ae913f1f]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-ae913f1f]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-ae913f1f]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-ae913f1f]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-ae913f1f]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-ae913f1f]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-ae913f1f]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-ae913f1f]{width:320px;height:320px}}[data-v-ae913f1f] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-ae913f1f] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-ae913f1f] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-0c85ab1e]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-0c85ab1e]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-0c85ab1e]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-0c85ab1e]>.VPImage{margin-bottom:20px}.icon[data-v-0c85ab1e]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-0c85ab1e]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-0c85ab1e]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-0c85ab1e]{padding-top:8px}.link-text-value[data-v-0c85ab1e]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-0c85ab1e]{display:inline-block;margin-left:6px;width:14px;height:14px;fill:currentColor}.VPFeatures[data-v-785260d0]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-785260d0]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-785260d0]{padding:0 64px}}.container[data-v-785260d0]{margin:0 auto;max-width:1152px}.items[data-v-785260d0]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-785260d0]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-785260d0],.item.grid-4[data-v-785260d0],.item.grid-6[data-v-785260d0]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-785260d0],.item.grid-4[data-v-785260d0]{width:50%}.item.grid-3[data-v-785260d0],.item.grid-6[data-v-785260d0]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-785260d0]{width:25%}}.VPHome[data-v-019b2e8b]{padding-bottom:96px}.VPHome[data-v-019b2e8b] .VPHomeSponsors{margin-top:112px;margin-bottom:-128px}@media (min-width: 768px){.VPHome[data-v-019b2e8b]{padding-bottom:128px}}.VPContent[data-v-25166022]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-25166022]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-25166022]{margin:0}@media (min-width: 960px){.VPContent[data-v-25166022]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-25166022]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-25166022]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-2167236e]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-2167236e]{display:none}.VPFooter[data-v-2167236e] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-2167236e] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-2167236e]{padding:32px}}.container[data-v-2167236e]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-2167236e],.copyright[data-v-2167236e]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-5eabed16]{padding:12px 20px 11px}.VPLocalNavOutlineDropdown button[data-v-5eabed16]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-5eabed16]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-5eabed16]{color:var(--vp-c-text-1)}.icon[data-v-5eabed16]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}[data-v-5eabed16] .outline-link{font-size:14px;padding:2px 0}.open>.icon[data-v-5eabed16]{transform:rotate(90deg)}.items[data-v-5eabed16]{position:absolute;top:64px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}.header[data-v-5eabed16]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-5eabed16]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-5eabed16]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-5eabed16]{transition:all .2s ease-out}.flyout-leave-active[data-v-5eabed16]{transition:all .15s ease-in}.flyout-enter-from[data-v-5eabed16],.flyout-leave-to[data-v-5eabed16]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-c59684ea]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--vp-c-gutter);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-c59684ea]{position:fixed}.VPLocalNav.reached-top[data-v-c59684ea]{border-top-color:transparent}@media (min-width: 960px){.VPLocalNav[data-v-c59684ea]{display:none}}.menu[data-v-c59684ea]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-c59684ea]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-c59684ea]{padding:0 32px}}.menu-icon[data-v-c59684ea]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPOutlineDropdown[data-v-c59684ea]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-c59684ea]{padding:12px 32px 11px}}.VPSwitch[data-v-ec2307f5]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-ec2307f5]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-ec2307f5]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-ec2307f5]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-ec2307f5] svg{position:absolute;top:3px;left:3px;width:12px;height:12px;fill:var(--vp-c-text-2)}.dark .icon[data-v-ec2307f5] svg{fill:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-fc143792]{opacity:1}.moon[data-v-fc143792],.dark .sun[data-v-fc143792]{opacity:0}.dark .moon[data-v-fc143792]{opacity:1}.dark .VPSwitchAppearance[data-v-fc143792] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-69a12f88]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-69a12f88]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-f3f1d0d6]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-f3f1d0d6]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-f3f1d0d6]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-f3f1d0d6]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-5f3ba920]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-5f3ba920]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-5f3ba920]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-5f3ba920]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-c11177e2]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-c11177e2] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-c11177e2] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-c11177e2] .group:last-child{padding-bottom:0}.VPMenu[data-v-c11177e2] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-c11177e2] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-c11177e2] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-c11177e2] .action{padding-left:24px}.VPFlyout[data-v-17a03ba2]{position:relative}.VPFlyout[data-v-17a03ba2]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-17a03ba2]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-17a03ba2]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-17a03ba2]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-17a03ba2]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-17a03ba2],.button[aria-expanded=true]+.menu[data-v-17a03ba2]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-17a03ba2]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-17a03ba2]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-17a03ba2]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-17a03ba2]{margin-right:0;width:16px;height:16px;fill:currentColor}.text-icon[data-v-17a03ba2]{margin-left:4px;width:14px;height:14px;fill:currentColor}.icon[data-v-17a03ba2]{width:20px;height:20px;fill:currentColor;transition:fill .25s}.menu[data-v-17a03ba2]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-b18e39b7]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-b18e39b7]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-b18e39b7]>svg{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-7aefb0ed]{display:flex;justify-content:center}.VPNavBarExtra[data-v-33ccd86e]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-33ccd86e]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-33ccd86e]{display:none}}.trans-title[data-v-33ccd86e]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-33ccd86e],.item.social-links[data-v-33ccd86e]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-33ccd86e]{min-width:176px}.appearance-action[data-v-33ccd86e]{margin-right:-2px}.social-links-list[data-v-33ccd86e]{margin:-4px -8px}.VPNavBarHamburger[data-v-aa14a2e0]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-aa14a2e0]{display:none}}.container[data-v-aa14a2e0]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-aa14a2e0]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-aa14a2e0]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-aa14a2e0]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-aa14a2e0]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-aa14a2e0]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-aa14a2e0]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-aa14a2e0],.VPNavBarHamburger.active:hover .middle[data-v-aa14a2e0],.VPNavBarHamburger.active:hover .bottom[data-v-aa14a2e0]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-aa14a2e0],.middle[data-v-aa14a2e0],.bottom[data-v-aa14a2e0]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-aa14a2e0]{top:0;left:0;transform:translate(0)}.middle[data-v-aa14a2e0]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-aa14a2e0]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-e0a0d8dd]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-e0a0d8dd],.VPNavBarMenuLink[data-v-e0a0d8dd]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-b64f523b]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-b64f523b]{display:flex}}/*! @docsearch/css 3.5.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-33543233]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-33543233]{display:flex;align-items:center}}.title[data-v-c5d320aa]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-c5d320aa]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-c5d320aa]{border-bottom-color:var(--vp-c-divider)}}[data-v-c5d320aa] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-264b4d47]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-264b4d47]{display:flex;align-items:center}}.title[data-v-264b4d47]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-b92ea2b7]{position:relative;border-bottom:1px solid transparent;padding:0 8px 0 24px;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap}@media (min-width: 768px){.VPNavBar[data-v-b92ea2b7]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar[data-v-b92ea2b7]{padding:0}.VPNavBar[data-v-b92ea2b7]:not(.has-sidebar):not(.top){border-bottom-color:var(--vp-c-gutter);background-color:var(--vp-nav-bg-color)}}.container[data-v-b92ea2b7]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-b92ea2b7],.container>.content[data-v-b92ea2b7]{pointer-events:none}.container[data-v-b92ea2b7] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-b92ea2b7]{max-width:100%}}.title[data-v-b92ea2b7]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-b92ea2b7]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-b92ea2b7]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-b92ea2b7]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-b92ea2b7]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-b92ea2b7]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-b92ea2b7]{display:flex;justify-content:flex-end;align-items:center;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.top) .content-body[data-v-b92ea2b7]{position:relative;background-color:var(--vp-nav-bg-color)}}@media (max-width: 767px){.content-body[data-v-b92ea2b7]{column-gap:.5rem}}.menu+.translations[data-v-b92ea2b7]:before,.menu+.appearance[data-v-b92ea2b7]:before,.menu+.social-links[data-v-b92ea2b7]:before,.translations+.appearance[data-v-b92ea2b7]:before,.appearance+.social-links[data-v-b92ea2b7]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-b92ea2b7]:before,.translations+.appearance[data-v-b92ea2b7]:before{margin-right:16px}.appearance+.social-links[data-v-b92ea2b7]:before{margin-left:16px}.social-links[data-v-b92ea2b7]{margin-right:-8px}@media (min-width: 960px){.VPNavBar.has-sidebar .curtain[data-v-b92ea2b7]{position:absolute;right:0;bottom:-31px;width:calc(100% - var(--vp-sidebar-width));height:32px}.VPNavBar.has-sidebar .curtain[data-v-b92ea2b7]:before{display:block;width:100%;height:32px;background:linear-gradient(var(--vp-c-bg),transparent 70%);content:""}}@media (min-width: 1440px){.VPNavBar.has-sidebar .curtain[data-v-b92ea2b7]{width:calc(100% - ((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width)))}}.VPNavScreenAppearance[data-v-651bd865]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-651bd865]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-f054d3ad]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-f054d3ad]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-5979f4e5]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-5979f4e5]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-0eb82c6c]{display:block}.title[data-v-0eb82c6c]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-5e140e0a]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-5e140e0a]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-5e140e0a]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-5e140e0a]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-5e140e0a]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-5e140e0a]{transform:rotate(45deg)}.button[data-v-5e140e0a]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-5e140e0a]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-5e140e0a]{width:14px;height:14px;fill:var(--vp-c-text-2);transition:fill .5s,transform .25s}.group[data-v-5e140e0a]:first-child{padding-top:0}.group+.group[data-v-5e140e0a],.group+.item[data-v-5e140e0a]{padding-top:4px}.VPNavScreenTranslations[data-v-dab85674]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-dab85674]{height:auto}.title[data-v-dab85674]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-dab85674]{width:16px;height:16px;fill:currentColor}.icon.lang[data-v-dab85674]{margin-right:8px}.icon.chevron[data-v-dab85674]{margin-left:4px}.list[data-v-dab85674]{padding:4px 0 0 24px}.link[data-v-dab85674]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-81f57899]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-81f57899],.VPNavScreen.fade-leave-active[data-v-81f57899]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-81f57899],.VPNavScreen.fade-leave-active .container[data-v-81f57899]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-81f57899],.VPNavScreen.fade-leave-to[data-v-81f57899]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-81f57899],.VPNavScreen.fade-leave-to .container[data-v-81f57899]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-81f57899]{display:none}}.container[data-v-81f57899]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-81f57899],.menu+.appearance[data-v-81f57899],.translations+.appearance[data-v-81f57899]{margin-top:24px}.menu+.social-links[data-v-81f57899]{margin-top:16px}.appearance+.social-links[data-v-81f57899]{margin-top:16px}.VPNav[data-v-7fde9db3]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-7fde9db3]{position:fixed}}.VPSidebarItem.level-0[data-v-5f199203]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-5f199203]{padding-bottom:10px}.item[data-v-5f199203]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-5f199203]{cursor:pointer}.indicator[data-v-5f199203]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-5f199203],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-5f199203],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-5f199203],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-5f199203]{background-color:var(--vp-c-brand-1)}.link[data-v-5f199203]{display:flex;align-items:center;flex-grow:1}.text[data-v-5f199203]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-5f199203]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-5f199203],.VPSidebarItem.level-2 .text[data-v-5f199203],.VPSidebarItem.level-3 .text[data-v-5f199203],.VPSidebarItem.level-4 .text[data-v-5f199203],.VPSidebarItem.level-5 .text[data-v-5f199203]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-5f199203],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-5f199203],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-5f199203],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-5f199203],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-5f199203],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-5f199203]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-5f199203],.VPSidebarItem.level-1.has-active>.item>.text[data-v-5f199203],.VPSidebarItem.level-2.has-active>.item>.text[data-v-5f199203],.VPSidebarItem.level-3.has-active>.item>.text[data-v-5f199203],.VPSidebarItem.level-4.has-active>.item>.text[data-v-5f199203],.VPSidebarItem.level-5.has-active>.item>.text[data-v-5f199203],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-5f199203],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-5f199203],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-5f199203],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-5f199203],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-5f199203],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-5f199203]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-5f199203],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-5f199203],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-5f199203],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-5f199203],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-5f199203],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-5f199203]{color:var(--vp-c-brand-1)}.caret[data-v-5f199203]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-5f199203]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-5f199203]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-5f199203]{width:18px;height:18px;fill:currentColor;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-5f199203]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-5f199203],.VPSidebarItem.level-2 .items[data-v-5f199203],.VPSidebarItem.level-3 .items[data-v-5f199203],.VPSidebarItem.level-4 .items[data-v-5f199203],.VPSidebarItem.level-5 .items[data-v-5f199203]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-5f199203]{display:none}.VPSidebar[data-v-ff32fb20]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-ff32fb20]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-ff32fb20]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-ff32fb20]{z-index:1;padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-ff32fb20]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-ff32fb20]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-ff32fb20]{outline:0}.group+.group[data-v-ff32fb20]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-ff32fb20]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-288d5425]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-288d5425]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-288d5425]{top:14px;left:16px}}.Layout[data-v-2457d3ed]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-b3d73fdf]{border-top:1px solid var(--vp-c-gutter);padding:88px 24px 96px;background-color:var(--vp-c-bg)}.container[data-v-b3d73fdf]{margin:0 auto;max-width:1152px}.love[data-v-b3d73fdf]{margin:0 auto;width:28px;height:28px;color:var(--vp-c-text-3)}.icon[data-v-b3d73fdf]{width:28px;height:28px;fill:currentColor}.message[data-v-b3d73fdf]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-b3d73fdf]{padding-top:32px}.action[data-v-b3d73fdf]{padding-top:40px;text-align:center}.VPTeamPage[data-v-2152923c]{padding-bottom:96px}@media (min-width: 768px){.VPTeamPage[data-v-2152923c]{padding-bottom:128px}}.VPTeamPageSection+.VPTeamPageSection[data-v-2152923c-s],.VPTeamMembers+.VPTeamPageSection[data-v-2152923c-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-2152923c-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-2152923c-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-2152923c-s],.VPTeamMembers+.VPTeamPageSection[data-v-2152923c-s]{margin-top:96px}}.VPTeamMembers[data-v-2152923c-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-2152923c-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-2152923c-s]{padding:0 64px}}.VPTeamPageTitle[data-v-4e1991bc]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-4e1991bc]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-4e1991bc]{padding:80px 64px 48px}}.title[data-v-4e1991bc]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-4e1991bc]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-4e1991bc]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-4e1991bc]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-88abd926]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-88abd926]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-88abd926]{padding:0 64px}}.title[data-v-88abd926]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-88abd926]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-88abd926]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-88abd926]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-88abd926]{padding-top:40px}.VPTeamMembersItem[data-v-0629ebc7]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-0629ebc7]{padding:32px}.VPTeamMembersItem.small .data[data-v-0629ebc7]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-0629ebc7]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-0629ebc7]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-0629ebc7]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-0629ebc7]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-0629ebc7]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-0629ebc7]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-0629ebc7]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-0629ebc7]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-0629ebc7]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-0629ebc7]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-0629ebc7]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-0629ebc7]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-0629ebc7]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-0629ebc7]{text-align:center}.avatar[data-v-0629ebc7]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-0629ebc7]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-0629ebc7]{margin:0;font-weight:600}.affiliation[data-v-0629ebc7]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-0629ebc7]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-0629ebc7]:hover{color:var(--vp-c-brand-1)}.desc[data-v-0629ebc7]{margin:0 auto}.desc[data-v-0629ebc7] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-0629ebc7]{display:flex;justify-content:center;height:56px}.sp-link[data-v-0629ebc7]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-0629ebc7]:hover,.sp .sp-link.link[data-v-0629ebc7]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-0629ebc7]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPTeamMembers.small .container[data-v-67d9d947]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-67d9d947]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-67d9d947]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-67d9d947]{max-width:876px}.VPTeamMembers.medium .container[data-v-67d9d947]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-67d9d947]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-67d9d947]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-67d9d947]{max-width:760px}.container[data-v-67d9d947]{display:grid;gap:24px;margin:0 auto;max-width:1152px}dd{margin-inline-start:1em;padding:0 0 .75em}dt.defined-term{font-weight:600;color:#8b9c16}.term{font-weight:400;color:#8b9c16}.term-not-found{color:#8b0000}.custom-layout[data-v-1ba96574]{padding:0 24px}@media (min-width: 640px){.custom-layout[data-v-1ba96574]{padding:0 48px}}@media (min-width: 960px){.custom-layout[data-v-1ba96574]{padding:0 64px}}.custom-container[data-v-1ba96574]{max-width:1152px;margin:2rem auto 0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:1rem}.contributors-card[data-v-2d63f958]{--item-height: 256px;--item-width: 180px;--item-gap: 0px;background-color:var(--vp-c-bg-soft);color:var(--vp-c-text-1);min-height:400px;border-radius:10px;padding:24px}.contributors-card h1[data-v-2d63f958]{font-size:1.75rem;font-weight:600}.hidden[data-v-2d63f958]{display:none}.toggleButton[data-v-2d63f958]{cursor:pointer}.icon-container[data-v-2d63f958]{display:inline-block;width:24px;height:24px;position:relative}.contributors[data-v-2d63f958]{max-height:calc(var(--item-height) * 2);overflow:hidden}#showMoreToggle:checked~.contributors[data-v-2d63f958]{max-height:none}#showMoreToggle:checked~.toggleButton .show[data-v-2d63f958],#showMoreToggle:not(:checked)~.toggleButton .hide[data-v-2d63f958]{display:none}.contributors-card .VPTeamMembers>.container{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--item-gap)}.contributors-card .VPTeamMembers>.container>.item{width:var(--item-width);height:var(--item-height)}:root{--vp-c-sponsor: #fd1d7c;--vp-font-family-base: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--vp-font-family-mono: Menlo, Monaco, Consolas, monospace}:root{--vp-c-brand-1: hsl(36, 80%, 52%);--vp-c-brand-2: hsl(36, 90%, 62%);--vp-c-brand-3: hsl(36, 95%, 78%);--vp-c-brand-soft: hsla(36, 80%, 52%, .25);--vp-c-bg: hsl(0, 0%, 95%);--vp-c-bg-alt: hsl(0, 0%, 100%);--vp-c-bg-elv: hsl(0, 0%, 97%);--vp-c-bg-soft: hsl(0, 0%, 90%);--vp-nav-bg-color: var(--vp-c-bg);--vp-home-hero-name-color: var(--vp-c-brand);--vp-button-brand-bg: var(--vp-c-brand);--vp-custom-block-tip-bg: rgb(204 204 204 / 16%);--vp-c-divider: var(--vp-c-bg-soft)}:root.dark{--vp-c-bg: hsl(215, 17%, 18.5%);--vp-c-bg-alt: hsl(215, 17%, 16%);--vp-c-bg-elv: hsl(215, 17%, 24%);--vp-c-bg-soft: hsl(215, 17%, 16%);--docsearch-container-background: hsla(0,0%,40%,.3)}.VPNavBar:not(.has-sidebar):not(.top){border-bottom-color:transparent!important}.VPNavBar.top #local-search>button{background-color:var(--vp-c-bg-elv)}dt.defined-term{color:var(--vp-c-brand)!important;text-transform:uppercase}kbd{display:inline-block;padding:0 .6em;font-size:.85em;color:var(--vp-c-text-1);vertical-align:middle;background-color:var(--vp-c-bg-elv);border:solid 1px;border-radius:3px;box-shadow:0 1px #0003,0 0 0 2px var(--vp-c-bg-soft) inset;margin-right:.2em;transition:all .2s ease}kbd:active{background-color:var(--vp-c-bg-soft)}
diff --git a/backers.html b/backers.html
index 2328721c..b567396f 100644
--- a/backers.html
+++ b/backers.html
@@ -6,13 +6,13 @@
     Backers | Sublime Text Community Documentation
     
     
-    
+    
     
     
     
     
     
-    
+    
     
     
     
@@ -26,8 +26,8 @@
     
   
   
-    
Skip to content

Backers

The following people have financially supported the writers of this guide through a fundraiser in July-August 2014.

Thanks a bunch to all of you!


Even though their contribution arrived after the campaign's end, we'd like to make a special mention of Sublime Hq for their generous donation.



  • angusyeh
  • subhaze
  • theuni
  • santbob
  • AlekSi
  • azhidkov
  • Ground-zero
  • tadkle
  • maique
  • nessthehero
  • David Ferguson
  • Andrew Pankov
  • jdlawrence
  • chapmandu
  • natebeaty
  • jonfetterdegges
  • Pavel
  • cbeltrangomez
  • AdamSF
  • namedtuple
  • Punchlinern
  • ukwiz
  • chitowntiger
  • Wickerwaka
  • Tomm0
  • greg
  • lenards
- +
Skip to content

Backers

The following people have financially supported the writers of this guide through a fundraiser in July-August 2014.

Thanks a bunch to all of you!


Even though their contribution arrived after the campaign's end, we'd like to make a special mention of Sublime Hq for their generous donation.



  • angusyeh
  • subhaze
  • theuni
  • santbob
  • AlekSi
  • azhidkov
  • Ground-zero
  • tadkle
  • maique
  • nessthehero
  • David Ferguson
  • Andrew Pankov
  • jdlawrence
  • chapmandu
  • natebeaty
  • jonfetterdegges
  • Pavel
  • cbeltrangomez
  • AdamSF
  • namedtuple
  • Punchlinern
  • ukwiz
  • chitowntiger
  • Wickerwaka
  • Tomm0
  • greg
  • lenards
+ \ No newline at end of file diff --git a/contributing.html b/contributing.html index 458988f7..cf608d26 100644 --- a/contributing.html +++ b/contributing.html @@ -6,13 +6,13 @@ Contributing | Sublime Text Community Documentation - + - + @@ -64,8 +64,8 @@

All paths MUST be written with forward slashes unless they are meant to be used in Windows.

File extensions (when referring to file types) MUST be written like this:

`.ext`
 

Shortcut Keys

All key bindings SHOULD be written using our custom Key component. The Key chord in the k property uses the same formatting as for Sublime Text keymaps. You MAY use command and option for macOS-specific bindings.

html
<Key k="ctrl+t" /> <!-- single-chord -->
 <Key k="ctrl+k, ctrl+k" /> <!-- multi-choord binding  -->
-<Key k="option+command+up" /> <!-- uses macOS-specific modifiers -->

Unless otherwise denoted, all key bindings MUST refer to the default for Windows.

Sublime Text-specific

  • Command captions in the command palette MUST be written as follows:

    md
    **Preferences: Settings - User**
  • Menu item captions (from the main menu by default) MUST be written as follows (notice the ):

    md
    *Preferences → Package Settings → ...*

Comments

The following comment 'keywords' may be used at the beginning of a comment to mark a section for review:

  • XXX
  • TODO

Examples:

md
<!-- TODO add some screenshots -->
- +<Key k="option+command+up" /> <!-- uses macOS-specific modifiers -->

Unless otherwise denoted, all key bindings MUST refer to the default for Windows.

Sublime Text-specific

  • Command captions in the command palette MUST be written as follows:

    md
    **Preferences: Settings - User**
  • Menu item captions (from the main menu by default) MUST be written as follows (notice the ):

    md
    *Preferences → Package Settings → ...*

Comments

The following comment 'keywords' may be used at the beginning of a comment to mark a section for review:

  • XXX
  • TODO

Examples:

md
<!-- TODO add some screenshots -->
+ \ No newline at end of file diff --git a/glossary.html b/glossary.html index 46ec3709..14f42f5b 100644 --- a/glossary.html +++ b/glossary.html @@ -6,13 +6,13 @@ Glossary | Sublime Text Community Documentation - + - + @@ -48,8 +48,8 @@
command
A command is an action to be executed and can be referenced in many resource files. It may accept JSON-serializable arguments and can be defined in user plugins.
Data directory
Core concept and storage for all of Sublime Text's resources. Refer to the introduction for details.
console
Internal Sublime Text console for debug messages and plugin output. Open via *View → Show Console*. -
- +
+ \ No newline at end of file diff --git a/guide/customization/color_schemes.html b/guide/customization/color_schemes.html index 333d10c3..df17ef6a 100644 --- a/guide/customization/color_schemes.html +++ b/guide/customization/color_schemes.html @@ -6,13 +6,13 @@ Color Schemes | Sublime Text Community Documentation - + - + @@ -26,8 +26,8 @@ -
Skip to content

Color Schemes

Sublime Text uses color schemes to highlight source code and to define the colors of some items in the editing area: background, foreground, gutter, caret, selection...

Color schemes are fully customizable.

Let's look at a Python file as Sublime Text highlights it using the default color scheme Monokai:

Selecting a Color Scheme

You can change the current color scheme by means of the Preferences → Color Scheme menu.

A common way of selecting a color scheme is by associating it to a type of file using file-type-specific settings. Select Preferences → Settings - Syntax Specific to open the corresponding settings file and set the color_scheme setting.

For more information about settings, see settings.

See Also

Official Documentation for Color Schemes : Complete reference on color scheme settings.

- +
Skip to content

Color Schemes

Sublime Text uses color schemes to highlight source code and to define the colors of some items in the editing area: background, foreground, gutter, caret, selection...

Color schemes are fully customizable.

Let's look at a Python file as Sublime Text highlights it using the default color scheme Monokai:

Selecting a Color Scheme

You can change the current color scheme by means of the Preferences → Color Scheme menu.

A common way of selecting a color scheme is by associating it to a type of file using file-type-specific settings. Select Preferences → Settings - Syntax Specific to open the corresponding settings file and set the color_scheme setting.

For more information about settings, see settings.

See Also

Official Documentation for Color Schemes : Complete reference on color scheme settings.

+ \ No newline at end of file diff --git a/guide/customization/key_bindings.html b/guide/customization/key_bindings.html index e96c4475..2b199159 100644 --- a/guide/customization/key_bindings.html +++ b/guide/customization/key_bindings.html @@ -6,13 +6,13 @@ Key Bindings | Sublime Text Community Documentation - + - + @@ -33,8 +33,8 @@ [ { "key": "has_next_field", "operator": "equal", "operand": true } ] -}

This key binding translates to clear snippet fields and resume normal editing if there is a next snippet field available. Thus, pressing Esc will only trigger this key binding if you are cycling through snippet fields.

The same key binding may be mapped to multiple contexts, so a single sequence of key presses may produce different results at different times.

Key Chords

You can create key bindings composed of multiple keys.

json
{ "keys": ["ctrl+k", "ctrl+v"], "command": "paste_from_history" }

Here, to trigger the command paste_from_history, you have to press Ctrl K first, then release K, and finally press V.

Note: This example is a default key binding, so you can try it out for yourself.

- +}

This key binding translates to clear snippet fields and resume normal editing if there is a next snippet field available. Thus, pressing Esc will only trigger this key binding if you are cycling through snippet fields.

The same key binding may be mapped to multiple contexts, so a single sequence of key presses may produce different results at different times.

Key Chords

You can create key bindings composed of multiple keys.

json
{ "keys": ["ctrl+k", "ctrl+v"], "command": "paste_from_history" }

Here, to trigger the command paste_from_history, you have to press Ctrl K first, then release K, and finally press V.

Note: This example is a default key binding, so you can try it out for yourself.

+ \ No newline at end of file diff --git a/guide/customization/menus.html b/guide/customization/menus.html index 614209f1..649625a9 100644 --- a/guide/customization/menus.html +++ b/guide/customization/menus.html @@ -6,13 +6,13 @@ Menus | Sublime Text Community Documentation - + - + @@ -51,8 +51,8 @@ { "command": "paste_from_history", "caption": "Paste from History" } ] } -]

Images

The default context menu in the editing area.

A modified context menu in the editing area.

Available Menus

The file name of a .sublime-menu file specifies the menu to be modified in the application.

The following menus are available:

File/Menu NameDescription
MainMain menu
ContextContext menu in the editing area
Find in FilesAppears when clicking the “…” button in the Find in Files panel.
Side BarContext menu for each node in the sidebar
Side Bar Mount PointAdditional context menu items for the top-level nodes in the sidebar
Tab ContextContext menu of the tab bar
Widget ContextContext menu of input fields in all kinds of widgets, including Command Palette, Goto Anything, the Find panels and panels opened by plugins

Additionally, the following four menus open when you click their respective section in the status bar:

Demonstration of a status bar menu.

When selected, a menu item can either invoke a command (with arguments), or open a submenu.

The available properties are:

In order to function properly, a menu item must provide at least:

When parsing a menu item, the following rules apply:

  1. A menu item with a submenu cannot invoke a command. If the separator caption is used, it will be rendered as a literal hyphen.

  2. If no caption is provided, a caption is inferred from the command's description method. If neither caption nor command are provided, the caption will be an empty string.

  3. The character used for the mnemonic must be contained in the item's caption. Mnemonics are case-sensitive.

  4. Menu that reference missing commands are disabled.

  5. Menu items can be hidden or disabled by their referenced command.

Separators

Separators are menu items with the caption - and no submenu. They are commonly used to group menu items with a similar purpose or that are otherwise related. Separators cannot invoke commands. The presence of a submenu causes the menu separator to be rendered as a regular item with a single hyphen as its caption.

Multiple consecutive separators are reduced to one, and separators at the beginning or the end of a menu are not displayed.

.sublime-menu files are loaded in the same order as packages. Menu files with the same name are concatenated, unless IDs are specified (see below).

Menu files in the same package are loaded in lexicographical order starting at the root folder, and then traversing sub-folders in the same manner.

As a special case, menu items from the User package declared in the standard non-ID section of a menu are always inserted after any standard items from other packages.

Item IDs

When a menu item specifies an ID, a separate section within the menu is searched for and, if it does not exist, created at the end of the menu. This ID lookup is forward-going only.

The ID determines the section's name, and the menu item with the matching ID will be the first item in this section. All following items in the file will then be appended to the ID's section, until another item with an ID is found.

If two menu items from different .sublime-menu files reference the same item via ID, Sublime Text will override the item's previous parameters with the new parameters, if there are any. Child elements extend the submenu. All following items are then appended to the ID's section, until another item with an ID is found.

It is common practice to assign IDs to separators and items having a submenu, so that other packages or the user themselves can easily customize the menu. This allows appending items to sections introduced by separators and appending items to submenus.

Note

Due to the strict forward lookup, it is possible to have multiple different items with the same ID in one menu. Because of the potential confusion this may cause, it is discouraged.

Example: The following three IDs are defined in a menu, in this order: test, test2, test.

The item with the second "test" ID can then be targeted using the following ID combinations: test, test2, test; test, test or test2, test.

Every menu item can have a submenu. Hovering the mouse pointer over a menu item with a submenu will reveal the items grouped under it. Submenus are independent menus with their own ID hierarchy.

In order to extend a submenu from a different menu file, an ID must be specified in both places to target the correct item.

The Main Menu

Unlike all other menus, the Main Menu's root menu represents the menu items in the menu bar (File, Help, etc.).

Interface for Commands

A menu item can be dynamically

For this, commands must implement the required methods in their class. Each implemented method will be called with the arguments specified in the corresponding menu item. If that call fails, the method will be immediately called again without arguments.

Some of these methods also have an influence on the Command Palette.

See Also

Official API Documentation on the Command interface

Context Menus in the Side Bar

The Side Bar and Side Bar Mount Point menus are different to the other menus in that they provide contextual information regarding the selected item(s). The selected directories and files are passed as a list to the specified command in a files argument.

- +]

Images

The default context menu in the editing area.

A modified context menu in the editing area.

Available Menus

The file name of a .sublime-menu file specifies the menu to be modified in the application.

The following menus are available:

File/Menu NameDescription
MainMain menu
ContextContext menu in the editing area
Find in FilesAppears when clicking the “…” button in the Find in Files panel.
Side BarContext menu for each node in the sidebar
Side Bar Mount PointAdditional context menu items for the top-level nodes in the sidebar
Tab ContextContext menu of the tab bar
Widget ContextContext menu of input fields in all kinds of widgets, including Command Palette, Goto Anything, the Find panels and panels opened by plugins

Additionally, the following four menus open when you click their respective section in the status bar:

Demonstration of a status bar menu.

When selected, a menu item can either invoke a command (with arguments), or open a submenu.

The available properties are:

In order to function properly, a menu item must provide at least:

When parsing a menu item, the following rules apply:

  1. A menu item with a submenu cannot invoke a command. If the separator caption is used, it will be rendered as a literal hyphen.

  2. If no caption is provided, a caption is inferred from the command's description method. If neither caption nor command are provided, the caption will be an empty string.

  3. The character used for the mnemonic must be contained in the item's caption. Mnemonics are case-sensitive.

  4. Menu that reference missing commands are disabled.

  5. Menu items can be hidden or disabled by their referenced command.

Separators

Separators are menu items with the caption - and no submenu. They are commonly used to group menu items with a similar purpose or that are otherwise related. Separators cannot invoke commands. The presence of a submenu causes the menu separator to be rendered as a regular item with a single hyphen as its caption.

Multiple consecutive separators are reduced to one, and separators at the beginning or the end of a menu are not displayed.

.sublime-menu files are loaded in the same order as packages. Menu files with the same name are concatenated, unless IDs are specified (see below).

Menu files in the same package are loaded in lexicographical order starting at the root folder, and then traversing sub-folders in the same manner.

As a special case, menu items from the User package declared in the standard non-ID section of a menu are always inserted after any standard items from other packages.

Item IDs

When a menu item specifies an ID, a separate section within the menu is searched for and, if it does not exist, created at the end of the menu. This ID lookup is forward-going only.

The ID determines the section's name, and the menu item with the matching ID will be the first item in this section. All following items in the file will then be appended to the ID's section, until another item with an ID is found.

If two menu items from different .sublime-menu files reference the same item via ID, Sublime Text will override the item's previous parameters with the new parameters, if there are any. Child elements extend the submenu. All following items are then appended to the ID's section, until another item with an ID is found.

It is common practice to assign IDs to separators and items having a submenu, so that other packages or the user themselves can easily customize the menu. This allows appending items to sections introduced by separators and appending items to submenus.

Note

Due to the strict forward lookup, it is possible to have multiple different items with the same ID in one menu. Because of the potential confusion this may cause, it is discouraged.

Example: The following three IDs are defined in a menu, in this order: test, test2, test.

The item with the second "test" ID can then be targeted using the following ID combinations: test, test2, test; test, test or test2, test.

Every menu item can have a submenu. Hovering the mouse pointer over a menu item with a submenu will reveal the items grouped under it. Submenus are independent menus with their own ID hierarchy.

In order to extend a submenu from a different menu file, an ID must be specified in both places to target the correct item.

The Main Menu

Unlike all other menus, the Main Menu's root menu represents the menu items in the menu bar (File, Help, etc.).

Interface for Commands

A menu item can be dynamically

For this, commands must implement the required methods in their class. Each implemented method will be called with the arguments specified in the corresponding menu item. If that call fails, the method will be immediately called again without arguments.

Some of these methods also have an influence on the Command Palette.

See Also

Official API Documentation on the Command interface

Context Menus in the Side Bar

The Side Bar and Side Bar Mount Point menus are different to the other menus in that they provide contextual information regarding the selected item(s). The selected directories and files are passed as a list to the specified command in a files argument.

+ \ No newline at end of file diff --git a/guide/customization/settings.html b/guide/customization/settings.html index 70bae9fc..186090d5 100644 --- a/guide/customization/settings.html +++ b/guide/customization/settings.html @@ -6,13 +6,13 @@ Settings | Sublime Text Community Documentation - + - + @@ -26,8 +26,8 @@ -
Skip to content

Settings

Sublime Text stores configuration data in .sublime-settings files. Flexibility comes at the price of a slightly complex system for applying settings. However, here's a rule of thumb:

Always place your personal settings files under Packages/User to guarantee they will take precedence over any other conflicting settings files.

With that out of the way, let's unveil, to please masochistic readers, the mysteries of how settings work.

Format

Settings files use JSON and have the .sublime-settings extension.

Types of Settings

The name of each .sublime-settings file determines its purpose. Names can be descriptive (like Preferences (Windows).sublime-settings or Minimap.sublime-settings), or they can be related to what the settings file is controlling. For example, file type settings need to carry the name of the .tmLanguage syntax definition for the file type. Thus, for the .py file type, whose syntax definition is contained in Python.tmLanguage, the corresponding settings files would be called Python.sublime-settings.

Also, some settings files only apply to specific platforms. This can be inferred from the file names, e.g. Preferences ({platform}).sublime-settings. Valid names for platform are Windows, Linux, OSX.

This is important: Platform-specific settings files in the Packages/User folder are ignored. This way, you can be sure a single settings file overrides all the others.

Settings changes are usually updated in real time, but you may have to restart Sublime Text in order to load new settings files.

How to Access and Edit Common Settings Files

Unless you need very fine-grained control over settings, you can access the main configuration files through the Preferences | Settings - User and Preferences | Settings - More menu items. Editing Preferences | Settings - Default is discouraged, because changes will be reverted with every update to the software. However, you can use that file for reference: it contains comments explaining the purpose of all available global and file type settings.

Order of Precedence of .sublime-settings Files

The same settings file (such as Python.sublime-settings) can appear in multiple places. All settings defined in identically named files will be merged together and overwritten according to predefined rules. See merging-and-order-of-precedence for more information.

Let us remember again that any given settings file in Packages/User ultimately overrides every other settings file of the same name.

In addition to settings files, Sublime Text maintains session data, which is configuration for the particular set of files being currently edited. Session data is updated as you work on files, so if you adjust settings for a particular file in any way (mainly through API calls), they will be recorded in the session and will take precedence over any applicable .sublime-settings files.

To check the value of a setting for a particular file being edited, use view.settings().get("setting_name") from the console.

Finally, it's also worth noting that some settings may be automatically adjusted for you. Keep this in mind if you're puzzled about some setting's value. For instance, this is the case for certain whitespace-related settings and the syntax setting.

Below, you can see the order in which Sublime Text would process a hypothetical hierarchy of settings for Python files on Windows:

  • Packages/Default/Preferences.sublime-settings
  • Packages/Default/Preferences (Windows).sublime-settings
  • Packages/User/Preferences.sublime-settings
  • Packages/Python/Python.sublime-settings
  • Packages/User/Python.sublime-settings
  • Session data for the current file
  • Auto adjusted settings

This list is not exhaustive. See The Settings Hierarchy for a full example of the order of precedence.

Global Editor Settings and Global File Settings

These settings are stored in Preferences.sublime-settings and Preferences ({platform}).sublime-settings files. The defaults can be found in Packages/Default.

Valid names for platform are Windows, Linux, OSX.

File Type Settings

If you want to target a specific file type, name the .sublime-settings file after the file type's syntax definition. For example, if our syntax definition +was called Python.tmLanguage, we'd need to call our settings file Python.sublime-settings.

Settings files for specific file types usually live in packages, like +Packages/Python, but there can be multiple settings files in separate locations for the same file type.

Similarly to global settings, one can establish platform-specific settings for file types. For example, Python (Linux).sublime-settings would only be consulted under Linux.

Also, let us emphasize that under Packages/User only Python.sublime-settings would be read, but not any Python ({platform}).sublime-settings variant.

Regardless of its location, any file-type-specific settings file has precedence over a global settings file affecting file types.

The Settings Hierarchy

Below, you can see the exhaustive settings sources that Sublime Text would process for Python files on Windows. As always, later specifications override earlier ones.

  • Global settings
    • Packages/Default/Preferences.sublime-settings
    • Packages/Default/Preferences (Windows).sublime-settings
    • Packages/AnyOtherPackage/Preferences.sublime-settings
    • Packages/AnyOtherPackage/Preferences (Windows).sublime-settings
    • Packages/User/Preferences.sublime-settings
  • Settings from the current project
  • Syntax-specific settings
    • Packages/Python/Python.sublime-settings
    • Packages/Python/Python (Windows).sublime-settings
    • Packages/User/Python.sublime-settings
  • Session data for the current file (View-specific settings)
  • Auto-adjusted settings

Note that settings files may also appear in package subdirectories, which have been excluded for brevity.

Where to Store User Settings (Once Again)

Whenever you want to save settings, especially if they should be preserved between software updates, place the corresponding .sublime-settings file in Packages/User.

- +
Skip to content

Settings

Sublime Text stores configuration data in .sublime-settings files. Flexibility comes at the price of a slightly complex system for applying settings. However, here's a rule of thumb:

Always place your personal settings files under Packages/User to guarantee they will take precedence over any other conflicting settings files.

With that out of the way, let's unveil, to please masochistic readers, the mysteries of how settings work.

Format

Settings files use JSON and have the .sublime-settings extension.

Types of Settings

The name of each .sublime-settings file determines its purpose. Names can be descriptive (like Preferences (Windows).sublime-settings or Minimap.sublime-settings), or they can be related to what the settings file is controlling. For example, file type settings need to carry the name of the .tmLanguage syntax definition for the file type. Thus, for the .py file type, whose syntax definition is contained in Python.tmLanguage, the corresponding settings files would be called Python.sublime-settings.

Also, some settings files only apply to specific platforms. This can be inferred from the file names, e.g. Preferences ({platform}).sublime-settings. Valid names for platform are Windows, Linux, OSX.

This is important: Platform-specific settings files in the Packages/User folder are ignored. This way, you can be sure a single settings file overrides all the others.

Settings changes are usually updated in real time, but you may have to restart Sublime Text in order to load new settings files.

How to Access and Edit Common Settings Files

Unless you need very fine-grained control over settings, you can access the main configuration files through the Preferences | Settings - User and Preferences | Settings - More menu items. Editing Preferences | Settings - Default is discouraged, because changes will be reverted with every update to the software. However, you can use that file for reference: it contains comments explaining the purpose of all available global and file type settings.

Order of Precedence of .sublime-settings Files

The same settings file (such as Python.sublime-settings) can appear in multiple places. All settings defined in identically named files will be merged together and overwritten according to predefined rules. See merging-and-order-of-precedence for more information.

Let us remember again that any given settings file in Packages/User ultimately overrides every other settings file of the same name.

In addition to settings files, Sublime Text maintains session data, which is configuration for the particular set of files being currently edited. Session data is updated as you work on files, so if you adjust settings for a particular file in any way (mainly through API calls), they will be recorded in the session and will take precedence over any applicable .sublime-settings files.

To check the value of a setting for a particular file being edited, use view.settings().get("setting_name") from the console.

Finally, it's also worth noting that some settings may be automatically adjusted for you. Keep this in mind if you're puzzled about some setting's value. For instance, this is the case for certain whitespace-related settings and the syntax setting.

Below, you can see the order in which Sublime Text would process a hypothetical hierarchy of settings for Python files on Windows:

  • Packages/Default/Preferences.sublime-settings
  • Packages/Default/Preferences (Windows).sublime-settings
  • Packages/User/Preferences.sublime-settings
  • Packages/Python/Python.sublime-settings
  • Packages/User/Python.sublime-settings
  • Session data for the current file
  • Auto adjusted settings

This list is not exhaustive. See The Settings Hierarchy for a full example of the order of precedence.

Global Editor Settings and Global File Settings

These settings are stored in Preferences.sublime-settings and Preferences ({platform}).sublime-settings files. The defaults can be found in Packages/Default.

Valid names for platform are Windows, Linux, OSX.

File Type Settings

If you want to target a specific file type, name the .sublime-settings file after the file type's syntax definition. For example, if our syntax definition +was called Python.tmLanguage, we'd need to call our settings file Python.sublime-settings.

Settings files for specific file types usually live in packages, like +Packages/Python, but there can be multiple settings files in separate locations for the same file type.

Similarly to global settings, one can establish platform-specific settings for file types. For example, Python (Linux).sublime-settings would only be consulted under Linux.

Also, let us emphasize that under Packages/User only Python.sublime-settings would be read, but not any Python ({platform}).sublime-settings variant.

Regardless of its location, any file-type-specific settings file has precedence over a global settings file affecting file types.

The Settings Hierarchy

Below, you can see the exhaustive settings sources that Sublime Text would process for Python files on Windows. As always, later specifications override earlier ones.

  • Global settings
    • Packages/Default/Preferences.sublime-settings
    • Packages/Default/Preferences (Windows).sublime-settings
    • Packages/AnyOtherPackage/Preferences.sublime-settings
    • Packages/AnyOtherPackage/Preferences (Windows).sublime-settings
    • Packages/User/Preferences.sublime-settings
  • Settings from the current project
  • Syntax-specific settings
    • Packages/Python/Python.sublime-settings
    • Packages/Python/Python (Windows).sublime-settings
    • Packages/User/Python.sublime-settings
  • Session data for the current file (View-specific settings)
  • Auto-adjusted settings

Note that settings files may also appear in package subdirectories, which have been excluded for brevity.

Where to Store User Settings (Once Again)

Whenever you want to save settings, especially if they should be preserved between software updates, place the corresponding .sublime-settings file in Packages/User.

+ \ No newline at end of file diff --git a/guide/extensibility/command_palette.html b/guide/extensibility/command_palette.html index 3cc4b37e..e04742d5 100644 --- a/guide/extensibility/command_palette.html +++ b/guide/extensibility/command_palette.html @@ -6,13 +6,13 @@ Command Palette | Sublime Text Community Documentation - + - + @@ -36,8 +36,8 @@ { "caption": "Preferences: Default Global Settings", "command": "open_file", "args": {"file": "${packages}/Default/Global.sublime-settings"} }, { "caption": "Preferences: User Global Settings", "command": "open_file", "args": {"file": "${packages}/User/Global.sublime-settings"} }, { "caption": "Preferences: Browse Packages", "command": "open_dir", "args": {"dir": "$packages"} } -]

caption : Text for display in the command palette.

command : Command to be executed.

args : Arguments to pass to command.

How to Use the Command Palette

  1. Press Ctrl  P
  2. Select command

The command palette filters entries by context. This means that whenever you open it, you won't always see all the commands defined in every .sublime-commands file.

- +]

caption : Text for display in the command palette.

command : Command to be executed.

args : Arguments to pass to command.

How to Use the Command Palette

  1. Press Ctrl  P
  2. Select command

The command palette filters entries by context. This means that whenever you open it, you won't always see all the commands defined in every .sublime-commands file.

+ \ No newline at end of file diff --git a/guide/extensibility/commands.html b/guide/extensibility/commands.html index 81a0df13..32970230 100644 --- a/guide/extensibility/commands.html +++ b/guide/extensibility/commands.html @@ -6,13 +6,13 @@ Commands | Sublime Text Community Documentation - + - + @@ -30,8 +30,8 @@ view.run_command('insert_snippet', {"contents": "<$SELECTION>"}) view.window().run_command("prompt_select_project")

From command line (CLI)

Commands may be passed to Sublime Text directly from the command line of the operating system. Usage:

bash
subl --command 'show_overlay {"overlay": "command_palette", "text": "hello"}'
 # on Windows:
-sublime-text.exe --command "show_overlay {\"overlay\": \"command_palette\", \"text\": \"hello\"}"

See Also

Reference for commands

- +sublime-text.exe --command "show_overlay {\"overlay\": \"command_palette\", \"text\": \"hello\"}"

See Also

Reference for commands

+ \ No newline at end of file diff --git a/guide/extensibility/completions.html b/guide/extensibility/completions.html index 0e599e10..f4afcb02 100644 --- a/guide/extensibility/completions.html +++ b/guide/extensibility/completions.html @@ -6,13 +6,13 @@ Completions | Sublime Text Community Documentation - + - + @@ -32,8 +32,8 @@

Not working example:

l|
 some text with la|
 l| andl|
-

Selections are essentially ignored, only the position of the cursor matters. Thus, e|[-some selection] example, with | as the cursor and [...] as the current selection, completes to example|[-some selection] example.

-Completed Completions

If you want to be able to tab-complete completions, the setting tab_completion must be set to true (default). Snippet tab-completion is unaffected by this setting: They will always be completed according to their tab trigger.

With tab_completion enabled, completion of items is always automatic. This means, unlike the case of the completions list, that Sublime Text will always make the decision for you. The rules for selecting the best completion are the same as described above, but in case of ambiguity, Sublime Text will insert the item it deems most suitable. You can press the key multiple times to walk through other available options.

Inserting a Literal tab Character

When tab_completion is enabled, you can press   to insert a literal tab character.

Sources for Completions and their Priorities

These are the sources for completions the user can control, in the order they are prioritized:

  1. Snippets
  2. API-injected completions via on_query_completions
  3. Completions files

Additionally, the following completions are folded into the final list:

  1. Words in the buffer

Snippets will always win when the current prefix matches their tab trigger exactly. For the rest of the completion sources, a fuzzy match is performed. Furthermore, snippets always lose in a fuzzy match.

When a list of completions is shown, snippets will still be listed alongside the other items, even if the prefix only partially matches the snippets' tab triggers.

Note

Completions sourced from words in the buffer can be suppressed explicitly from an on_query_completions event hook.

Auto Completion Triggers and Selector

Sublime Text provides two settings for users and package authors to tweak their auto completion behavior. Both settings work independently of each other and either of them can trigger the auto-completion popup.

Package authors may be interested in configuring triggers and/or the selector in a syntax-specific settings file.

- +

Selections are essentially ignored, only the position of the cursor matters. Thus, e|[-some selection] example, with | as the cursor and [...] as the current selection, completes to example|[-some selection] example.

-Completed Completions

If you want to be able to tab-complete completions, the setting tab_completion must be set to true (default). Snippet tab-completion is unaffected by this setting: They will always be completed according to their tab trigger.

With tab_completion enabled, completion of items is always automatic. This means, unlike the case of the completions list, that Sublime Text will always make the decision for you. The rules for selecting the best completion are the same as described above, but in case of ambiguity, Sublime Text will insert the item it deems most suitable. You can press the key multiple times to walk through other available options.

Inserting a Literal tab Character

When tab_completion is enabled, you can press   to insert a literal tab character.

Sources for Completions and their Priorities

These are the sources for completions the user can control, in the order they are prioritized:

  1. Snippets
  2. API-injected completions via on_query_completions
  3. Completions files

Additionally, the following completions are folded into the final list:

  1. Words in the buffer

Snippets will always win when the current prefix matches their tab trigger exactly. For the rest of the completion sources, a fuzzy match is performed. Furthermore, snippets always lose in a fuzzy match.

When a list of completions is shown, snippets will still be listed alongside the other items, even if the prefix only partially matches the snippets' tab triggers.

Note

Completions sourced from words in the buffer can be suppressed explicitly from an on_query_completions event hook.

Auto Completion Triggers and Selector

Sublime Text provides two settings for users and package authors to tweak their auto completion behavior. Both settings work independently of each other and either of them can trigger the auto-completion popup.

Package authors may be interested in configuring triggers and/or the selector in a syntax-specific settings file.

+ \ No newline at end of file diff --git a/guide/extensibility/macros.html b/guide/extensibility/macros.html index 0ef29b35..41e88ed8 100644 --- a/guide/extensibility/macros.html +++ b/guide/extensibility/macros.html @@ -6,13 +6,13 @@ Macros | Sublime Text Community Documentation - + - + @@ -35,8 +35,8 @@ "args": { "file": "res://Packages/User/Example.sublime-macro" } -} - +} + \ No newline at end of file diff --git a/guide/extensibility/packages.html b/guide/extensibility/packages.html index 5e5f9325..9749ced3 100644 --- a/guide/extensibility/packages.html +++ b/guide/extensibility/packages.html @@ -6,13 +6,13 @@ Packages | Sublime Text Community Documentation - + - + @@ -26,8 +26,8 @@ -
Skip to content

Packages

A package is a container for resources.

Package Locations (and Abbreviations)

There are three locations for storing packages for different purposes.

  • Packages can be folders under Data/Packages (short: Packages)

  • or zip archives with the .sublime-package extension located under Data/Installed Packages (short: Installed Packages) or any of its subdirectories.

  • Additionally, Sublime Text provides a set of default packages as zip archives in Application/Packages (short: Shipped Packages), where Application refers to the folder where the Sublime Text executable resides.

    This folder is not intended to be modified by the user.

Note

For simplicity, we will occasionally refer to all these directories simply as Packages, and to a package in any folder (.sublime-package or not) as Packages/PackageName. Consequently, a file inside a package may also be referred to as PackageName/a_file.extension.

.sublime-package Packages

Packages distributed as .sublime-package zip archives should be considered read-only containers of resources and never be modified manually. Since they are usually updated as a whole, any manual changes made to them will be lost in the process.

If you do want to modify files in these archives, see overriding-packages.

Interactions Between Packages with the Same Name

If two packages with the same name exist in both Installed Packages and Shipped Packages, the one in Installed Packages will be used and the one in Shipped Packages will be ignored.

Any file in Packages/PackageName takes precedence over an identically named file in Installed Packages/PackageName.sublime-package or Shipped Packages/PackageName.sublime-package.

See also overriding-packages.

Package Contents

Typical resources found in packages include:

  • build systems (.sublime-build)
  • color schemes (.sublime-color-scheme, .tmTheme)
  • key maps (.sublime-keymap)
  • macros (.sublime-macro)
  • menus (.sublime-menu)
  • metadata (.tmPreferences)
  • mouse maps (.sublime-mousemap)
  • plugins (.py)
  • settings (.sublime-settings)
  • snippets (.sublime-snippet)
  • syntax definitions (.sublime-syntax, .tmLanguage)
  • themes (.sublime-theme)

Some packages may hold support files for other packages or for core features. For example, the spell checker uses Installed Packages/Language - English.sublime-package as a data store for English dictionaries.

Package Types

In this guide, we categorize packages for clarity when discussing this topic, but Sublime Text doesn't use this terminology and you don't need to learn it.

shipped packages or default packages : A set of packages that Sublime Text ships with. Some of these packages are core packages, while others enhance Sublime Text to support common programming languages out of the box.

Examples: Default, Python, Java, C++, Markdown.

Located in Shipped Packages.

core packages : Sublime Text requires these packages in order to function properly.

Complete list: Default, Theme - Default, Color Scheme - Default, Text, Language - English.

They are part of the shipped packages and located in Shipped Packages.

user packages : Installed or created by the user to extend Sublime Text's functionality. They are not part of Sublime Text, and are always contributed by users or third parties.

Example: User.

Located in Packages and Installed Packages.

installed packages : A subtype of user packages.

Installed packages are .sublime-package archives and usually maintained by a package manager.

Located in Installed Packages.

Note

Due to the unfortunate name of this folder, talking about installing packages in Sublime Text is confusing.

Sometimes, in this guide, by installing we mean "adding a user/third party package to Sublime Text" (in any form), and sometimes we use the term in its stricter sense of "copying a .sublime-package archive to Installed Packages".

override packages : A special type of user packages.

Override packages serve the purpose of customizing packages that are distributed as .sublime-package files. They are effectively injected into the original package and do not stand-alone.

See Customizing or Overriding Packages for details.

Located in Packages.

Note that by third party we also refer to users of other editors, notably Textmate, as Sublime Text and Textmate share some types of resource files that can be reused without modification.

Managing Packages

Installing Packages

Note

Regular users rarely need to know how to install packages by hand, as automatic package managers are available.

The de facto package manager for Sublime Text is Package Control.

Packages can be installed in two main ways:

  • by copying Sublime Text resources to a folder under Packages, or
  • by copying a .sublime-package file to Installed Packages.

Disabling Packages

To temporarily disable packages, you can add them to the ignored_packages list in your Packages/User/Preferences.sublime-settings file. Packages will be loaded or unloaded as needed when the settings file is saved.

Enabling Packages

To re-enable a package, remove the package's name from the ignored_packages list in your Packages/User/Preferences.sublime-settings file.

Removing Packages

If you installed a package with a package manager, remove it using the method provided by the package manager.

If you installed a package manually, follow this procedure to safely remove a package:

  1. Disable the package while Sublime Text is running.
  2. Close Sublime Text.
  3. Remove the package's resources from the disk.
  4. Remove the package's name from the ignored_packages list.

In addition to the resources you have placed initially in a Packages folder or in Installed Packages, plugins may create configuration files (such as .sublime-settings files) or other files to store package-related data. Frequently, you will find them in the User package. Therefore, if you want to remove all traces of a package, you will need to find and remove all the additional files that it may have installed.

WARNING

Shipped packages are reinstated during every Sublime Text update, so you can't delete them forever. If you want to stop using a shipped package, disable it.

Customizing or Overriding Packages

Since packages in .sublime-package zip archives are read-only, you cannot modify them directly. However, Sublime Text allows you to create an :override_package: that will effectively inject files into the original archive without modifying the archive itself.

To create an override package, create a new folder under Packages and name it after the .sublime-package file you want to override, excluding the extension. Any file you create in this package will take precedence over any identically named file in the original package.

Python plugins in override packages are able to use relative imports for accessing other modules in the corresponding .sublime-package file as if they were part of it.

WARNING

Files in override packages override entire files. If the overridden file in the corresponding .sublime-package is updated, you will not be notified.

The OverrideAudit package provides monitoring of override files and will notify you when the file it overrides has been updated.

Merging and Order of Precedence

Package precedence is important for merging certain resources, for example, .sublime-keymap and .sublime-settings files, and for loading plugins (.py files).

If an :override_package: exists for a .sublime-package package, it will be loaded at the same time as the .sublime-package archive.

Sublime Text loads packages in this order:

  1. Packages/Default;
  2. :shipped_package:shipped_packages: in lexicographical order;
  3. :installed_package:installed_packages: in lexicographical order;
  4. all remaining :user_package:user_packages:, except for Packages/User, that did not override anything, in lexicographical order;
  5. Packages/User

Reverting Sublime Text to Its Default Configuration

Reverting Sublime Text to a fresh state solves many problems that appear to be bugs in Sublime Text but are in fact caused by misbehaving packages and plugins.

To revert Sublime Text to its default configuration and remove all your settings and configurations, delete the Data directory and restart the editor. Keep in mind that the Installed Packages folder will be deleted too, so you'll lose all your installed packages.

Always make sure to back up your data before taking an extreme measure like this one!

- +
Skip to content

Packages

A package is a container for resources.

Package Locations (and Abbreviations)

There are three locations for storing packages for different purposes.

  • Packages can be folders under Data/Packages (short: Packages)

  • or zip archives with the .sublime-package extension located under Data/Installed Packages (short: Installed Packages) or any of its subdirectories.

  • Additionally, Sublime Text provides a set of default packages as zip archives in Application/Packages (short: Shipped Packages), where Application refers to the folder where the Sublime Text executable resides.

    This folder is not intended to be modified by the user.

Note

For simplicity, we will occasionally refer to all these directories simply as Packages, and to a package in any folder (.sublime-package or not) as Packages/PackageName. Consequently, a file inside a package may also be referred to as PackageName/a_file.extension.

.sublime-package Packages

Packages distributed as .sublime-package zip archives should be considered read-only containers of resources and never be modified manually. Since they are usually updated as a whole, any manual changes made to them will be lost in the process.

If you do want to modify files in these archives, see overriding-packages.

Interactions Between Packages with the Same Name

If two packages with the same name exist in both Installed Packages and Shipped Packages, the one in Installed Packages will be used and the one in Shipped Packages will be ignored.

Any file in Packages/PackageName takes precedence over an identically named file in Installed Packages/PackageName.sublime-package or Shipped Packages/PackageName.sublime-package.

See also overriding-packages.

Package Contents

Typical resources found in packages include:

  • build systems (.sublime-build)
  • color schemes (.sublime-color-scheme, .tmTheme)
  • key maps (.sublime-keymap)
  • macros (.sublime-macro)
  • menus (.sublime-menu)
  • metadata (.tmPreferences)
  • mouse maps (.sublime-mousemap)
  • plugins (.py)
  • settings (.sublime-settings)
  • snippets (.sublime-snippet)
  • syntax definitions (.sublime-syntax, .tmLanguage)
  • themes (.sublime-theme)

Some packages may hold support files for other packages or for core features. For example, the spell checker uses Installed Packages/Language - English.sublime-package as a data store for English dictionaries.

Package Types

In this guide, we categorize packages for clarity when discussing this topic, but Sublime Text doesn't use this terminology and you don't need to learn it.

shipped packages or default packages : A set of packages that Sublime Text ships with. Some of these packages are core packages, while others enhance Sublime Text to support common programming languages out of the box.

Examples: Default, Python, Java, C++, Markdown.

Located in Shipped Packages.

core packages : Sublime Text requires these packages in order to function properly.

Complete list: Default, Theme - Default, Color Scheme - Default, Text, Language - English.

They are part of the shipped packages and located in Shipped Packages.

user packages : Installed or created by the user to extend Sublime Text's functionality. They are not part of Sublime Text, and are always contributed by users or third parties.

Example: User.

Located in Packages and Installed Packages.

installed packages : A subtype of user packages.

Installed packages are .sublime-package archives and usually maintained by a package manager.

Located in Installed Packages.

Note

Due to the unfortunate name of this folder, talking about installing packages in Sublime Text is confusing.

Sometimes, in this guide, by installing we mean "adding a user/third party package to Sublime Text" (in any form), and sometimes we use the term in its stricter sense of "copying a .sublime-package archive to Installed Packages".

override packages : A special type of user packages.

Override packages serve the purpose of customizing packages that are distributed as .sublime-package files. They are effectively injected into the original package and do not stand-alone.

See Customizing or Overriding Packages for details.

Located in Packages.

Note that by third party we also refer to users of other editors, notably Textmate, as Sublime Text and Textmate share some types of resource files that can be reused without modification.

Managing Packages

Installing Packages

Note

Regular users rarely need to know how to install packages by hand, as automatic package managers are available.

The de facto package manager for Sublime Text is Package Control.

Packages can be installed in two main ways:

  • by copying Sublime Text resources to a folder under Packages, or
  • by copying a .sublime-package file to Installed Packages.

Disabling Packages

To temporarily disable packages, you can add them to the ignored_packages list in your Packages/User/Preferences.sublime-settings file. Packages will be loaded or unloaded as needed when the settings file is saved.

Enabling Packages

To re-enable a package, remove the package's name from the ignored_packages list in your Packages/User/Preferences.sublime-settings file.

Removing Packages

If you installed a package with a package manager, remove it using the method provided by the package manager.

If you installed a package manually, follow this procedure to safely remove a package:

  1. Disable the package while Sublime Text is running.
  2. Close Sublime Text.
  3. Remove the package's resources from the disk.
  4. Remove the package's name from the ignored_packages list.

In addition to the resources you have placed initially in a Packages folder or in Installed Packages, plugins may create configuration files (such as .sublime-settings files) or other files to store package-related data. Frequently, you will find them in the User package. Therefore, if you want to remove all traces of a package, you will need to find and remove all the additional files that it may have installed.

WARNING

Shipped packages are reinstated during every Sublime Text update, so you can't delete them forever. If you want to stop using a shipped package, disable it.

Customizing or Overriding Packages

Since packages in .sublime-package zip archives are read-only, you cannot modify them directly. However, Sublime Text allows you to create an :override_package: that will effectively inject files into the original archive without modifying the archive itself.

To create an override package, create a new folder under Packages and name it after the .sublime-package file you want to override, excluding the extension. Any file you create in this package will take precedence over any identically named file in the original package.

Python plugins in override packages are able to use relative imports for accessing other modules in the corresponding .sublime-package file as if they were part of it.

WARNING

Files in override packages override entire files. If the overridden file in the corresponding .sublime-package is updated, you will not be notified.

The OverrideAudit package provides monitoring of override files and will notify you when the file it overrides has been updated.

Merging and Order of Precedence

Package precedence is important for merging certain resources, for example, .sublime-keymap and .sublime-settings files, and for loading plugins (.py files).

If an :override_package: exists for a .sublime-package package, it will be loaded at the same time as the .sublime-package archive.

Sublime Text loads packages in this order:

  1. Packages/Default;
  2. :shipped_package:shipped_packages: in lexicographical order;
  3. :installed_package:installed_packages: in lexicographical order;
  4. all remaining :user_package:user_packages:, except for Packages/User, that did not override anything, in lexicographical order;
  5. Packages/User

Reverting Sublime Text to Its Default Configuration

Reverting Sublime Text to a fresh state solves many problems that appear to be bugs in Sublime Text but are in fact caused by misbehaving packages and plugins.

To revert Sublime Text to its default configuration and remove all your settings and configurations, delete the Data directory and restart the editor. Keep in mind that the Installed Packages folder will be deleted too, so you'll lose all your installed packages.

Always make sure to back up your data before taking an extreme measure like this one!

+ \ No newline at end of file diff --git a/guide/extensibility/plugins/index.html b/guide/extensibility/plugins/index.html index 0356980a..ff69a39c 100644 --- a/guide/extensibility/plugins/index.html +++ b/guide/extensibility/plugins/index.html @@ -6,13 +6,13 @@ Plugins | Sublime Text Community Documentation - + - + @@ -49,8 +49,8 @@ sugs = [(x.attrib["data"],) * 2 for x in elements] - return sugs

Note

Make sure you don't keep this plugin around after trying it or it will interfere with the autocompletion system.

Learning the API

The API reference is documented at https://www.sublimetext.com/docs/api_reference.html.

To get acquainted with the Sublime Text API and the available commands, it may be helpful to read existing code and learn from it.

In particular, the Packages/Default contains many examples of undocumented commands and API calls. Note that you will first have to extract its contents to a folder if you want to take a look at the code within - PackageResourceViewer helps with this.

- + return sugs

Note

Make sure you don't keep this plugin around after trying it or it will interfere with the autocompletion system.

Learning the API

The API reference is documented at https://www.sublimetext.com/docs/api_reference.html.

To get acquainted with the Sublime Text API and the available commands, it may be helpful to read existing code and learn from it.

In particular, the Packages/Default contains many examples of undocumented commands and API calls. Note that you will first have to extract its contents to a folder if you want to take a look at the code within - PackageResourceViewer helps with this.

+ \ No newline at end of file diff --git a/guide/extensibility/plugins/input_handlers.html b/guide/extensibility/plugins/input_handlers.html index 3b93eaf3..967dfdbe 100644 --- a/guide/extensibility/plugins/input_handlers.html +++ b/guide/extensibility/plugins/input_handlers.html @@ -6,13 +6,13 @@ Input Handlers | Sublime Text Community Documentation - + - + @@ -182,8 +182,8 @@ "command": "multiply", "args": {"operand1": 12} }, -}

Caveats

- +}

Caveats

+ \ No newline at end of file diff --git a/guide/extensibility/snippets.html b/guide/extensibility/snippets.html index 3799965c..8dc90eb4 100644 --- a/guide/extensibility/snippets.html +++ b/guide/extensibility/snippets.html @@ -6,13 +6,13 @@ Snippets | Sublime Text Community Documentation - + - + @@ -86,8 +86,8 @@ # Output: -Transformation: MyModule - +Transformation: MyModule + \ No newline at end of file diff --git a/guide/extensibility/syntaxdefs.html b/guide/extensibility/syntaxdefs.html index 359bb8b0..6bb53fa9 100644 --- a/guide/extensibility/syntaxdefs.html +++ b/guide/extensibility/syntaxdefs.html @@ -6,13 +6,13 @@ Syntax Definitions | Sublime Text Community Documentation - + - + @@ -145,8 +145,8 @@ - comment: Unescaped and unmatched magic characters name: invalid.illegal.ssraw match: '[$<>]' -...

There are more available constructs and code reuse techniques using a "repository", but the above explanations should get you started with the creation of syntax definitions.

Note

If you previously used JSON for syntax definitions you are still able to do this because :PackageDev: is backwards compatible.

If you want to consider switching to YAML (either from JSON or directly from Plist), it provides a command named PackageDev: Convert to YAML and Rearrange Syntax Definition which will automatically format the resulting YAML in a pleasurable way.

- +...

There are more available constructs and code reuse techniques using a "repository", but the above explanations should get you started with the creation of syntax definitions.

Note

If you previously used JSON for syntax definitions you are still able to do this because :PackageDev: is backwards compatible.

If you want to consider switching to YAML (either from JSON or directly from Plist), it provides a command named PackageDev: Convert to YAML and Rearrange Syntax Definition which will automatically format the resulting YAML in a pleasurable way.

+ \ No newline at end of file diff --git a/guide/getting-started/basic-concepts.html b/guide/getting-started/basic-concepts.html index 80631bb5..a9cd8a90 100644 --- a/guide/getting-started/basic-concepts.html +++ b/guide/getting-started/basic-concepts.html @@ -6,13 +6,13 @@ Basic Concepts | Sublime Text Community Documentation - + - + @@ -26,8 +26,8 @@ -
Skip to content

Basic Concepts

To fully understand the rest of this guide, you need to be familiar with the concepts presented on this page.

General Conventions

This guide is written from the perspective of a Windows user. Most instructions will only require trivial changes to work on other platforms.

Unless otherwise noted, relative paths (for example, Packages/User) start at the Data Directory.

We assume default key bindings when indicating keyboard shortcuts. If you are using a non-US-English keyboard layout, some key bindings may not match your layout. This is due to the way Sublime Text processes key strokes internally.

Mastering Sublime Text Takes Time

Mastering Sublime Text requires time and practice. Luckily, it's built around a handful of concepts that make for a consistent system once all the pieces come together.

This guide will teach you how to use and configure Sublime Text.

Sublime Text is a versatile editor for programmers, but you don't need to be one in order to use it, and you don't need to configure it extensively to be productive – it's an efficient tool out of the box! Hackers, however, will appreciate all the customization and extensibility opportunities.

In the following paragraphs, we'll outline key aspects that you'll get familiar with after you've spent some time using the editor.

The Data Directory

Nearly all of the interesting files for users live under the data directory. The data directory is a platform-dependent location:

  • Windows: %APPDATA%\Sublime Text
  • macOS: ~/Library/Application Support/Sublime Text
  • Linux: ~/.config/sublime-text

If you're using the portable version (Windows only), look for Application/Data. Here, Application refers to the directory to which you've extracted the compressed portable files and where the executable resides.

Note that the Data directory only exists with that name in the portable version. In full installations, it is one of the locations indicated above.

The Packages Directory

This is a key directory located under the data directory. All resources for supported programming and markup languages are stored here.

(More on packages and resources later.)

You can access the packages directory from the main menu (Preferences → Browse Packages...), by means of an API call (sublime.packages_path()), and by other means that will be explained in later topics.

In this guide, we refer to the packages folder as Packages, packages path, packages folder, or packages directory.

The User Package

Packages/User is a catch-all directory for custom plugins, snippets, macros, etc. Consider it your personal area in the packages folder. Additionally, it will contain most of your personal application or plugin settings.

Updates to Sublime Text will never overwrite the contents of Packages/User.

Sublime Text is Programmable

This information is useful for programmers. Other users just need to know that Sublime Text enables users with programming skills to add their own features to the editor.

Sublime Text exposes its internals via an Application Programming Interface (API) that programmers can interact with using the Python programming language.

The Console

Sublime Text and plugins push debug information to the console. To open the console, press Ctrl+` or select View → Show Console from the main menu.

Here's the Python console in Sublime Text:

Console

An embedded Python interpreter is included in the editor. The embedded interpreter is useful to inspect the editor's settings and to quickly test API calls while developing plugins.

Your System's Python vs the Sublime Text Embedded Python

Sublime Text comes with its own embedded Python interpreter that's separate from your system's Python interpreter (if available).

The embedded interpreter is only intended to interact with the plugin API, not for general development.

Packages, Plugins, Resources and Other Terms

Almost every aspect of Sublime Text can be extended or customized. You can modify the editor's behavior, add macros and snippets, extend menus and much more. You can even create whole new features using the editor's API to build complex plugins.

Sublime Text's vast flexibility is the reason why you will learn about so many configuration files: there simply must be a place to specify all available preferences and settings.

Configuration files in Sublime Text are text files that conform to a predefined structure or format: JSON predominates, but you'll find XML and YAML files, too. For the more advanced extensibility options, Python source code files are used.

In this guide, for brevity, we sometimes refer collectively to all these disparate configuration files as resources.

Sublime Text will look for resources inside the packages folder. We'll talk at length about packages later, but the short version is that, to keep things tidy, Sublime Text has a notion of a package, that is, a folder (or zip archive) that contains resources that belong together. (Maybe they help compose emails faster, write HTML efficiently, enhance the coding experience for C, Ruby, Go, …).

Textmate Compatibility

TextMate is an editor for the Mac.

Since Sublime Text was heavily inspired by TextMate 1, it supports most of the extensions provided in TextMate bundles, notably excluding .tmCommands and .tmSnippets files and any other configuration in .plist files. While most of the older formats are recognized by Sublime Text, e.g. .tmLanguage and .tmTheme, new formats using .sublime-* extensions have been added that provide a superset of the old functionality or are simply replacements for TextMate's formats.

vi/Vim Emulation

vi is an ancient modal editor that lets the user perform all operations from the keyboard. Vim, a modern version of vi, is still in widespread use.

Sublime Text provides vi emulation through the Vintage package. The Vintage package is ignored by default and needs to be enabled by the user. Learn more about Vintage in the official documentation.

Several third-party packages have been developed to implement to supplement or replace the built-in vi emulation. We will cover installation and usage of third-party packages later.

emacs Emulation

emacs is another popular editor for programmers.

Sublime Text does not offer any built-in emacs emulation, but you can try third-party packages created by other Sublime Text users. As with third-party packages for vi emulation, we will cover installation and usage of these later.

- +
Skip to content

Basic Concepts

To fully understand the rest of this guide, you need to be familiar with the concepts presented on this page.

General Conventions

This guide is written from the perspective of a Windows user. Most instructions will only require trivial changes to work on other platforms.

Unless otherwise noted, relative paths (for example, Packages/User) start at the Data Directory.

We assume default key bindings when indicating keyboard shortcuts. If you are using a non-US-English keyboard layout, some key bindings may not match your layout. This is due to the way Sublime Text processes key strokes internally.

Mastering Sublime Text Takes Time

Mastering Sublime Text requires time and practice. Luckily, it's built around a handful of concepts that make for a consistent system once all the pieces come together.

This guide will teach you how to use and configure Sublime Text.

Sublime Text is a versatile editor for programmers, but you don't need to be one in order to use it, and you don't need to configure it extensively to be productive – it's an efficient tool out of the box! Hackers, however, will appreciate all the customization and extensibility opportunities.

In the following paragraphs, we'll outline key aspects that you'll get familiar with after you've spent some time using the editor.

The Data Directory

Nearly all of the interesting files for users live under the data directory. The data directory is a platform-dependent location:

  • Windows: %APPDATA%\Sublime Text
  • macOS: ~/Library/Application Support/Sublime Text
  • Linux: ~/.config/sublime-text

If you're using the portable version (Windows only), look for Application/Data. Here, Application refers to the directory to which you've extracted the compressed portable files and where the executable resides.

Note that the Data directory only exists with that name in the portable version. In full installations, it is one of the locations indicated above.

The Packages Directory

This is a key directory located under the data directory. All resources for supported programming and markup languages are stored here.

(More on packages and resources later.)

You can access the packages directory from the main menu (Preferences → Browse Packages...), by means of an API call (sublime.packages_path()), and by other means that will be explained in later topics.

In this guide, we refer to the packages folder as Packages, packages path, packages folder, or packages directory.

The User Package

Packages/User is a catch-all directory for custom plugins, snippets, macros, etc. Consider it your personal area in the packages folder. Additionally, it will contain most of your personal application or plugin settings.

Updates to Sublime Text will never overwrite the contents of Packages/User.

Sublime Text is Programmable

This information is useful for programmers. Other users just need to know that Sublime Text enables users with programming skills to add their own features to the editor.

Sublime Text exposes its internals via an Application Programming Interface (API) that programmers can interact with using the Python programming language.

The Console

Sublime Text and plugins push debug information to the console. To open the console, press Ctrl+` or select View → Show Console from the main menu.

Here's the Python console in Sublime Text:

Console

An embedded Python interpreter is included in the editor. The embedded interpreter is useful to inspect the editor's settings and to quickly test API calls while developing plugins.

Your System's Python vs the Sublime Text Embedded Python

Sublime Text comes with its own embedded Python interpreter that's separate from your system's Python interpreter (if available).

The embedded interpreter is only intended to interact with the plugin API, not for general development.

Packages, Plugins, Resources and Other Terms

Almost every aspect of Sublime Text can be extended or customized. You can modify the editor's behavior, add macros and snippets, extend menus and much more. You can even create whole new features using the editor's API to build complex plugins.

Sublime Text's vast flexibility is the reason why you will learn about so many configuration files: there simply must be a place to specify all available preferences and settings.

Configuration files in Sublime Text are text files that conform to a predefined structure or format: JSON predominates, but you'll find XML and YAML files, too. For the more advanced extensibility options, Python source code files are used.

In this guide, for brevity, we sometimes refer collectively to all these disparate configuration files as resources.

Sublime Text will look for resources inside the packages folder. We'll talk at length about packages later, but the short version is that, to keep things tidy, Sublime Text has a notion of a package, that is, a folder (or zip archive) that contains resources that belong together. (Maybe they help compose emails faster, write HTML efficiently, enhance the coding experience for C, Ruby, Go, …).

Textmate Compatibility

TextMate is an editor for the Mac.

Since Sublime Text was heavily inspired by TextMate 1, it supports most of the extensions provided in TextMate bundles, notably excluding .tmCommands and .tmSnippets files and any other configuration in .plist files. While most of the older formats are recognized by Sublime Text, e.g. .tmLanguage and .tmTheme, new formats using .sublime-* extensions have been added that provide a superset of the old functionality or are simply replacements for TextMate's formats.

vi/Vim Emulation

vi is an ancient modal editor that lets the user perform all operations from the keyboard. Vim, a modern version of vi, is still in widespread use.

Sublime Text provides vi emulation through the Vintage package. The Vintage package is ignored by default and needs to be enabled by the user. Learn more about Vintage in the official documentation.

Several third-party packages have been developed to implement to supplement or replace the built-in vi emulation. We will cover installation and usage of third-party packages later.

emacs Emulation

emacs is another popular editor for programmers.

Sublime Text does not offer any built-in emacs emulation, but you can try third-party packages created by other Sublime Text users. As with third-party packages for vi emulation, we will cover installation and usage of these later.

+ \ No newline at end of file diff --git a/guide/getting-started/installation.html b/guide/getting-started/installation.html index 2399bddb..584e60d5 100644 --- a/guide/getting-started/installation.html +++ b/guide/getting-started/installation.html @@ -6,13 +6,13 @@ Installation | Sublime Text Community Documentation - + - + @@ -35,8 +35,8 @@ # Create a symbolic link to use at the command line. sudo ln -s /opt/sublime_text_3/sublime_text /usr/local/bin/subl # Create a symbolic link for the desktop entry. -sudo ln -s /opt/sublime_text_3/sublime_text.desktop /usr/share/applications/sublime_text.desktop

How to Install the Portable Version

TIP

The portable version is activated whenever a Data/ folder exists in the installation folder, i.e. the folder you extracted the portable archive to.

Windows

  1. Download the compressed archive with the portable version.
  2. Unzip it to a folder of your choice.

You will find the sublime_text.exe executable inside that folder.

Linux

The steps are similar to the manual installation steps above.

  1. Download the tarball.
  2. Unzip it to a folder of your choice.
  3. Create a Data/ folder inside that folder.

You will find the sublime_text executable inside that folder.

macOS

  1. Download .dmg file.
  2. Open .dmg file.
  3. Drag the Sublime Text 3 bundle into the Applications folder

To create a symbolic link to use at the command line, issue the following command at the terminal:

bash
ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl

Release Channels

Sublime Text currently has two release channels:

Stable releases are better tested and more reliable for everyday use. The majority of users should only use stable releases.

The dev channel is more unstable. Dev builds may contain bugs and not work reliably. They are updated more often than beta releases. Dev builds are only available to registered users.

Older Versions

In the event you want to downgrade your Sublime Text, you can access binaries for any previously released version by replacing the build number in the download URL. For example, to retrieve the Windows release for Sublime Text 3.0, grab the latest download URL provided and replace it with the one from the Sublime Text 3.0 release.

Although discouraged, Sublime Text 2 can be found on its old download page. Because it is unsupported, you will need to figure out on your own how to install it.

- +sudo ln -s /opt/sublime_text_3/sublime_text.desktop /usr/share/applications/sublime_text.desktop

How to Install the Portable Version

TIP

The portable version is activated whenever a Data/ folder exists in the installation folder, i.e. the folder you extracted the portable archive to.

Windows

  1. Download the compressed archive with the portable version.
  2. Unzip it to a folder of your choice.

You will find the sublime_text.exe executable inside that folder.

Linux

The steps are similar to the manual installation steps above.

  1. Download the tarball.
  2. Unzip it to a folder of your choice.
  3. Create a Data/ folder inside that folder.

You will find the sublime_text executable inside that folder.

macOS

  1. Download .dmg file.
  2. Open .dmg file.
  3. Drag the Sublime Text 3 bundle into the Applications folder

To create a symbolic link to use at the command line, issue the following command at the terminal:

bash
ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl

Release Channels

Sublime Text currently has two release channels:

Stable releases are better tested and more reliable for everyday use. The majority of users should only use stable releases.

The dev channel is more unstable. Dev builds may contain bugs and not work reliably. They are updated more often than beta releases. Dev builds are only available to registered users.

Older Versions

In the event you want to downgrade your Sublime Text, you can access binaries for any previously released version by replacing the build number in the download URL. For example, to retrieve the Windows release for Sublime Text 3.0, grab the latest download URL provided and replace it with the one from the Sublime Text 3.0 release.

Although discouraged, Sublime Text 2 can be found on its old download page. Because it is unsupported, you will need to figure out on your own how to install it.

+ \ No newline at end of file diff --git a/guide/index.html b/guide/index.html index 0abe2b07..b87919ca 100644 --- a/guide/index.html +++ b/guide/index.html @@ -6,13 +6,13 @@ Introduction | Sublime Text Community Documentation - + - + @@ -26,8 +26,8 @@ -
Skip to content

Introduction

Welcome to the community-driven documentation project for the Sublime Text editor!

Sublime Text is a versatile, fun, and fast text editor for code and prose that automates repetitive tasks so you can focus on the important stuff. It is supported on macOS, Windows and Linux. Its versatility comes from a wide range of community-developed third-party packages that provide syntax highlighting, snippets, or other automation backed by Python plugins. The default distribution of Sublime Text aims to provide a basic but very functional set of features, but it can easily be turned into a full-fledged IDE, if so desired.

In this guide, you will learn how to use Sublime Text effectively and how to extend it with functionality that caters to your workflow.

If you're starting out with Sublime Text and already installed it, we recommend beginning with the Basic Concepts page. Otherwise, feel free to use the sidebar on the left to navigate to your topic of interest.

If you're interested in the nitty-gritty details of how you can customize and extend Sublime Text to your liking, check out the Reference section of this guide via the navigation bar on top. You can always go back to this page by clicking on "Guide" in that same bar.

Happy learning!

One last note before you dive in

You can switch the page's theme by using the cog in the top navigation bar. Changing the theme and using the search bar require JavaScript, because this is a statically hosted site. Other than that, this site site can be used without JavaScript.

Sublime Text

History

The Unofficial Sublime Text Documentation was started by Guillermo López-Anglada in 2010 and later joined by FichteFoll in 2013, receiving countless contributions by other members of the community through its entire lifetime. In 2014, it was backed by a fundraiser and supported by individuals and Sublime HQ Pty Ltd.

After that version of the docs, originally hosted on http://docs.sublimetext.info/, went down in November 2019 and the maintainer of both the repo and the domain could not be contacted anymore, the project was forked of the original under an older, more permissive license and rebooted at its current domain of https://docs.sublimetext.io/. In the process, the underlying markup rendering framework was changed from Sphinx to Vuepress and now to Vitepress and the documents have been restructured into the two guide and reference main sections you can see in the navigation bar at the top.

Contributing to the Documentation

If you want to contribute to this documentation, head over to the GitHub repository. You will also find an "Edit this page" link at the bottom of each page that will redirect you directly to the source file of the page you are currently viewing. Please review our contribution guidelines for formatting questions.

- +
Skip to content

Introduction

Welcome to the community-driven documentation project for the Sublime Text editor!

Sublime Text is a versatile, fun, and fast text editor for code and prose that automates repetitive tasks so you can focus on the important stuff. It is supported on macOS, Windows and Linux. Its versatility comes from a wide range of community-developed third-party packages that provide syntax highlighting, snippets, or other automation backed by Python plugins. The default distribution of Sublime Text aims to provide a basic but very functional set of features, but it can easily be turned into a full-fledged IDE, if so desired.

In this guide, you will learn how to use Sublime Text effectively and how to extend it with functionality that caters to your workflow.

If you're starting out with Sublime Text and already installed it, we recommend beginning with the Basic Concepts page. Otherwise, feel free to use the sidebar on the left to navigate to your topic of interest.

If you're interested in the nitty-gritty details of how you can customize and extend Sublime Text to your liking, check out the Reference section of this guide via the navigation bar on top. You can always go back to this page by clicking on "Guide" in that same bar.

Happy learning!

One last note before you dive in

You can switch the page's theme by using the cog in the top navigation bar. Changing the theme and using the search bar require JavaScript, because this is a statically hosted site. Other than that, this site site can be used without JavaScript.

Sublime Text

History

The Unofficial Sublime Text Documentation was started by Guillermo López-Anglada in 2010 and later joined by FichteFoll in 2013, receiving countless contributions by other members of the community through its entire lifetime. In 2014, it was backed by a fundraiser and supported by individuals and Sublime HQ Pty Ltd.

After that version of the docs, originally hosted on http://docs.sublimetext.info/, went down in November 2019 and the maintainer of both the repo and the domain could not be contacted anymore, the project was forked of the original under an older, more permissive license and rebooted at its current domain of https://docs.sublimetext.io/. In the process, the underlying markup rendering framework was changed from Sphinx to Vuepress and now to Vitepress and the documents have been restructured into the two guide and reference main sections you can see in the navigation bar at the top.

Contributing to the Documentation

If you want to contribute to this documentation, head over to the GitHub repository. You will also find an "Edit this page" link at the bottom of each page that will redirect you directly to the source file of the page you are currently viewing. Please review our contribution guidelines for formatting questions.

+ \ No newline at end of file diff --git a/guide/usage/build-systems.html b/guide/usage/build-systems.html index 6091b2db..23f6e9c7 100644 --- a/guide/usage/build-systems.html +++ b/guide/usage/build-systems.html @@ -6,13 +6,13 @@ Build Systems | Sublime Text Community Documentation - + - + @@ -30,8 +30,8 @@ "cmd": ["python", "-u", "$file"], "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "selector": "source.python" -}

cmd : Required. This option contains the actual command line to be executed.

bash
python -u /path/to/current/file.ext

file_regex : A Perl-style regular expression to capture error information from an external program's output. This information is used to help you navigate through error instances with F4".

selector : If the Tools | Build System | Automatic option is set, Sublime Text will automatically find the corresponding build system for the active file by matching selector to the file's scope.

In addition to options, you can use some variables in build systems too, as we have done above with $file, which expands to the active buffer's filename.

Where to Store Build Systems

Build systems must be located somewhere under the Packages folder (e.g. Packages/User). Many packages include their own build systems.

Running Build Systems

Build systems can be run by pressing F7 or from Tools → Build.

- +}

cmd : Required. This option contains the actual command line to be executed.

bash
python -u /path/to/current/file.ext

file_regex : A Perl-style regular expression to capture error information from an external program's output. This information is used to help you navigate through error instances with F4".

selector : If the Tools | Build System | Automatic option is set, Sublime Text will automatically find the corresponding build system for the active file by matching selector to the file's scope.

In addition to options, you can use some variables in build systems too, as we have done above with $file, which expands to the active buffer's filename.

Where to Store Build Systems

Build systems must be located somewhere under the Packages folder (e.g. Packages/User). Many packages include their own build systems.

Running Build Systems

Build systems can be run by pressing F7 or from Tools → Build.

+ \ No newline at end of file diff --git a/guide/usage/editing.html b/guide/usage/editing.html index e5584a48..0f30f6da 100644 --- a/guide/usage/editing.html +++ b/guide/usage/editing.html @@ -6,13 +6,13 @@ Editing | Sublime Text Community Documentation - + - + @@ -26,8 +26,8 @@ -
Skip to content

Editing

Sublime Text is brim-full of editing features. This topic just scratches the surface of what's possible.

Multiple Selections

Multiple selections let you make sweeping changes to your text efficiently. Any praise about multiple selections is an understatement. This is why:

Select some text and press Ctrl D to add more instances. If you want to skip the current instance, press Ctrl K, Ctrl D.

If you go too far, press Ctrl U to deselect the current instance.

Transforming Multiple Selections into Lines

Ctrl L expands the selections to the end of the line.Ctrl  L splits the selections into lines.

You can copy multiple selected lines to a separate buffer, edit them there, select the content again as multiple lines and then paste them back into place in the first buffer.

Column Selection

You can select a rectangular area of a file. Column selection makes use of multiple selections.

It's possible to add blocks of text to or remove them from the selection.

Using the Mouse

Windows & Linux

DescriptionShortcut
Select Block + Right Mouse Button
Add to SelectionCtrl  + Right Mouse Button
Remove from SelectionAlt  + Right Mouse Button

macOS

DescriptionShortcut
Select Block + Left Mouse Button
Add to Selection  + Left Mouse Button
Remove from Selection   + Left Mouse Button

Using the Keyboard

SystemShortcut
WindowsCtrl Alt  and Ctrl Alt 
LinuxAlt   and Alt  
macOSCtrl   and Ctrl  

Other Ways of Selecting Text

The list is long; all available options can be found under Selection. To name a few:

  • Select subwords (Alt   and Alt  )
  • Expand selection to brackets (Ctrl  M)
  • Expand selection to indentation (Ctrl  J)
  • Expand selection to scope (Ctrl  )

Transposing Things

Need to swap two letters or, better yet, two words? Experiment with

Ctrl T.

Arithmetic

Need to create a series of numbers? Try Ctrl  P and "Arithmetic".

Best used when having multiple selections.

ExpressionSelectionResult
1+i1, 2, 3, 4, 5, 6, 7, ...
30+(i%3)30, 31, 32, 30, 31, 32, ...
(x*2)+i10, 20, 3020, 41, 62
math.ceil(x)0.25, 2.251, 3
len(s)house, tree5, 4
format(s, '^10')fish'   fish   ' (centered string)

You can use the following variables:

  • i being the index of the selection
  • x being the selected number
  • s being the selected string

As you can see above you can even use a certain set of built-in python functions:

And much, much more...

The Edit, Selection, Find and Goto menus are good places to look for handy editing tools. You might end up using just a few of them, but the rest will still be there for when you need them.

- +
Skip to content

Editing

Sublime Text is brim-full of editing features. This topic just scratches the surface of what's possible.

Multiple Selections

Multiple selections let you make sweeping changes to your text efficiently. Any praise about multiple selections is an understatement. This is why:

Select some text and press Ctrl D to add more instances. If you want to skip the current instance, press Ctrl K, Ctrl D.

If you go too far, press Ctrl U to deselect the current instance.

Transforming Multiple Selections into Lines

Ctrl L expands the selections to the end of the line.Ctrl  L splits the selections into lines.

You can copy multiple selected lines to a separate buffer, edit them there, select the content again as multiple lines and then paste them back into place in the first buffer.

Column Selection

You can select a rectangular area of a file. Column selection makes use of multiple selections.

It's possible to add blocks of text to or remove them from the selection.

Using the Mouse

Windows & Linux

DescriptionShortcut
Select Block + Right Mouse Button
Add to SelectionCtrl  + Right Mouse Button
Remove from SelectionAlt  + Right Mouse Button

macOS

DescriptionShortcut
Select Block + Left Mouse Button
Add to Selection  + Left Mouse Button
Remove from Selection   + Left Mouse Button

Using the Keyboard

SystemShortcut
WindowsCtrl Alt  and Ctrl Alt 
LinuxAlt   and Alt  
macOSCtrl   and Ctrl  

Other Ways of Selecting Text

The list is long; all available options can be found under Selection. To name a few:

  • Select subwords (Alt   and Alt  )
  • Expand selection to brackets (Ctrl  M)
  • Expand selection to indentation (Ctrl  J)
  • Expand selection to scope (Ctrl  )

Transposing Things

Need to swap two letters or, better yet, two words? Experiment with

Ctrl T.

Arithmetic

Need to create a series of numbers? Try Ctrl  P and "Arithmetic".

Best used when having multiple selections.

ExpressionSelectionResult
1+i1, 2, 3, 4, 5, 6, 7, ...
30+(i%3)30, 31, 32, 30, 31, 32, ...
(x*2)+i10, 20, 3020, 41, 62
math.ceil(x)0.25, 2.251, 3
len(s)house, tree5, 4
format(s, '^10')fish'   fish   ' (centered string)

You can use the following variables:

  • i being the index of the selection
  • x being the selected number
  • s being the selected string

As you can see above you can even use a certain set of built-in python functions:

And much, much more...

The Edit, Selection, Find and Goto menus are good places to look for handy editing tools. You might end up using just a few of them, but the rest will still be there for when you need them.

+ \ No newline at end of file diff --git a/guide/usage/file-management/index.html b/guide/usage/file-management/index.html index ad77993d..5b0dfea6 100644 --- a/guide/usage/file-management/index.html +++ b/guide/usage/file-management/index.html @@ -6,13 +6,13 @@ File Management & Navigation | Sublime Text Community Documentation - + - + @@ -26,8 +26,8 @@ -
Skip to content

File Management & Navigation

Sublime Text includes a variety of features to help you keep your work organized and find your way around your projects.

- +
Skip to content

File Management & Navigation

Sublime Text includes a variety of features to help you keep your work organized and find your way around your projects.

+ \ No newline at end of file diff --git a/guide/usage/file-management/navigation.html b/guide/usage/file-management/navigation.html index 377ab32d..4aae7908 100644 --- a/guide/usage/file-management/navigation.html +++ b/guide/usage/file-management/navigation.html @@ -6,13 +6,13 @@ Navigation | Sublime Text Community Documentation - + - + @@ -26,8 +26,8 @@ -
Skip to content

Navigation

Goto Anything

Using Goto Anything, you can navigate your project's files swiftly.

Goto Anything

Keyboard shortcuts related to Goto Anything:

DescriptionShortcut
Open Goto AnythingCtrl P
Open current item
Open current item and keep panel open
Close Goto AnythingEsc

As you type into Goto Anything's input area, names of files in the current project will be searched, and a preview of the best match will be shown. This preview is transient; that is, it won't become the actual active view until you perform some operation on it. You will find transient views in other situations, for example, after clicking on a file in the sidebar.

Goto Anything lives up to its name – there's more to it than locating files.

Goto Anything Operators

Goto Anything accepts several operators. All of them can be used on their own or after the search term.

Example:

models:100

This instructs Sublime Text to first search for a file whose path matches models, and then to go to line 100 in said file.

Supported Operators

@symbol : Searches the active file for the symbol named symbol.

Note

Symbols usually include class and function names.

Symbol searches will only yield results if the active file type has symbols defined for it. For more information about symbols, see Symbols.

#term : Performs a fuzzy search of the term search term and highlights all matches.

:line_number : Goes to the specified line_number, or to the end of the file if line_number is larger that the file's line count.

The Goto Anything operators are bound to the following shortcuts:

DescriptionShortcut
@Ctrl R
#Ctrl ;
:Ctrl G

Goto Symbol In Project

The Goto Anything shortcuts navigate the current file. If you have a project open, you can press Ctrl  R to launch Goto Anything In Project. This command will search for symbols across every file in your project.

The sidebar provides an overview of the active project (more on projects later). Files and folders in the sidebar will be available in Goto Anything and project-wide actions like, for example, project-wide searches.

Projects and the sidebar are closely related. It's important to note that there's always an active project; if you haven't opened a project file, an anonymous project will be used instead.

The sidebar provides basic file management operations through its context menu.

These are common keyboard shortcuts related to the side bar:

DescriptionShortcut
Toggle side barCtrl K, Ctrl B
Give the focus to the side barCtrl 0
Return the focus to the viewEsc
Navigate side barArrow keys

Files opened from the sidebar create semi-transient views. Unlike transient views, semi-transient views show up as a new tab. The tab title of semi-transient views appears in italics. Before a new semi-transient view is opened, any other pre-existing semi-transient view in the same pane gets automatically closed.

Here's an example showing a normal view, a transient view, and a semi-transient view. Notice that the transient view has no tab:

Goto Anything - Transient Views

Panes

Panes are groups of views. In Sublime Text, you can have multiple panes open at the same time.

Main keyboard shortcuts related to panes:

DescriptionShortcut
Create new paneCtrl K, Ctrl 
Close active paneCtrl K, Ctrl 

Further pane management commands can be found under View → Layout and related submenus.

- +
Skip to content

Navigation

Goto Anything

Using Goto Anything, you can navigate your project's files swiftly.

Goto Anything

Keyboard shortcuts related to Goto Anything:

DescriptionShortcut
Open Goto AnythingCtrl P
Open current item
Open current item and keep panel open
Close Goto AnythingEsc

As you type into Goto Anything's input area, names of files in the current project will be searched, and a preview of the best match will be shown. This preview is transient; that is, it won't become the actual active view until you perform some operation on it. You will find transient views in other situations, for example, after clicking on a file in the sidebar.

Goto Anything lives up to its name – there's more to it than locating files.

Goto Anything Operators

Goto Anything accepts several operators. All of them can be used on their own or after the search term.

Example:

models:100

This instructs Sublime Text to first search for a file whose path matches models, and then to go to line 100 in said file.

Supported Operators

@symbol : Searches the active file for the symbol named symbol.

Note

Symbols usually include class and function names.

Symbol searches will only yield results if the active file type has symbols defined for it. For more information about symbols, see Symbols.

#term : Performs a fuzzy search of the term search term and highlights all matches.

:line_number : Goes to the specified line_number, or to the end of the file if line_number is larger that the file's line count.

The Goto Anything operators are bound to the following shortcuts:

DescriptionShortcut
@Ctrl R
#Ctrl ;
:Ctrl G

Goto Symbol In Project

The Goto Anything shortcuts navigate the current file. If you have a project open, you can press Ctrl  R to launch Goto Anything In Project. This command will search for symbols across every file in your project.

The sidebar provides an overview of the active project (more on projects later). Files and folders in the sidebar will be available in Goto Anything and project-wide actions like, for example, project-wide searches.

Projects and the sidebar are closely related. It's important to note that there's always an active project; if you haven't opened a project file, an anonymous project will be used instead.

The sidebar provides basic file management operations through its context menu.

These are common keyboard shortcuts related to the side bar:

DescriptionShortcut
Toggle side barCtrl K, Ctrl B
Give the focus to the side barCtrl 0
Return the focus to the viewEsc
Navigate side barArrow keys

Files opened from the sidebar create semi-transient views. Unlike transient views, semi-transient views show up as a new tab. The tab title of semi-transient views appears in italics. Before a new semi-transient view is opened, any other pre-existing semi-transient view in the same pane gets automatically closed.

Here's an example showing a normal view, a transient view, and a semi-transient view. Notice that the transient view has no tab:

Goto Anything - Transient Views

Panes

Panes are groups of views. In Sublime Text, you can have multiple panes open at the same time.

Main keyboard shortcuts related to panes:

DescriptionShortcut
Create new paneCtrl K, Ctrl 
Close active paneCtrl K, Ctrl 

Further pane management commands can be found under View → Layout and related submenus.

+ \ No newline at end of file diff --git a/guide/usage/file-management/projects.html b/guide/usage/file-management/projects.html index 8a8b78a7..e60c5536 100644 --- a/guide/usage/file-management/projects.html +++ b/guide/usage/file-management/projects.html @@ -6,13 +6,13 @@ Projects | Sublime Text Community Documentation - + - + @@ -26,8 +26,8 @@ -
Skip to content

Projects

Projects group sets of files and folders to keep your work organized. They support project-specific settings and build systems and you can quickly switch between them to continue working where you left off.

Adding folders to a project is necessary for Goto Anything and project-wide Goto Definition.

There is always an active project, even if you haven't created or opened one. In this situation, you are working with an anonymous project, which has limited functionality. New windows always use an anonymous project when they first open.

Project metadata is stored in JSON files with a .sublime-project extension. Wherever there's a .sublime-project file, you will find an ancillary .sublime-workspace file too. The .sublime-workspace file contains session data that you should never edit. (More on workspaces later.)

Note

Generally speaking, it's fine to commit .sublime-project files to a source code repository, but always be mindful of what you store in them.

Creating a Project

Start with an anonymous project by opening a new window or closing any active project with the Project → Close Project menu.

You can add and remove folders to/from a project using the Project menu or the side bar's context menu. If you drag a folder onto a Sublime Text window, it will be added to the project too.

To save an anonymous project, go to Project → Save Project As....

After the project is saved, you can edit it by hand to adjust further options.

Opening Projects

Using the main menu, you can open or switch projects by selecting Project → Open Recent, Project → Switch Project… or Project → Quick Switch Project….

When switching projects, Sublime Text will close the current project and open the specified one in the same window, When opening a project, Sublime Text will open a new window and open the selected project there.

Keyboard shortcuts related to projects:

DescriptionShortcut
Quick Switch Project…Ctrl + Alt + P

Note

The key binding was removed with build 3096 for Windows and must be added manually, if desired. In order to do this, add the following key binding to your user key bindings file:

json
{ "keys": ["ctrl+alt+p"], "command": "prompt_select_workspace" }

Additionally, you can open a project from the command line by passing the .sublime-project file as an argument to the subl command line helper included with Sublime Text.

Advanced Configuration for Project Files

Along with more options for individual directories, projects can have specific build systems or settings overrides.

See Also

Projects - Reference : Documentation on project file format and options.

binary_file_patterns : A list of wildcards. Files matching these wildcards will show up in the side bar, but will be excluded from Goto Anything and Find in Files.

Workspaces

Workspaces hold session data associated with a project, which includes information about the opened files, pane layout, find history and more. A project can have multiple workspaces.

A common use case for workspaces is to work on different features within the same project, where each feature requires a different set of files to be open, and you want to switch between features quickly. In this case you'll want to have a second workspace available. Writing tests could be an example for this.

Workspaces behave very much like projects. To create a new workspace, select Project → New Workspace for Project. To save the active workspace, select Project → Save Workspace As....

The workspace metadata is stored in JSON files with the .sublime-workspace extension, which you are not supposed to edit.

To switch between different workspaces, use Ctrl Alt P, exactly as you do with projects.

As with projects, you can open a workspace from the command line by passing the desired .sublime-workspace file as an argument to the subl command line helper included with Sublime Text.

WARNING

Unlike .sublime-project files, .sublime-workspace files are not meant to be shared or edited manually. You should never commit .sublime-workspace files into a source code repository.

- +
Skip to content

Projects

Projects group sets of files and folders to keep your work organized. They support project-specific settings and build systems and you can quickly switch between them to continue working where you left off.

Adding folders to a project is necessary for Goto Anything and project-wide Goto Definition.

There is always an active project, even if you haven't created or opened one. In this situation, you are working with an anonymous project, which has limited functionality. New windows always use an anonymous project when they first open.

Project metadata is stored in JSON files with a .sublime-project extension. Wherever there's a .sublime-project file, you will find an ancillary .sublime-workspace file too. The .sublime-workspace file contains session data that you should never edit. (More on workspaces later.)

Note

Generally speaking, it's fine to commit .sublime-project files to a source code repository, but always be mindful of what you store in them.

Creating a Project

Start with an anonymous project by opening a new window or closing any active project with the Project → Close Project menu.

You can add and remove folders to/from a project using the Project menu or the side bar's context menu. If you drag a folder onto a Sublime Text window, it will be added to the project too.

To save an anonymous project, go to Project → Save Project As....

After the project is saved, you can edit it by hand to adjust further options.

Opening Projects

Using the main menu, you can open or switch projects by selecting Project → Open Recent, Project → Switch Project… or Project → Quick Switch Project….

When switching projects, Sublime Text will close the current project and open the specified one in the same window, When opening a project, Sublime Text will open a new window and open the selected project there.

Keyboard shortcuts related to projects:

DescriptionShortcut
Quick Switch Project…Ctrl + Alt + P

Note

The key binding was removed with build 3096 for Windows and must be added manually, if desired. In order to do this, add the following key binding to your user key bindings file:

json
{ "keys": ["ctrl+alt+p"], "command": "prompt_select_workspace" }

Additionally, you can open a project from the command line by passing the .sublime-project file as an argument to the subl command line helper included with Sublime Text.

Advanced Configuration for Project Files

Along with more options for individual directories, projects can have specific build systems or settings overrides.

See Also

Projects - Reference : Documentation on project file format and options.

binary_file_patterns : A list of wildcards. Files matching these wildcards will show up in the side bar, but will be excluded from Goto Anything and Find in Files.

Workspaces

Workspaces hold session data associated with a project, which includes information about the opened files, pane layout, find history and more. A project can have multiple workspaces.

A common use case for workspaces is to work on different features within the same project, where each feature requires a different set of files to be open, and you want to switch between features quickly. In this case you'll want to have a second workspace available. Writing tests could be an example for this.

Workspaces behave very much like projects. To create a new workspace, select Project → New Workspace for Project. To save the active workspace, select Project → Save Workspace As....

The workspace metadata is stored in JSON files with the .sublime-workspace extension, which you are not supposed to edit.

To switch between different workspaces, use Ctrl Alt P, exactly as you do with projects.

As with projects, you can open a workspace from the command line by passing the desired .sublime-workspace file as an argument to the subl command line helper included with Sublime Text.

WARNING

Unlike .sublime-project files, .sublime-workspace files are not meant to be shared or edited manually. You should never commit .sublime-workspace files into a source code repository.

+ \ No newline at end of file diff --git a/guide/usage/search-and-replace.html b/guide/usage/search-and-replace.html index 06e34fe6..b0405e23 100644 --- a/guide/usage/search-and-replace.html +++ b/guide/usage/search-and-replace.html @@ -6,13 +6,13 @@ Search and Replace | Sublime Text Community Documentation - + - + @@ -26,8 +26,8 @@ -
Skip to content

Search and Replace

Sublime Text features two main types of search:

Both support regular expressions, a powerful tool for searching and replacing text.

Single File

Searching

Keyboard shortcuts related to the search panel:

DescriptionShortcut
Open search panelCtrl F
Toggle regular expressionsAlt R
Toggle case sensitivityAlt C
Toggle exact matchAlt W
Find next
Find previous 
Find allAlt 

Keyboard shortcuts related to the incremental search panel:

DescriptionShortcut
Open incremental search panelCtrl I
Toggle regular expressionsAlt R
Toggle case sensitivityAlt C
Toggle exact matchAlt W
Find next
Find previous 
Find allAlt 

The only difference between this panel and the regular search panel lies in the behavior of the key. In incremental searches, it will select the next match in the file and dismiss the search panel for you. Choosing between this panel or the regular search panel is a matter of preference.

Replacing Text

Keyboard shortcuts related to the replace panel:

DescriptionShortcut
Open replace panelCtrl H
Replace nextCtrl  H
Replace allCtrl Alt 

Tips

Other Ways of Searching in Files

Goto Anything provides the # operator to search in the filtered file.

These key bindings work when the search panel is hidden:

DescriptionShortcut
Search forward using most recent patternF3
Search backwards using most recent pattern F3
Select all matches using most recent patternAlt F3

You can also perform searches based on the current selection:

DescriptionShortcut
Search using current selectionCtrl E
Replace using current selectionCtrl  E

You can type in multiline search patterns into search panels. To enter newline characters, press Ctrl .

Mutiline Replace

Note that search panels are resizable too.

Multiple Files

Searching

Keyboard shortcuts related to Find in Files:

DescriptionShortcut
Open Find in FilesCtrl  F
Toggle regular expressionsAlt R
Toggle case sensitivityAlt C
Toggle exact matchesAlt W
Find nextEnter

Search Scope

The Where field in Find in Files limits the search scope. You can define scopes in several ways:

  • Adding individual directories (Unix-style paths, even on Windows)
  • Adding/excluding files based on wildcards
  • Adding symbolic locations (<open folders>, <open files>...)

It is also possible to combine these filters using commas; for example:

Search Patterns

Press the ... button in the search panel to display a menu containing scope options.

Results Format

In the search panel, you can customize how results are displayed. These are the available options:

  • Show in separate view
  • Show context

Search Results

If the search yields matches, you can move through the sequence using the following key bindings:

DescriptionShortcut
Next matchF4
Previous match F4
Open match

You can also double-click on lines with a match.

Regular Expressions

Regular Expressions find complex patterns in text. To take full advantage of the search and replace facilities in Sublime Text, you should at least learn the basics of regular expressions. In this guide we won't explain how to use regular expressions.

The term regular expression is usually shortened to regexp or regex.

This is how a regex might look:

(?:Sw|P)i(?:tch|s{2})\s(?:it\s)?of{2}!

To use regular expressions in Sublime Text, you first need to activate them in the various search panels. Otherwise, search terms will be interpreted literally.

Search and Replace

Sublime Text uses the Perl Compatible Regular Expressions (PCRE) engine from the Boost library.

See Also

Boost library documentation for regular expressions : Documentation on regular expressions.

Boost library documentation for format strings : Documentation on format strings. Note that Sublime Text additionally interprets \\{n} as ${n}.

- +
Skip to content

Search and Replace

Sublime Text features two main types of search:

Both support regular expressions, a powerful tool for searching and replacing text.

Single File

Searching

Keyboard shortcuts related to the search panel:

DescriptionShortcut
Open search panelCtrl F
Toggle regular expressionsAlt R
Toggle case sensitivityAlt C
Toggle exact matchAlt W
Find next
Find previous 
Find allAlt 

Keyboard shortcuts related to the incremental search panel:

DescriptionShortcut
Open incremental search panelCtrl I
Toggle regular expressionsAlt R
Toggle case sensitivityAlt C
Toggle exact matchAlt W
Find next
Find previous 
Find allAlt 

The only difference between this panel and the regular search panel lies in the behavior of the key. In incremental searches, it will select the next match in the file and dismiss the search panel for you. Choosing between this panel or the regular search panel is a matter of preference.

Replacing Text

Keyboard shortcuts related to the replace panel:

DescriptionShortcut
Open replace panelCtrl H
Replace nextCtrl  H
Replace allCtrl Alt 

Tips

Other Ways of Searching in Files

Goto Anything provides the # operator to search in the filtered file.

These key bindings work when the search panel is hidden:

DescriptionShortcut
Search forward using most recent patternF3
Search backwards using most recent pattern F3
Select all matches using most recent patternAlt F3

You can also perform searches based on the current selection:

DescriptionShortcut
Search using current selectionCtrl E
Replace using current selectionCtrl  E

You can type in multiline search patterns into search panels. To enter newline characters, press Ctrl .

Mutiline Replace

Note that search panels are resizable too.

Multiple Files

Searching

Keyboard shortcuts related to Find in Files:

DescriptionShortcut
Open Find in FilesCtrl  F
Toggle regular expressionsAlt R
Toggle case sensitivityAlt C
Toggle exact matchesAlt W
Find nextEnter

Search Scope

The Where field in Find in Files limits the search scope. You can define scopes in several ways:

  • Adding individual directories (Unix-style paths, even on Windows)
  • Adding/excluding files based on wildcards
  • Adding symbolic locations (<open folders>, <open files>...)

It is also possible to combine these filters using commas; for example:

Search Patterns

Press the ... button in the search panel to display a menu containing scope options.

Results Format

In the search panel, you can customize how results are displayed. These are the available options:

  • Show in separate view
  • Show context

Search Results

If the search yields matches, you can move through the sequence using the following key bindings:

DescriptionShortcut
Next matchF4
Previous match F4
Open match

You can also double-click on lines with a match.

Regular Expressions

Regular Expressions find complex patterns in text. To take full advantage of the search and replace facilities in Sublime Text, you should at least learn the basics of regular expressions. In this guide we won't explain how to use regular expressions.

The term regular expression is usually shortened to regexp or regex.

This is how a regex might look:

(?:Sw|P)i(?:tch|s{2})\s(?:it\s)?of{2}!

To use regular expressions in Sublime Text, you first need to activate them in the various search panels. Otherwise, search terms will be interpreted literally.

Search and Replace

Sublime Text uses the Perl Compatible Regular Expressions (PCRE) engine from the Boost library.

See Also

Boost library documentation for regular expressions : Documentation on regular expressions.

Boost library documentation for format strings : Documentation on format strings. Note that Sublime Text additionally interprets \\{n} as ${n}.

+ \ No newline at end of file diff --git a/hashmap.json b/hashmap.json index ea4e173c..d91a9ffe 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"glossary.md":"IoE161Qp","guide_customization_menus.md":"aQLYla-u","contributing.md":"JNY_mCxi","guide_usage_build-systems.md":"7hUFEMc8","guide_getting-started_installation.md":"xQ0l5kUs","guide_index.md":"kY34JmTT","guide_usage_editing.md":"S0h4lqqn","guide_usage_file-management_index.md":"bApegwB0","guide_usage_file-management_navigation.md":"0p963Cri","guide_usage_search-and-replace.md":"A5Ru6blb","reference_color_schemes_legacy.md":"srh9jHBN","guide_extensibility_commands.md":"VqQYHsyV","guide_extensibility_plugins_input_handlers.md":"temQxa84","reference_commands.md":"riK0ex_J","reference_menus.md":"hQYWrLru","guide_customization_color_schemes.md":"7lrTkUoC","guide_extensibility_syntaxdefs.md":"R2Aw3-WM","reference_keyboard_shortcuts_win.md":"9eDwNeRU","other_question.md":"lmnUHqXN","index.md":"fIw7cd8u","guide_extensibility_completions.md":"jFjMsa_P","guide_extensibility_command_palette.md":"nOvsifqC","reference_comments.md":"FzDTffi2","guide_extensibility_snippets.md":"vLzwQQiE","guide_extensibility_packages.md":"jI282U2z","reference_index.md":"5ym4GuWZ","reference_metadata.md":"DqdXp5sB","reference_mouse_bindings.md":"vweUacWW","reference_key_bindings.md":"aRVdPX8Y","reference_plugins.md":"ntaE7vcS","guide_extensibility_plugins_index.md":"qAJg8hrm","guide_extensibility_macros.md":"rjW-s84S","guide_customization_key_bindings.md":"VopMvquC","reference_command_palette.md":"encBsH8h","reference_keyboard_shortcuts_osx.md":"_UKInUPX","reference_python_api.md":"atI6Thij","guide_customization_settings.md":"JypFhw0q","reference_syntaxdefs_legacy.md":"rHCEsfbY","backers.md":"ubkaXlAg","reference_projects.md":"6jFyUGxQ","reference_completions.md":"dAoa8r2o","guide_usage_file-management_projects.md":"OEzFsdpY","guide_getting-started_basic-concepts.md":"99oXwwUb","reference_symbols.md":"TjYzk43K","reference_settings.md":"CD7b_OSJ"} +{"guide_extensibility_completions.md":"aGyOSXlO","guide_extensibility_plugins_index.md":"A-pg61q2","guide_extensibility_command_palette.md":"n18YI6ic","backers.md":"bWg8umWw","guide_usage_editing.md":"fI14jcHZ","reference_color_schemes_legacy.md":"DBAqIbKE","other_question.md":"KGHgF6su","guide_getting-started_basic-concepts.md":"Cdmunr1A","guide_extensibility_plugins_input_handlers.md":"uGNjntNQ","reference_command_palette.md":"6osWM5j9","guide_extensibility_snippets.md":"C5KSEI6v","reference_python_api.md":"N8o2lw1s","reference_completions.md":"yYhZHeJr","reference_index.md":"QPkQ1nWf","reference_mouse_bindings.md":"lxpYH4mL","reference_projects.md":"keXLkGTk","reference_metadata.md":"436MM5vk","reference_keyboard_shortcuts_win.md":"2W6q_BNW","guide_customization_key_bindings.md":"h1oO1BZ2","glossary.md":"BLHmERQ3","reference_keyboard_shortcuts_osx.md":"YWxghirF","reference_menus.md":"eLErO9Gt","guide_customization_color_schemes.md":"TQRO_IWD","guide_usage_file-management_projects.md":"oJxgU_Ro","guide_extensibility_macros.md":"fwrCmHxA","contributing.md":"K-hq0rsP","guide_customization_menus.md":"uuRhXsWO","guide_extensibility_packages.md":"ch6hFOX-","guide_customization_settings.md":"43PLThv_","index.md":"G8JQ3VSK","guide_extensibility_syntaxdefs.md":"of0BVWuM","guide_index.md":"Fs8iElNf","guide_extensibility_commands.md":"vIZiuU2z","guide_getting-started_installation.md":"FpPDrf_W","guide_usage_build-systems.md":"Np-FpCbs","reference_comments.md":"C6uA-pVp","guide_usage_file-management_index.md":"3T-rFP3g","reference_key_bindings.md":"FocxM_HK","reference_settings.md":"JAvsN6m2","reference_plugins.md":"_92VSgfX","guide_usage_search-and-replace.md":"h_cG0MEn","reference_commands.md":"uDHhfyWI","guide_usage_file-management_navigation.md":"BOTCf4_c","reference_symbols.md":"rVZM5-IJ","reference_syntaxdefs_legacy.md":"lDaXKVmv"} diff --git a/index.html b/index.html index 6718871d..19427e04 100644 --- a/index.html +++ b/index.html @@ -6,13 +6,13 @@ Sublime Text Community Documentation | Sublime Text Community Documentation - + - + @@ -29,8 +29,8 @@ -
Skip to content

Sublime Text

Community-driven Documentation

Documenting the Sublime Text editor and accompanying its official documentation.

Sublime Community Documentation Logo

Contributors (76)

Ultra-Instinct-05

Ultra-Instinct-05

Contributor

tradesmanhelix

tradesmanhelix

Contributor

appsforartists

appsforartists

Contributor

georgePadolsey

georgePadolsey

Contributor

johnberberich

johnberberich

Contributor

jonathanstiansen

jonathanstiansen

Contributor

PetrKryslUCSD

PetrKryslUCSD

Contributor

pranav-kale-01

pranav-kale-01

Contributor

praveenscience

praveenscience

Contributor

dependabot[bot]

dependabot[bot]

Contributor

- +
Skip to content

Sublime Text

Community-driven Documentation

Documenting the Sublime Text editor and accompanying its official documentation.

Sublime Community Documentation Logo

Contributors (76)

Ultra-Instinct-05

Ultra-Instinct-05

Contributor

tradesmanhelix

tradesmanhelix

Contributor

appsforartists

appsforartists

Contributor

georgePadolsey

georgePadolsey

Contributor

johnberberich

johnberberich

Contributor

jonathanstiansen

jonathanstiansen

Contributor

PetrKryslUCSD

PetrKryslUCSD

Contributor

pranav-kale-01

pranav-kale-01

Contributor

praveenscience

praveenscience

Contributor

dependabot[bot]

dependabot[bot]

Contributor

+ \ No newline at end of file diff --git a/other/question.html b/other/question.html index 5742b6c1..00a49536 100644 --- a/other/question.html +++ b/other/question.html @@ -6,13 +6,13 @@ FAQ | Sublime Text Community Documentation - + - + @@ -26,8 +26,8 @@ -
Skip to content

FAQ

TIP

We have collected some usual questions here. If you don't find the answer you want here, please feel free to reach out on the Sublime Discord

1. Sample Question?

  1. Answer 1
- +
Skip to content

FAQ

TIP

We have collected some usual questions here. If you don't find the answer you want here, please feel free to reach out on the Sublime Discord

1. Sample Question?

  1. Answer 1
+ \ No newline at end of file diff --git a/reference/color_schemes_legacy.html b/reference/color_schemes_legacy.html index df421633..5c4a3abe 100644 --- a/reference/color_schemes_legacy.html +++ b/reference/color_schemes_legacy.html @@ -6,13 +6,13 @@ Color Schemes (Legacy) | Sublime Text Community Documentation - + - + @@ -66,8 +66,8 @@ </dict> ... </array>

name : Descriptive name of the item.

scope : Target scope name.

settings : Container for settings. Valid settings are:

fontStyle : Space-separated list of styles for the font.

Options: `bold`, `italic`, nothing (resets fontStyle to normal)
-

foreground : Foreground color.

background : Background color.

Minimal Scope Coverage

Refer to the official Scope Naming guidelines in order to find out which scopes a color scheme should cover at minimum.

View Settings

color_scheme : Path to a color scheme file relative to the Data folder (example: Packages/Color Scheme - Default/Monokai.tmTheme).

- +

foreground : Foreground color.

background : Background color.

Minimal Scope Coverage

Refer to the official Scope Naming guidelines in order to find out which scopes a color scheme should cover at minimum.

View Settings

color_scheme : Path to a color scheme file relative to the Data folder (example: Packages/Color Scheme - Default/Monokai.tmTheme).

+ \ No newline at end of file diff --git a/reference/command_palette.html b/reference/command_palette.html index e98a0caa..c72afccb 100644 --- a/reference/command_palette.html +++ b/reference/command_palette.html @@ -6,13 +6,13 @@ Command Palette | Sublime Text Community Documentation - + - + @@ -45,8 +45,8 @@ { "caption": "Permute Lines: Reverse", "command": "permute_lines", "args": {"operation": "reverse"} }, { "caption": "Permute Lines: Unique", "command": "permute_lines", "args": {"operation": "unique"} }, { "caption": "Permute Lines: Shuffle", "command": "permute_lines", "args": {"operation": "shuffle"} }, -]

caption : Text for display in the command palette.

command : Command to be executed.

args : Arguments to pass to command.

Note that the special snippet-like variable ${packages} is only interpreted by certain :command:commands:.

How to Use the Command Palette

  1. Press Ctrl  P
  2. Select command

Entries are filtered by current context. Not all entries will be visible at all times.

- +]

caption : Text for display in the command palette.

command : Command to be executed.

args : Arguments to pass to command.

Note that the special snippet-like variable ${packages} is only interpreted by certain :command:commands:.

How to Use the Command Palette

  1. Press Ctrl  P
  2. Select command

Entries are filtered by current context. Not all entries will be visible at all times.

+ \ No newline at end of file diff --git a/reference/commands.html b/reference/commands.html index 8e642968..45f15630 100644 --- a/reference/commands.html +++ b/reference/commands.html @@ -6,13 +6,13 @@ Commands Overview | Sublime Text Community Documentation - + - + @@ -43,8 +43,8 @@ {"command": "command2", "args": {"arg1": "value1", "arg2": "value2"}} ] } -}

clear_bookmarks

If no name argument, or the name "bookmarks" is specified, it removes all bookmarks set in the current file, but not the marks. If the name "mark" is specified as an argument, it removes all marks set in the current file, but not the bookmarks.

clear_fields

Breaks out of the active snippet field cycle.

clear_recent_files

Deletes records of recently accessed files and folders.

clear_recent_projects

Deletes records of recently accessed projects.

clone_file

Clones the current view into the same tab group, both sharing the same buffer. That means you can drag one tab to another group and every update to one view will be visible in the other one too.

close_file

Closes the active view and, under certain circumsances, the whole application.

close_folder_list

Removes all folders from the current project.

close_project

Closes the current project.

close_tag

Surrounds the current inner text with the appropiate tags.

close_window

Closes the active window.

close

Closes the active view.

commit_completion

Inserts into the buffer the item that's currently selected in the auto complete list.

context_menu

Shows the context menu.

copy

Sends the selected text to to the system clipboard.

cut

Removes the selected text and sends it to the system clipboard. Put differently, it cuts.

decrease_font_size

Decreases the font size.

delete_to_mark

Deletes the text that select_to_mark would select.

detect_indentation

Guesses the indentation from the current file.

duplicate_line

Duplicates the current line.

exec

Runs an external process asynchronously. On Windows, GUIs are supressed.

exec is the default command used by build systems, thus it provides similar functionality. However, a few options in build systems are taken care of by Sublime Text internally so they list below only contains parameters accepted by this command.

See Also

exec Target options : Detailed documentation on all parameters of the exec command.

exit

Exits the whole application with all open windows.

expand_selection

Extends the selection up to predefined limits.

expand_tabs

XXX

find_all_under

Finds all occurrences of the current selection or the current word.

find_next

Finds the next occurrence of the current search term.

find_prev

Finds the previous occurrence of the current search term.

find_under_expand_skip

Adds a new selection based on the current selection or expands the selection to the current word while removing the current selection.

find_under_expand

Adds a new selection based on the current selection or expands the selection to the current word.

find_under_prev

Finds the previous occurrence of the current selection or the current word.

find_under

Finds the next occurrence of the current selection or the current word.

focus_group

Gives focus to the top-most file in the specified group.

fold_by_level

Scans the whole file and folds everything with an indentation level of level or higher. This does not unfold already folded regions if you first fold by level 2 and then by 3, for example. Sections with cursors are not folded.

fold_tag_attributes

Folds all tag attributes in XML files, only leaving the tag's name and the closing bracket visible.

fold

Folds the current selection and displays instead. Unfold arrows are added to the lines where a region has been folded.

hide_auto_complete

Hides the auto complete list.

hide_overlay

Hides the active overlay. Show the overlay using the show_overlay command.

hide_panel

Hides the active panel.

increase_font_size

Increases the font size.

indent

Increments indentation of selection.

insert_best_completion

Inserts the best completion that can be inferred from the current context.

insert_snippet

Inserts a snippet from a string or .sublime-snippet file.

See Also

Snippets

Documentation on snippets and their variable features.

insert

Inserts a string.

join_lines

Joins the current line with the next one.

left_delete

Deletes the character right before the caret.

lower_case

Makes the selection lower case.

move_to_group

Moves the current file to the specified group.

move_to

Advances the caret to predefined locations.

move

Advances the caret by predefined units.

new_build_system

Creates a new buffer and inserts a build system template.

new_plugin

Creates a new buffer and inserts a plugin template (a text command).

new_snippet

Creates a new buffer and inserts a snippet template.

new_window

Opens a new window.

next_bookmark

Select the next bookmarked region.

next_field

Advances the caret to the text snippet field in the current snippet field cycle.

next_misspelling

Advance to the next misspelling

next_result

Advance to the next captured result.

next_view_in_stack

Switches to the most recently active view.

next_view

Switches to the next view.

open_dir

Opens the specified directory with the default file manager.

open_file_settings

Opens the syntax-specific user settings file for the current syntax.

open_file

Opens the specified file. Will dynamically open resource files from sublime-package archives as read-only if the specified override file does not exist.

open_recent_file

Opens a recently closed file.

open_recent_folder

Opens a recently closed folder.

open_recent_project

Opens a recently closed project.

open_url

Opens the specified url with the default browser.

paste_and_indent

Inserts the clipboard contents after the caret and indents contextually.

paste

Inserts the clipboard contents after the caret.

permute_lines

XXX

permute_selection

XXX

prev_bookmark

Select the previous bookmarked region.

prev_field

Moves the caret to the previous snippet field in the current snippet field cycle.

prev_misspelling

Move to the previous misspelling.

prev_result

Move to the previous captured result.

prev_view_in_stack

Switches to the view that was active before the most recently active view.

prev_view

Switches to the previous view.

prompt_add_folder

Prompts for a folder to add to the current project.

prompt_open_project

Prompts for a project file to open as a project.

prompt_save_as

Prompts for a new file name and saves the active file.

prompt_select_project

Opens a popup with recently accessed projects where you can fuzzy-search.

redo_or_repeat

Performs the latest action again.

redo

Reapplies the latest undone action.

refresh_folder_list

Reloads all folders in the current project and updates the side bar.

reindent

Corrects indentation of the selection with regular expressions set in the syntax's preferences. The base indentation will be that of the line before the first selected line. Sometimes does not work as expected.

reopen_last_file

Reopens the last closed file.

reopen

Reopens the current file.

replace_completion_with_auto_complete

XXX

replace_completion_with_next_completion

reset_font_size

Resets the font size to the default

Note: This essentially removes the entry from your User settings, there might be other places where this has been "changed".

revert

Undoes all unsaved changes to the file.

right_delete

Deletes the character right after the caret.

run_macro_file

Runs a .sublime-macro file.

run_macro

Runs the macro stored in the macro buffer.

save_all

Saves all open files.

save_macro

Prompts for a file path to save the macro in the macro buffer to.

save_project_as

Prompts for a new file name and saves the current project.

save

Saves the active file.

scroll_lines

Scrolls lines in the view.

amount [Float]: Positive values scroll lines down and negative values scroll lines up.

select_all_bookmarks

Selects all bookmarked regions.

select_all

Select the view's content.

select_bookmark

Selects a bookmarked region in the current file.

select_by_index

Focuses a certain tab in the current group.

select_lines

Adds a line to the current selection.

select_to_mark

Selects the text between the current position of each one of the current carets and the marked position. Each caret is matched with each mark in order of occurrence, and is moved to the beginning of its selection.

If any number of selections overlap, they are joined and, of all the carets corresponding to each one of the joined selections, only the one occurring first in the file is preserved.

If the number of current carets is less or equal to the number of marks, the remaining marks in order are ignored. Conversely, if currently there are more carets than marks, the first relevant selections are produced. Of all extra marks, those contained in the selections are removed, and the rest of them are left where they are, without triggering a selection from their position.

set_build_system

Changes the current build system.

set_layout

Changes the group layout of the current window. This command uses the same pattern as Window.set_layout, see there for a list and explanation of parameters.

set_line_ending

Changes the line endings of the current file.

set_mark

Marks the position of each caret in the current file. If any marks have already been set in that file, they are removed.

set_setting

Set the value of a setting. This value is view-specific.

show_about_window

I think you know what this does.

show_at_center

Scrolls the view to show the selected line in the middle of the view and adjusts the horizontal scrolling if necessary.

show_overlay

Shows the requested overlay. Use the #### hide_overlay command to hide it.

show_panel

Shows a panel.

show_scope_name

Shows the name for the caret's scope in the status bar.

single_selection

Collapses multiple selections into a single selection.

slurp_find_string

Copies the current selection or word into the "find" field of the find panel.

slurp_replace_string

Copies the current selection or word into the "replace" field of the find and replace panel.

soft_redo

Redoes each action stepping through granular edits.

soft_undo

Undoes each action stepping through granular edits.

sort_lines

Sorts lines.

sort_selection

Sorts lines in selection.

split_selection_into_lines

Splits the selection into multiple selections, one on each line.

swap_case

Swaps the case of each character in the selection.

swap_line_down

Swaps the current line with the line below.

swap_line_up

Swaps the current line with the line above.

swap_with_mark

Marks all the current carets' positions, removes those carets, and sets new carets at the previously marked positions, if any.

switch_file

Switches between two files with the same name and different extensions.

title_case

Capitalizes the selection's first character and turns the rest into lower case.

toggle_bookmark

Sets or unsets a bookmark for the active region(s). (Bookmarks can be accessed via the regions API using "bookmarks" as the key.)

toggle_comment

Comments or uncomments the active lines, if available.

toggle_distraction_free

Toggles distraction free mode on or off.

toggle_full_screen

Toggles full screen mode on or off.

toggle_minimap

Shows or hides the minimap.

toggle_overwrite

Toggles overwriting on or off.

toggle_record_macro

Starts or stops the macro recorder.

toggle_save_all_on_build

Toggles whether all open files should be saved before starting the build.

toggle_setting

Toggles the value of a boolean setting. This value is view-specific.

toggle_show_open_files

Shows ot hides the open files in the sidebar.

toggle_side_bar

Shows or hides the sidebar.

toggle_status_bar

Shows or hides the status bar.

toggle_tabs

Shows or hides the tab bar.

transpose

Makes selections or characters swap places.

With selection: The contents of the selected regions are circulated. Without selection: Swaps adjacent characters and moves the caret forward by 1.

undo

Undoes the latest action.

unexpand_tabs

XXX

unfold_all

Unfolds all folded regions.

unfold

Unfolds all folded regions in the selection or the current line if there is none.

unindent

Unindents selection.

upper_case

Makes the selection upper case.

wrap_lines

Wraps lines. By default, it wraps lines at the first ruler's column.

yank

XXX

Discovering Commands

There are several ways to discover a command's name in order to use it as a key binding, in a macro, as a menu entry or in a plugin.

- +}

clear_bookmarks

If no name argument, or the name "bookmarks" is specified, it removes all bookmarks set in the current file, but not the marks. If the name "mark" is specified as an argument, it removes all marks set in the current file, but not the bookmarks.

clear_fields

Breaks out of the active snippet field cycle.

clear_recent_files

Deletes records of recently accessed files and folders.

clear_recent_projects

Deletes records of recently accessed projects.

clone_file

Clones the current view into the same tab group, both sharing the same buffer. That means you can drag one tab to another group and every update to one view will be visible in the other one too.

close_file

Closes the active view and, under certain circumsances, the whole application.

close_folder_list

Removes all folders from the current project.

close_project

Closes the current project.

close_tag

Surrounds the current inner text with the appropiate tags.

close_window

Closes the active window.

close

Closes the active view.

commit_completion

Inserts into the buffer the item that's currently selected in the auto complete list.

context_menu

Shows the context menu.

copy

Sends the selected text to to the system clipboard.

cut

Removes the selected text and sends it to the system clipboard. Put differently, it cuts.

decrease_font_size

Decreases the font size.

delete_to_mark

Deletes the text that select_to_mark would select.

detect_indentation

Guesses the indentation from the current file.

duplicate_line

Duplicates the current line.

exec

Runs an external process asynchronously. On Windows, GUIs are supressed.

exec is the default command used by build systems, thus it provides similar functionality. However, a few options in build systems are taken care of by Sublime Text internally so they list below only contains parameters accepted by this command.

See Also

exec Target options : Detailed documentation on all parameters of the exec command.

exit

Exits the whole application with all open windows.

expand_selection

Extends the selection up to predefined limits.

expand_tabs

XXX

find_all_under

Finds all occurrences of the current selection or the current word.

find_next

Finds the next occurrence of the current search term.

find_prev

Finds the previous occurrence of the current search term.

find_under_expand_skip

Adds a new selection based on the current selection or expands the selection to the current word while removing the current selection.

find_under_expand

Adds a new selection based on the current selection or expands the selection to the current word.

find_under_prev

Finds the previous occurrence of the current selection or the current word.

find_under

Finds the next occurrence of the current selection or the current word.

focus_group

Gives focus to the top-most file in the specified group.

fold_by_level

Scans the whole file and folds everything with an indentation level of level or higher. This does not unfold already folded regions if you first fold by level 2 and then by 3, for example. Sections with cursors are not folded.

fold_tag_attributes

Folds all tag attributes in XML files, only leaving the tag's name and the closing bracket visible.

fold

Folds the current selection and displays instead. Unfold arrows are added to the lines where a region has been folded.

hide_auto_complete

Hides the auto complete list.

hide_overlay

Hides the active overlay. Show the overlay using the show_overlay command.

hide_panel

Hides the active panel.

increase_font_size

Increases the font size.

indent

Increments indentation of selection.

insert_best_completion

Inserts the best completion that can be inferred from the current context.

insert_snippet

Inserts a snippet from a string or .sublime-snippet file.

See Also

Snippets

Documentation on snippets and their variable features.

insert

Inserts a string.

join_lines

Joins the current line with the next one.

left_delete

Deletes the character right before the caret.

lower_case

Makes the selection lower case.

move_to_group

Moves the current file to the specified group.

move_to

Advances the caret to predefined locations.

move

Advances the caret by predefined units.

new_build_system

Creates a new buffer and inserts a build system template.

new_plugin

Creates a new buffer and inserts a plugin template (a text command).

new_snippet

Creates a new buffer and inserts a snippet template.

new_window

Opens a new window.

next_bookmark

Select the next bookmarked region.

next_field

Advances the caret to the text snippet field in the current snippet field cycle.

next_misspelling

Advance to the next misspelling

next_result

Advance to the next captured result.

next_view_in_stack

Switches to the most recently active view.

next_view

Switches to the next view.

open_dir

Opens the specified directory with the default file manager.

open_file_settings

Opens the syntax-specific user settings file for the current syntax.

open_file

Opens the specified file. Will dynamically open resource files from sublime-package archives as read-only if the specified override file does not exist.

open_recent_file

Opens a recently closed file.

open_recent_folder

Opens a recently closed folder.

open_recent_project

Opens a recently closed project.

open_url

Opens the specified url with the default browser.

paste_and_indent

Inserts the clipboard contents after the caret and indents contextually.

paste

Inserts the clipboard contents after the caret.

permute_lines

XXX

permute_selection

XXX

prev_bookmark

Select the previous bookmarked region.

prev_field

Moves the caret to the previous snippet field in the current snippet field cycle.

prev_misspelling

Move to the previous misspelling.

prev_result

Move to the previous captured result.

prev_view_in_stack

Switches to the view that was active before the most recently active view.

prev_view

Switches to the previous view.

prompt_add_folder

Prompts for a folder to add to the current project.

prompt_open_project

Prompts for a project file to open as a project.

prompt_save_as

Prompts for a new file name and saves the active file.

prompt_select_project

Opens a popup with recently accessed projects where you can fuzzy-search.

redo_or_repeat

Performs the latest action again.

redo

Reapplies the latest undone action.

refresh_folder_list

Reloads all folders in the current project and updates the side bar.

reindent

Corrects indentation of the selection with regular expressions set in the syntax's preferences. The base indentation will be that of the line before the first selected line. Sometimes does not work as expected.

reopen_last_file

Reopens the last closed file.

reopen

Reopens the current file.

replace_completion_with_auto_complete

XXX

replace_completion_with_next_completion

reset_font_size

Resets the font size to the default

Note: This essentially removes the entry from your User settings, there might be other places where this has been "changed".

revert

Undoes all unsaved changes to the file.

right_delete

Deletes the character right after the caret.

run_macro_file

Runs a .sublime-macro file.

run_macro

Runs the macro stored in the macro buffer.

save_all

Saves all open files.

save_macro

Prompts for a file path to save the macro in the macro buffer to.

save_project_as

Prompts for a new file name and saves the current project.

save

Saves the active file.

scroll_lines

Scrolls lines in the view.

amount [Float]: Positive values scroll lines down and negative values scroll lines up.

select_all_bookmarks

Selects all bookmarked regions.

select_all

Select the view's content.

select_bookmark

Selects a bookmarked region in the current file.

select_by_index

Focuses a certain tab in the current group.

select_lines

Adds a line to the current selection.

select_to_mark

Selects the text between the current position of each one of the current carets and the marked position. Each caret is matched with each mark in order of occurrence, and is moved to the beginning of its selection.

If any number of selections overlap, they are joined and, of all the carets corresponding to each one of the joined selections, only the one occurring first in the file is preserved.

If the number of current carets is less or equal to the number of marks, the remaining marks in order are ignored. Conversely, if currently there are more carets than marks, the first relevant selections are produced. Of all extra marks, those contained in the selections are removed, and the rest of them are left where they are, without triggering a selection from their position.

set_build_system

Changes the current build system.

set_layout

Changes the group layout of the current window. This command uses the same pattern as Window.set_layout, see there for a list and explanation of parameters.

set_line_ending

Changes the line endings of the current file.

set_mark

Marks the position of each caret in the current file. If any marks have already been set in that file, they are removed.

set_setting

Set the value of a setting. This value is view-specific.

show_about_window

I think you know what this does.

show_at_center

Scrolls the view to show the selected line in the middle of the view and adjusts the horizontal scrolling if necessary.

show_overlay

Shows the requested overlay. Use the #### hide_overlay command to hide it.

show_panel

Shows a panel.

show_scope_name

Shows the name for the caret's scope in the status bar.

single_selection

Collapses multiple selections into a single selection.

slurp_find_string

Copies the current selection or word into the "find" field of the find panel.

slurp_replace_string

Copies the current selection or word into the "replace" field of the find and replace panel.

soft_redo

Redoes each action stepping through granular edits.

soft_undo

Undoes each action stepping through granular edits.

sort_lines

Sorts lines.

sort_selection

Sorts lines in selection.

split_selection_into_lines

Splits the selection into multiple selections, one on each line.

swap_case

Swaps the case of each character in the selection.

swap_line_down

Swaps the current line with the line below.

swap_line_up

Swaps the current line with the line above.

swap_with_mark

Marks all the current carets' positions, removes those carets, and sets new carets at the previously marked positions, if any.

switch_file

Switches between two files with the same name and different extensions.

title_case

Capitalizes the selection's first character and turns the rest into lower case.

toggle_bookmark

Sets or unsets a bookmark for the active region(s). (Bookmarks can be accessed via the regions API using "bookmarks" as the key.)

toggle_comment

Comments or uncomments the active lines, if available.

toggle_distraction_free

Toggles distraction free mode on or off.

toggle_full_screen

Toggles full screen mode on or off.

toggle_minimap

Shows or hides the minimap.

toggle_overwrite

Toggles overwriting on or off.

toggle_record_macro

Starts or stops the macro recorder.

toggle_save_all_on_build

Toggles whether all open files should be saved before starting the build.

toggle_setting

Toggles the value of a boolean setting. This value is view-specific.

toggle_show_open_files

Shows ot hides the open files in the sidebar.

toggle_side_bar

Shows or hides the sidebar.

toggle_status_bar

Shows or hides the status bar.

toggle_tabs

Shows or hides the tab bar.

transpose

Makes selections or characters swap places.

With selection: The contents of the selected regions are circulated. Without selection: Swaps adjacent characters and moves the caret forward by 1.

undo

Undoes the latest action.

unexpand_tabs

XXX

unfold_all

Unfolds all folded regions.

unfold

Unfolds all folded regions in the selection or the current line if there is none.

unindent

Unindents selection.

upper_case

Makes the selection upper case.

wrap_lines

Wraps lines. By default, it wraps lines at the first ruler's column.

yank

XXX

Discovering Commands

There are several ways to discover a command's name in order to use it as a key binding, in a macro, as a menu entry or in a plugin.

+ \ No newline at end of file diff --git a/reference/comments.html b/reference/comments.html index 86a3b9ac..5c66d73d 100644 --- a/reference/comments.html +++ b/reference/comments.html @@ -6,13 +6,13 @@ Comments | Sublime Text Community Documentation - + - + @@ -110,8 +110,8 @@ </array> </dict> </dict> -</plist>

Once comment metadata has been defined, you can use standard key bindings to comment and uncomment lines of code.

DescriptionShortcut
Toggle line commentCtrl /
Toggle block commentCtrl  /

To bind a shortcut to prefer a different comment variant, e.g., TM_COMMENT_START_3, add a variant argument to the toggle_comment command in your Default.sublime-keymap

json
{"keys":["ctrl+forward_slash"], "command":"toggle_comment","args":{"block":true, "variant":3}},
- +</plist>

Once comment metadata has been defined, you can use standard key bindings to comment and uncomment lines of code.

DescriptionShortcut
Toggle line commentCtrl /
Toggle block commentCtrl  /

To bind a shortcut to prefer a different comment variant, e.g., TM_COMMENT_START_3, add a variant argument to the toggle_comment command in your Default.sublime-keymap

json
{"keys":["ctrl+forward_slash"], "command":"toggle_comment","args":{"block":true, "variant":3}},
+ \ No newline at end of file diff --git a/reference/completions.html b/reference/completions.html index ef2494cd..d1f15375 100644 --- a/reference/completions.html +++ b/reference/completions.html @@ -6,13 +6,13 @@ Completions Files | Sublime Text Community Documentation - + - + @@ -38,8 +38,8 @@ }

scope : Determines when the completions list will be populated with this list of completions.

See Scopes for more information.

completions : Array of completions.

Types of Completions

Plain Strings

Plain strings are equivalent to an entry where the trigger is identical to the contents:

json
"foo"
 // is equivalent to:
 { "trigger": "foo", "contents": "foo" }

Trigger-based Completions

json
{ "trigger": "foo", "contents": "foobar" },
-{ "trigger": "foo\ttest", "contents": "foobar" }

trigger : Text that will be displayed in the completions list and will cause the contents to be inserted when chosen.

You can use a \t tab character to add an annotation for the preceding trigger. The annotation will be displayed right-aligned, slightly grayed and does not affect the trigger itself.

contents : Text to be inserted in the buffer. Supports the same string interpolation features as snippets.

Refer to Snippet Features.

TIP

If you want a literal $, you have to escape it like this: \\$ (double backslashes are needed because we are within a JSON string).

- +{ "trigger": "foo\ttest", "contents": "foobar" }

trigger : Text that will be displayed in the completions list and will cause the contents to be inserted when chosen.

You can use a \t tab character to add an annotation for the preceding trigger. The annotation will be displayed right-aligned, slightly grayed and does not affect the trigger itself.

contents : Text to be inserted in the buffer. Supports the same string interpolation features as snippets.

Refer to Snippet Features.

TIP

If you want a literal $, you have to escape it like this: \\$ (double backslashes are needed because we are within a JSON string).

+ \ No newline at end of file diff --git a/reference/index.html b/reference/index.html index 992ed011..2eb766cb 100644 --- a/reference/index.html +++ b/reference/index.html @@ -6,13 +6,13 @@ Reference | Sublime Text Community Documentation - + - + @@ -26,8 +26,8 @@ -
Skip to content

Reference

This section contains concise technical information about Sublime Texts configuration files, also called resource files. It is intended as a quick reference for advanced users.

- +
Skip to content

Reference

This section contains concise technical information about Sublime Texts configuration files, also called resource files. It is intended as a quick reference for advanced users.

+ \ No newline at end of file diff --git a/reference/key_bindings.html b/reference/key_bindings.html index d068e81d..732edec5 100644 --- a/reference/key_bindings.html +++ b/reference/key_bindings.html @@ -6,13 +6,13 @@ Key Bindings | Sublime Text Community Documentation - + - + @@ -33,8 +33,8 @@ { "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true }, { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true } ] -}

Structure of a Context

key : Name of the context whose value you want to query.

operator : Type of test to perform against key's value. Defaults to equal.

operand : The result returned by key is tested against this value.

match_all : Requires the test to succeed for all selections. Defaults to false.

Context Keys

Arbitrary keys may be provided by plugins. Thus, this section only features keys provided by Sublime Text itself.

auto_complete_visible : Returns true if the autocomplete list is visible.

has_next_field : Returns true if a next snippet field is available.

has_prev_field : Returns true if a previous snippet field is available.

last_command : Returns the name of the last command run.

num_selections : Returns the number of selections.

overlay_visible : Returns true if any overlay is visible.

panel_visible : Returns true if any panel is visible.

following_text : Test against the selected text and the text following it until the end of the line.

preceding_text : Test against the text on the line up to and including the selection.

selection_empty : Returns true if the selection is an empty region.

setting.x : Returns the value of the x setting. x can be any string.

text : Restricts the test to the selected text.

selector : Returns the name of the current scope.

panel_has_focus : Returns true if a panel has input focus.

panel : Returns true if the panel given as operand is visible.

Context Operators

equal, not_equal : Test for equality.

regex_match, not_regex_match : Match against a regular expression (full match).

regex_contains, not_regex_contains : Match against a regular expression (partial match).

Bindable Keys

Keys in key bindings may be specified literally by symbol or by a name for a special key. Symbols cannot be combined with modifiers. For example, B will catch any key sequence inserting a B glyph, but ctrl+B is invalid and needs to be written as ctrl+shift+b instead.

Here's the list of the names for special keys:

Keys
upkeypad0f1
downkeypad1f2
rightkeypad2f3
leftkeypad3f4
insertkeypad4f5
homekeypad5f6
endkeypad6f7
pageupkeypad7f8
pagedownkeypad8f9
backspacekeypad9f10
deletekeypad_periodf11
tabkeypad_dividef12
enterkeypad_multiplyf13
pausekeypad_minusf14
escapekeypad_plusf15
spacekeypad_enterf16
clearf17
sysreqbrowser_backf18
breakbrowser_forwardf19
context_menubrowser_refreshf20
browser_stopf21
browser_searchf22
browser_favoritesf23
browser_homef24

Modifiers

The Any Character Binding

Adding a binding for <character> (with the angled brackets and no modifiers) causes Sublime Text to bind the given command for all glyphs provided to it. You should thus only use this binding with an accompanying context filter.

The specified command will then receive an additional character argument containing the glyph that was captured.

Warning about Bindable Keys

If you're developing a package, keep this in mind:

In both cases, the user's ability to insert non-ASCII characters would be compromised otherwise.

End-users are free to remap any key combination.

Command Mode

Sublime Text provides a command_mode setting to prevent key presses from being sent to the buffer. This is useful, for example, to emulate Vim's modal behavior.

Key bindings not intended for command mode (generally, all of them) should include a context like this:

json
{"key": "setting.command_mode", "operand": false}

This way, plugins legitimately using command mode will be able to define appropriate key bindings without interference.

Order of Preference for Key Bindings

Key bindings in a keymap file are evaluated from the bottom to the top. The first matching context wins.

Keeping Keymaps Organized

Sublime Text ships with default keymaps under Packages/Default. Other packages may include keymap files of their own.

The recommended storage location for your personal keymap files is Packages/User.

See Also

Merging and Order of Precedence

International Keyboards

Due to the way Sublime Text maps key names to physical keys, key names may not correspond to physical keys in keyboard layouts other than US English.

Troubleshooting

To enable logging related to keymaps, see the documentation for:

These may help with debugging keymaps. When a key chord does not trigger an input log, another application or your operating system is likely grabbing the key before it can reach Sublime Text.

- +}

Structure of a Context

key : Name of the context whose value you want to query.

operator : Type of test to perform against key's value. Defaults to equal.

operand : The result returned by key is tested against this value.

match_all : Requires the test to succeed for all selections. Defaults to false.

Context Keys

Arbitrary keys may be provided by plugins. Thus, this section only features keys provided by Sublime Text itself.

auto_complete_visible : Returns true if the autocomplete list is visible.

has_next_field : Returns true if a next snippet field is available.

has_prev_field : Returns true if a previous snippet field is available.

last_command : Returns the name of the last command run.

num_selections : Returns the number of selections.

overlay_visible : Returns true if any overlay is visible.

panel_visible : Returns true if any panel is visible.

following_text : Test against the selected text and the text following it until the end of the line.

preceding_text : Test against the text on the line up to and including the selection.

selection_empty : Returns true if the selection is an empty region.

setting.x : Returns the value of the x setting. x can be any string.

text : Restricts the test to the selected text.

selector : Returns the name of the current scope.

panel_has_focus : Returns true if a panel has input focus.

panel : Returns true if the panel given as operand is visible.

Context Operators

equal, not_equal : Test for equality.

regex_match, not_regex_match : Match against a regular expression (full match).

regex_contains, not_regex_contains : Match against a regular expression (partial match).

Bindable Keys

Keys in key bindings may be specified literally by symbol or by a name for a special key. Symbols cannot be combined with modifiers. For example, B will catch any key sequence inserting a B glyph, but ctrl+B is invalid and needs to be written as ctrl+shift+b instead.

Here's the list of the names for special keys:

Keys
upkeypad0f1
downkeypad1f2
rightkeypad2f3
leftkeypad3f4
insertkeypad4f5
homekeypad5f6
endkeypad6f7
pageupkeypad7f8
pagedownkeypad8f9
backspacekeypad9f10
deletekeypad_periodf11
tabkeypad_dividef12
enterkeypad_multiplyf13
pausekeypad_minusf14
escapekeypad_plusf15
spacekeypad_enterf16
clearf17
sysreqbrowser_backf18
breakbrowser_forwardf19
context_menubrowser_refreshf20
browser_stopf21
browser_searchf22
browser_favoritesf23
browser_homef24

Modifiers

The Any Character Binding

Adding a binding for <character> (with the angled brackets and no modifiers) causes Sublime Text to bind the given command for all glyphs provided to it. You should thus only use this binding with an accompanying context filter.

The specified command will then receive an additional character argument containing the glyph that was captured.

Warning about Bindable Keys

If you're developing a package, keep this in mind:

In both cases, the user's ability to insert non-ASCII characters would be compromised otherwise.

End-users are free to remap any key combination.

Command Mode

Sublime Text provides a command_mode setting to prevent key presses from being sent to the buffer. This is useful, for example, to emulate Vim's modal behavior.

Key bindings not intended for command mode (generally, all of them) should include a context like this:

json
{"key": "setting.command_mode", "operand": false}

This way, plugins legitimately using command mode will be able to define appropriate key bindings without interference.

Order of Preference for Key Bindings

Key bindings in a keymap file are evaluated from the bottom to the top. The first matching context wins.

Keeping Keymaps Organized

Sublime Text ships with default keymaps under Packages/Default. Other packages may include keymap files of their own.

The recommended storage location for your personal keymap files is Packages/User.

See Also

Merging and Order of Precedence

International Keyboards

Due to the way Sublime Text maps key names to physical keys, key names may not correspond to physical keys in keyboard layouts other than US English.

Troubleshooting

To enable logging related to keymaps, see the documentation for:

These may help with debugging keymaps. When a key chord does not trigger an input log, another application or your operating system is likely grabbing the key before it can reach Sublime Text.

+ \ No newline at end of file diff --git a/reference/keyboard_shortcuts_osx.html b/reference/keyboard_shortcuts_osx.html index 3c83e7a2..5c2ed510 100644 --- a/reference/keyboard_shortcuts_osx.html +++ b/reference/keyboard_shortcuts_osx.html @@ -6,13 +6,13 @@ Keyboard Shortcuts - OSX | Sublime Text Community Documentation - + - + @@ -26,8 +26,8 @@ -
Skip to content

Keyboard Shortcuts - OSX

WARNING

This topic is a draft and may contain wrong information.

Editing

KeypressCommand
 XCut line
 Insert line after
  Insert line before
Ctrl  Move line/selection up
Ctrl  Move line/selection down
 LSelect line - Repeat to select next lines
 DSelect word - Repeat to select next occurrence
Ctrl  GSelect all occurrences of current selection
Ctrl  Extra cursor on the line above
Ctrl  Extra cursor on the line below
Ctrl MJump to closing parentheses Repeat to jump to opening parentheses
Ctrl  MSelect all contents of the current parentheses
Ctrl AMove to beginning of line
 Move to beginning of text on line
Ctrl E,  Move to end of line
 K,  KDelete from cursor to end of line
 K,  Delete from cursor to start of line
 ]Indent current line(s)
 [Un-indent current line(s)
  DDuplicate line(s)
 JJoin line below to the end of the current line
 /Comment/un-comment current line
  /Block comment current selection
 YRedo, or repeat last keyboard shortcut command
  VPaste and indent correctly
Ctrl Select next auto-complete suggestion
 USoft undo; jumps to your last change before undoing change when repeated
Ctrl  Column selection up
Ctrl  Column selection down
Ctrl  WWrap Selection in html tag
Ctrl  KDelete current line of cursor
KeypressCommand
 P,  TQuick-open files by name
 RGoto symbol
Goto word in current file
Ctrl GGoto line in current file

General

KeypressCommand
  PCommand Palette
Ctrl `Python Console
Ctrl  FToggle fullscreen mode
Ctrl   FToggle distraction-free mode
 K,  BToggle side bar
Ctrl  PShow scope in status bar

Find/Replace

KeypressCommand
 FFind
  FReplace
  FFind in files
 IIncremental Find

Scrolling

KeypressCommand
Ctrl VScroll down one page
Ctrl LCenter current line vertically in page
 Scroll to end of file
 Scroll to start of file

Tabs

KeypressCommand
  TOpen last closed tab
 [1-9]Jump to tab in current group
 0Jump to 10th tab in current group
  [Cycle left through tabs
  ]Cycle right through tabs
Ctrl Cycle up through recent tabs
Ctrl  Cycle down through recent tabs
Find in files

Split window

KeypressCommand
  1Revert view to single column
  2Split view into two columns
  3Split view into three columns
  4Split view into four columns
  5Set view to grid (4 groups)
Ctrl [1-4]Jump to group
Ctrl  [1-4]Move file to specified group

Bookmarks

KeypressCommand
 F2Toggle bookmark
F2Next bookmark
 F2Previous bookmark
  F2Clear bookmarks

Text manipulation

KeypressCommand
 K,  UTransform to Uppercase
 K,  LTransform to Lowercase
Ctrl  , Ctrl  Clip text upwards / downwards
- +
Skip to content

Keyboard Shortcuts - OSX

WARNING

This topic is a draft and may contain wrong information.

Editing

KeypressCommand
 XCut line
 Insert line after
  Insert line before
Ctrl  Move line/selection up
Ctrl  Move line/selection down
 LSelect line - Repeat to select next lines
 DSelect word - Repeat to select next occurrence
Ctrl  GSelect all occurrences of current selection
Ctrl  Extra cursor on the line above
Ctrl  Extra cursor on the line below
Ctrl MJump to closing parentheses Repeat to jump to opening parentheses
Ctrl  MSelect all contents of the current parentheses
Ctrl AMove to beginning of line
 Move to beginning of text on line
Ctrl E,  Move to end of line
 K,  KDelete from cursor to end of line
 K,  Delete from cursor to start of line
 ]Indent current line(s)
 [Un-indent current line(s)
  DDuplicate line(s)
 JJoin line below to the end of the current line
 /Comment/un-comment current line
  /Block comment current selection
 YRedo, or repeat last keyboard shortcut command
  VPaste and indent correctly
Ctrl Select next auto-complete suggestion
 USoft undo; jumps to your last change before undoing change when repeated
Ctrl  Column selection up
Ctrl  Column selection down
Ctrl  WWrap Selection in html tag
Ctrl  KDelete current line of cursor
KeypressCommand
 P,  TQuick-open files by name
 RGoto symbol
Goto word in current file
Ctrl GGoto line in current file

General

KeypressCommand
  PCommand Palette
Ctrl `Python Console
Ctrl  FToggle fullscreen mode
Ctrl   FToggle distraction-free mode
 K,  BToggle side bar
Ctrl  PShow scope in status bar

Find/Replace

KeypressCommand
 FFind
  FReplace
  FFind in files
 IIncremental Find

Scrolling

KeypressCommand
Ctrl VScroll down one page
Ctrl LCenter current line vertically in page
 Scroll to end of file
 Scroll to start of file

Tabs

KeypressCommand
  TOpen last closed tab
 [1-9]Jump to tab in current group
 0Jump to 10th tab in current group
  [Cycle left through tabs
  ]Cycle right through tabs
Ctrl Cycle up through recent tabs
Ctrl  Cycle down through recent tabs
Find in files

Split window

KeypressCommand
  1Revert view to single column
  2Split view into two columns
  3Split view into three columns
  4Split view into four columns
  5Set view to grid (4 groups)
Ctrl [1-4]Jump to group
Ctrl  [1-4]Move file to specified group

Bookmarks

KeypressCommand
 F2Toggle bookmark
F2Next bookmark
 F2Previous bookmark
  F2Clear bookmarks

Text manipulation

KeypressCommand
 K,  UTransform to Uppercase
 K,  LTransform to Lowercase
Ctrl  , Ctrl  Clip text upwards / downwards
+ \ No newline at end of file diff --git a/reference/keyboard_shortcuts_win.html b/reference/keyboard_shortcuts_win.html index b5726b99..7178f149 100644 --- a/reference/keyboard_shortcuts_win.html +++ b/reference/keyboard_shortcuts_win.html @@ -6,13 +6,13 @@ Keyboard Shortcuts - Windows/Linux | Sublime Text Community Documentation - + - + @@ -26,8 +26,8 @@ -
Skip to content

Keyboard Shortcuts - Windows/Linux

WARNING

This topic is a draft and may contain wrong information.

Editing

KeypressCommand
Ctrl XCut line
Ctrl Insert line after
Ctrl  Insert line before
Ctrl  Move line/selection up
Ctrl  Move line/selection down
Ctrl LSelect line - Repeat to select next lines
Ctrl DSelect word - Repeat select others occurrences
Ctrl MJump to closing parentheses Repeat to jump to opening parentheses
Ctrl  MSelect all contents of the current parentheses
Ctrl  KDelete Line
Ctrl K, Ctrl KDelete from cursor to end of line
Ctrl K, Ctrl Delete from cursor to start of line
Ctrl ]Indent current line(s)
Ctrl [Un-indent current line(s)
Ctrl  DDuplicate line(s)
Ctrl JJoin line below to the end of the current line
Ctrl /Comment/un-comment current line
Ctrl  /Block comment current selection
Ctrl YRedo, or repeat last keyboard shortcut command
Ctrl  VPaste and indent correctly
Ctrl Select next auto-complete suggestion
Ctrl Usoft undo; jumps to your last change before undoing change when repeated
Alt  WWrap Selection in html tag
Alt .Close current html tag

Windows

KeypressCommand
Ctrl Alt Column selection up
Ctrl Alt Column selection down

Linux

KeypressCommand
Alt  Column selection up
Alt  Column selection down
KeypressCommand
Ctrl PQuick-open files by name
Ctrl RGoto symbol
Ctrl ;Goto word in current file
Ctrl GGoto line in current file

General

KeypressCommand
Ctrl  PCommand prompt
Ctrl K, Ctrl BToggle side bar
Ctrl Alt  PShow scope in status bar

Find/Replace

KeypressCommand
Ctrl FFind
Ctrl HReplace
Ctrl  FFind in files

Tabs

KeypressCommand
Ctrl  TOpen last closed tab
Ctrl Page UpCycle up through tabs
Ctrl Page UpCycle down through tabs
Ctrl Switch to a previous tab, hold and repeat to cycle through previous tabs
Ctrl  Switch in reverse order to a previous tab, hold Ctrl  and repeat to cycle through previous tabs in reverse
Ctrl WClose current tab
Alt [1-9]Switch to tab number

Split window

KeypressCommand
Alt  1Revert view to single column
Alt  2Split view into two columns
Alt  3Split view into three columns
Alt  4Split view into four columns
Alt  5Set view to grid (4 groups)
Alt  8Split view into two rows
Ctrl [1-4]Jump to group
Ctrl  [1-4]Move file to specified group

Bookmarks

KeypressCommand
Ctrl F2Toggle bookmark
F2Next bookmark
 F2Previous bookmark
Ctrl  F2Clear bookmarks

Text manipulation

KeypressCommand
Ctrl K, Ctrl UTransform to upper case
Ctrl K, Ctrl LTransform to lower case
- +
Skip to content

Keyboard Shortcuts - Windows/Linux

WARNING

This topic is a draft and may contain wrong information.

Editing

KeypressCommand
Ctrl XCut line
Ctrl Insert line after
Ctrl  Insert line before
Ctrl  Move line/selection up
Ctrl  Move line/selection down
Ctrl LSelect line - Repeat to select next lines
Ctrl DSelect word - Repeat select others occurrences
Ctrl MJump to closing parentheses Repeat to jump to opening parentheses
Ctrl  MSelect all contents of the current parentheses
Ctrl  KDelete Line
Ctrl K, Ctrl KDelete from cursor to end of line
Ctrl K, Ctrl Delete from cursor to start of line
Ctrl ]Indent current line(s)
Ctrl [Un-indent current line(s)
Ctrl  DDuplicate line(s)
Ctrl JJoin line below to the end of the current line
Ctrl /Comment/un-comment current line
Ctrl  /Block comment current selection
Ctrl YRedo, or repeat last keyboard shortcut command
Ctrl  VPaste and indent correctly
Ctrl Select next auto-complete suggestion
Ctrl Usoft undo; jumps to your last change before undoing change when repeated
Alt  WWrap Selection in html tag
Alt .Close current html tag

Windows

KeypressCommand
Ctrl Alt Column selection up
Ctrl Alt Column selection down

Linux

KeypressCommand
Alt  Column selection up
Alt  Column selection down
KeypressCommand
Ctrl PQuick-open files by name
Ctrl RGoto symbol
Ctrl ;Goto word in current file
Ctrl GGoto line in current file

General

KeypressCommand
Ctrl  PCommand prompt
Ctrl K, Ctrl BToggle side bar
Ctrl Alt  PShow scope in status bar

Find/Replace

KeypressCommand
Ctrl FFind
Ctrl HReplace
Ctrl  FFind in files

Tabs

KeypressCommand
Ctrl  TOpen last closed tab
Ctrl Page UpCycle up through tabs
Ctrl Page UpCycle down through tabs
Ctrl Switch to a previous tab, hold and repeat to cycle through previous tabs
Ctrl  Switch in reverse order to a previous tab, hold Ctrl  and repeat to cycle through previous tabs in reverse
Ctrl WClose current tab
Alt [1-9]Switch to tab number

Split window

KeypressCommand
Alt  1Revert view to single column
Alt  2Split view into two columns
Alt  3Split view into three columns
Alt  4Split view into four columns
Alt  5Set view to grid (4 groups)
Alt  8Split view into two rows
Ctrl [1-4]Jump to group
Ctrl  [1-4]Move file to specified group

Bookmarks

KeypressCommand
Ctrl F2Toggle bookmark
F2Next bookmark
 F2Previous bookmark
Ctrl  F2Clear bookmarks

Text manipulation

KeypressCommand
Ctrl K, Ctrl UTransform to upper case
Ctrl K, Ctrl LTransform to lower case
+ \ No newline at end of file diff --git a/reference/menus.html b/reference/menus.html index 62443bc5..38ba9aab 100644 --- a/reference/menus.html +++ b/reference/menus.html @@ -6,13 +6,13 @@ Menus | Sublime Text Community Documentation - + - + @@ -51,8 +51,8 @@ { "command": "paste_from_history", "caption": "Paste from History" } ] } -]

Menu items may have the following properties.

Unless you are referencing an existing item via ID, each menu item must define either children, command or caption.

command : Name of the command to be called when the menu item is selected.

args : Object of arguments to the command. For Side Bar and Side Bar Mount Point menus, this is extended by a files argument that contains all selected items in the sidebar as a list.

caption : Text to be displayed in the menu. A single hyphen (-) turns the item into a Menu Separator.

children : List of Menu Item objects that are displayed when the item is hovered. Overrides existence of command property.

mnemonic : A single character used for menu accelerators. The character must be contained in the caption and is case-sensitive.

id : A unique string identifier for the menu item. This can be used to extend menu sections or sub-menu or to alter a menu item entirely.

Refer to the main documentation on how this works.

platform : The platform name for which the menu entry should be made visible. Valid values are OSX, Linux & Windows. It also supports negation in the form !OSX which means to show the menu entry for all platforms except OSX.

- +]

Menu items may have the following properties.

Unless you are referencing an existing item via ID, each menu item must define either children, command or caption.

command : Name of the command to be called when the menu item is selected.

args : Object of arguments to the command. For Side Bar and Side Bar Mount Point menus, this is extended by a files argument that contains all selected items in the sidebar as a list.

caption : Text to be displayed in the menu. A single hyphen (-) turns the item into a Menu Separator.

children : List of Menu Item objects that are displayed when the item is hovered. Overrides existence of command property.

mnemonic : A single character used for menu accelerators. The character must be contained in the caption and is case-sensitive.

id : A unique string identifier for the menu item. This can be used to extend menu sections or sub-menu or to alter a menu item entirely.

Refer to the main documentation on how this works.

platform : The platform name for which the menu entry should be made visible. Valid values are OSX, Linux & Windows. It also supports negation in the form !OSX which means to show the menu entry for all platforms except OSX.

+ \ No newline at end of file diff --git a/reference/metadata.html b/reference/metadata.html index 6db0e34b..9ebf0451 100644 --- a/reference/metadata.html +++ b/reference/metadata.html @@ -6,13 +6,13 @@ Metadata Files | Sublime Text Community Documentation - + - + @@ -97,8 +97,8 @@ <string>BOOK_OPENING</string> <key>value</key> <string>Once upon a time...</string> -</dict>

See Also

Comments : Shell variables defining comment markers.

To extract metadata information from plugin code, you can use the view.meta_info(key, point) API call.

- +</dict>

See Also

Comments : Shell variables defining comment markers.

To extract metadata information from plugin code, you can use the view.meta_info(key, point) API call.

+ \ No newline at end of file diff --git a/reference/mouse_bindings.html b/reference/mouse_bindings.html index e1d93dc6..96f3b1e8 100644 --- a/reference/mouse_bindings.html +++ b/reference/mouse_bindings.html @@ -6,13 +6,13 @@ Mouse Bindings | Sublime Text Community Documentation - + - + @@ -42,8 +42,8 @@ "press_command": "drag_select", "press_args": {"subtractive": true} }, -]

Following are the keys that a single JSON entry in a mousemap file can take.

button : The name of the button.

This defines the name of the button. There can be upto 16 buttons, button1 to button16 along with scroll_up & scroll_down for the scroll wheel.

modifiers : A list of modifier keys.

This defines a list of modifiers keys that have to be pressed simultaneously (along with the corresponding button click) for the command to be triggered, e.g. ["ctrl", "alt"]. A list of all the modifier keys can be found in the keybindings section on Modifiers.

count : The count of the button press.

This defines the number of times the button has to be pressed for the corresponding command to trigger. Defaults to 1.

command : The command to execute.

This defines the command to be executed when the corresponding button is released.

args : The arguments for command.

This is a mapping of arguments to be passed on to the command.

press_command : The press_command to execute.

This defines the command to be executed when the corresponding button is pressed.

press_args : The arguments for press_command.

This is a mapping of arguments to be passed on to the press_command.

- +]

Following are the keys that a single JSON entry in a mousemap file can take.

button : The name of the button.

This defines the name of the button. There can be upto 16 buttons, button1 to button16 along with scroll_up & scroll_down for the scroll wheel.

modifiers : A list of modifier keys.

This defines a list of modifiers keys that have to be pressed simultaneously (along with the corresponding button click) for the command to be triggered, e.g. ["ctrl", "alt"]. A list of all the modifier keys can be found in the keybindings section on Modifiers.

count : The count of the button press.

This defines the number of times the button has to be pressed for the corresponding command to trigger. Defaults to 1.

command : The command to execute.

This defines the command to be executed when the corresponding button is released.

args : The arguments for command.

This is a mapping of arguments to be passed on to the command.

press_command : The press_command to execute.

This defines the command to be executed when the corresponding button is pressed.

press_args : The arguments for press_command.

This is a mapping of arguments to be passed on to the press_command.

+ \ No newline at end of file diff --git a/reference/plugins.html b/reference/plugins.html index cc39ff9a..1ab2bce1 100644 --- a/reference/plugins.html +++ b/reference/plugins.html @@ -6,13 +6,13 @@ Plugins | Sublime Text Community Documentation - + - + @@ -26,8 +26,8 @@ -
Skip to content

Plugins

See Also

API Reference : More information on the Python API.

Plugins are Python scripts subclassing any of the *Command or *Listener classes from the sublime_plugin module.

Where to Store Plugins

Sublime Text will look for plugins in these places:

  • Packages
  • Packages/<pkg_name>
  • .sublime-package files

Plugin files nested deeper in Packages won't be loaded.

All plugins should live inside a folder of their own and not directly under Packages. This will spare you confusions when Sublime Text attempts to sort packages for loading.

Conventions for Command Names

By convention, Sublime Text command class names are suffixed with Command and written as NamesLikeThisCommand.

However, command names are automatically transformed from NamesLikeThisCommand to name_like_this. Thus, ExampleCommand would become example, and AnotherExampleCommand would become another_example.

In names for classes defining commands, use NameLikeThisCommand. To call a command from the API, use the standardized name_like_this.

Types of Commands

  • sublime_plugin.ApplicationCommand
  • sublime_plugin.WindowCommand
  • sublime_plugin.TextCommand

Instances of WindowCommand have a .window attribute pointing to the window instance that created them. Similarly, instances of TextCommand have a .view attribute. ApplicationCommand instances don't have either.

Shared Traits for Commands

All commands must implement a .run() method.

All commands may additionally provide methods to change their visibility, enabled state, default caption in menus, or even their name (discouraged).

How to Call Commands from the API

Depending on the type of command, use a reference to a View or a Window and call <object>.run_command('command_name'). In addition to the command's name, .run_command accepts a dictionary whose keys are the names of valid parameters for said command:

python
window.run_command("echo", {"Tempus": "Irreparabile", "Fugit": "."})

All user-provided arguments to commands must JSON-serializable. This includes strings, integers, floats, booleans, None, and the recursive list and dict types. Mapping keys must be strings.

Text Commands and the edit Object

Text commands receive an edit object passed to them by Sublime Text.

All actions done within an edit are grouped as a single undo action. Callbacks such as on_modified() and on_selection_modified() are called when the most outer edit operation is finished.

The edit object's life time is solely managed by Sublime Text internally. Plugin authors must ensure to perform all editing operations within the run() method of text commands so that macros and repeating commands work as expected.

Responding to Events

Any subclass of EventListener will be able to respond to events. You cannot make a class derive both from EventListener and from any other type of command.

WARNING

Expensive operations in event listeners can cause Sublime Text to become unresponsive, especially in events triggered frequently, like on_modified() and on_selection_modified(). Be careful of how much work is done in these and don't implement events you don't need, even if they just pass.

Sublime Text and the Python Standard Library

The most significant omission from the default distribution is the tkinter module. Otherwise, you can access the entire Python standard library for the Python version Sublime Text ships with.

Automatic Plugin Reload

Sublime Text will reload topmost Python modules as they change (perhaps because you are editing a .py file within Packages). By contrast, Python subpackages won't be reloaded automatically, and this can lead to confusion while you're developing plugins. Generally speaking, it's best to restart Sublime Text after you've made changes to plugin files, so all changes can take effect.

- +
Skip to content

Plugins

See Also

API Reference : More information on the Python API.

Plugins are Python scripts subclassing any of the *Command or *Listener classes from the sublime_plugin module.

Where to Store Plugins

Sublime Text will look for plugins in these places:

  • Packages
  • Packages/<pkg_name>
  • .sublime-package files

Plugin files nested deeper in Packages won't be loaded.

All plugins should live inside a folder of their own and not directly under Packages. This will spare you confusions when Sublime Text attempts to sort packages for loading.

Conventions for Command Names

By convention, Sublime Text command class names are suffixed with Command and written as NamesLikeThisCommand.

However, command names are automatically transformed from NamesLikeThisCommand to name_like_this. Thus, ExampleCommand would become example, and AnotherExampleCommand would become another_example.

In names for classes defining commands, use NameLikeThisCommand. To call a command from the API, use the standardized name_like_this.

Types of Commands

  • sublime_plugin.ApplicationCommand
  • sublime_plugin.WindowCommand
  • sublime_plugin.TextCommand

Instances of WindowCommand have a .window attribute pointing to the window instance that created them. Similarly, instances of TextCommand have a .view attribute. ApplicationCommand instances don't have either.

Shared Traits for Commands

All commands must implement a .run() method.

All commands may additionally provide methods to change their visibility, enabled state, default caption in menus, or even their name (discouraged).

How to Call Commands from the API

Depending on the type of command, use a reference to a View or a Window and call <object>.run_command('command_name'). In addition to the command's name, .run_command accepts a dictionary whose keys are the names of valid parameters for said command:

python
window.run_command("echo", {"Tempus": "Irreparabile", "Fugit": "."})

All user-provided arguments to commands must JSON-serializable. This includes strings, integers, floats, booleans, None, and the recursive list and dict types. Mapping keys must be strings.

Text Commands and the edit Object

Text commands receive an edit object passed to them by Sublime Text.

All actions done within an edit are grouped as a single undo action. Callbacks such as on_modified() and on_selection_modified() are called when the most outer edit operation is finished.

The edit object's life time is solely managed by Sublime Text internally. Plugin authors must ensure to perform all editing operations within the run() method of text commands so that macros and repeating commands work as expected.

Responding to Events

Any subclass of EventListener will be able to respond to events. You cannot make a class derive both from EventListener and from any other type of command.

WARNING

Expensive operations in event listeners can cause Sublime Text to become unresponsive, especially in events triggered frequently, like on_modified() and on_selection_modified(). Be careful of how much work is done in these and don't implement events you don't need, even if they just pass.

Sublime Text and the Python Standard Library

The most significant omission from the default distribution is the tkinter module. Otherwise, you can access the entire Python standard library for the Python version Sublime Text ships with.

Automatic Plugin Reload

Sublime Text will reload topmost Python modules as they change (perhaps because you are editing a .py file within Packages). By contrast, Python subpackages won't be reloaded automatically, and this can lead to confusion while you're developing plugins. Generally speaking, it's best to restart Sublime Text after you've made changes to plugin files, so all changes can take effect.

+ \ No newline at end of file diff --git a/reference/projects.html b/reference/projects.html index 894f44a7..8aa58e8e 100644 --- a/reference/projects.html +++ b/reference/projects.html @@ -6,13 +6,13 @@ Projects | Sublime Text Community Documentation - + - + @@ -63,8 +63,8 @@ "name": "foo <with HTML files>" } ] -}

Settings

A project may define project-specific settings that will only apply to files within that project. Project-specific settings override user settings, but not syntax-specific settings.

Almost all settings can be overridden (excluding global settings).

See Also

Settings Hierarchy : A detailed example for the order of precedence for settings.

Settings Reference : Reference of available settings.

Build Systems

You can define project-specific build systems in a .sublime-project file. Build systems in projects follow the same rules as conventional build system, except a name must be specified for each. They will show up in the Tools → Build Systems menu and are selectable in the Build With popup, but only in that project.

See Also

Build Systems reference : Documentation on build systems and their options.

- +}

Settings

A project may define project-specific settings that will only apply to files within that project. Project-specific settings override user settings, but not syntax-specific settings.

Almost all settings can be overridden (excluding global settings).

See Also

Settings Hierarchy : A detailed example for the order of precedence for settings.

Settings Reference : Reference of available settings.

Build Systems

You can define project-specific build systems in a .sublime-project file. Build systems in projects follow the same rules as conventional build system, except a name must be specified for each. They will show up in the Tools → Build Systems menu and are selectable in the Build With popup, but only in that project.

See Also

Build Systems reference : Documentation on build systems and their options.

+ \ No newline at end of file diff --git a/reference/python_api.html b/reference/python_api.html index 16424fcc..a8b18165 100644 --- a/reference/python_api.html +++ b/reference/python_api.html @@ -6,13 +6,13 @@ Python API | Sublime Text Community Documentation - + - + @@ -48,8 +48,8 @@ "rows": [0, 0.5, 1], "cells": [[0, 0, 1, 2], [1, 0, 2, 1], [1, 1, 2, 2]] -}) - +}) + \ No newline at end of file diff --git a/reference/settings.html b/reference/settings.html index 14464f5b..410acccc 100644 --- a/reference/settings.html +++ b/reference/settings.html @@ -6,13 +6,13 @@ Settings | Sublime Text Community Documentation - + - + @@ -26,8 +26,8 @@ -
Skip to content

Settings

WARNING

This page may contain outdated or incomplete information. You can see a description of most available settings in the default settings file (Preferences → Settings or Default/Preferences.sublime-settings).

See Also

Settings User Guide : Explanations for how settings work in Sublime Text.

Global Settings

These settings can only be modified from Preferences.sublime-settings and Preferences ({platform}).sublime-settings.

theme : Theme to be used. Accepts a file base name (e. g.: Default.sublime-theme).

scroll_speed : Set to 0 to disable smooth scrolling. Set to a value between 0 and 1 to scroll slower, or set to a value larger than 1 to scroll faster.

hot_exit : Exiting the application or window with an associated project with hot_exit enabled will cause it to close immediately without prompting. Unsaved modifications and open files will be preserved and restored when next starting.

remember_open_files : Determines whether to reopen the buffers that were open when Sublime Text was last closed.

open_files_in_new_window : macOS only. When filters are opened from Finder, or by dragging onto the dock icon, this controls if a new window is created or not.

close_windows_when_empty : Close windows as soon as the last file is closed, unless there's a folder open within the window.

show_full_path : Show the full path to files in the title bar.

preview_on_click : If true, preview file contents when clicking on a file in the side bar. Double clicking or editing the preview will open the file and assign it a tab.

folder_exclude_patterns : Excludes the matching folders from the side bar, GoTo Anything, etc.

file_exclude_patterns : Excludes the matching files from the side bar, GoTo Anything, etc.

binary_file_patterns : Excludes the matching files from GoTo Anything and Find in Files but not the side bar.

show_tab_close_buttons : If false, hides the tabs' close buttons until the mouse hovers over the tab.

mouse_wheel_switches_tabs : If true, scrolling the mouse wheel will cause tabs to switch if the cursor is in the tab area.

open_files_in_new_window : macOS only. When filters are opened from Finder, or by dragging onto the dock icon, this controls whether a new window is created or not.

ignored_packages : A list of packages that will be ignored (not loaded).

File Settings

Whitespace and Indentation

auto_indent : Toggles automatic indentation.

tab_size : Number of spaces a tab is considered equal to.

translate_tabs_to_spaces : Determines whether to replace a tab character with tab_size number of spaces when is pressed.

use_tab_stops : If translate_tabs_to_spaces is true, will make and

insert/delete tab_size number of spaces per key press.

trim_automatic_white_space : Toggles deletion of white space added by auto_indent.

detect_indentation : Set to false to disable detection of tabs vs. spaces whenever a buffer is loaded. If set to true, it automatically will modify translate_tabs_to_spaces and tab_size.

draw_white_space : Valid values: none, selection, all.

trim_trailing_white_space_on_save : Set to true to remove white space on save.

Visual Settings

always_show_minimap_viewport : If set to true, then it will always show rectangle on minimap highlighting current document position; defualt false, which shows position only on mouse over the minimap.

color_scheme : Sets the colors used for text highlighting. Accepts a path rooted at the data directory (e.g.: Packages/Color Scheme - Default/Monokai Bright.tmTheme).

font_face : Font face to be used for editable text.

font_size : Size of the font for editable text.

font_options : Valid values: bold, italic, no_antialias, gray_antialias, subpixel_antialias, directwrite (Windows).

gutter : Toggles display of gutter.

rulers : Columns in which to display vertical rules. Accepts a list of numeric values (such as [79, 89, 99]) or a single numeric value (for example, 79).

draw_minimap_border : Set to true to draw a border around the minimap's region corresponding to the the view's currently visible text. The active color scheme's minimapBorder key controls the border's color.

highlight_line : Set to false to stop highlighting lines with a cursor.

line_padding_top : Additional spacing at the top of each line, in pixels.

line_padding_bottom : Additional spacing at the bottom of each line, in pixels.

scroll_past_end : Set to false to disable scrolling past the end of the buffer. If true, Sublime Text will leave a wide, empty margin between the last line and the bottom of the window.

line_numbers : Toggles display of line numbers in the gutter.

word_wrap : If set to false, long lines will be clipped instead of wrapped. Scroll the screen horizontally to see the clipped text.

wrap_width : If greater than 0, wraps long lines at the specified column as opposed to the window width. Only takes effect if word_wrap is set to true.

indent_subsequent_lines : If set to false, wrapped lines will not be indented. Only takes effect if word_wrap is set to true.

draw_centered : If set to true, text will be drawn centered rather than left-aligned.

match_brackets : Set to false to disable underlining the brackets surrounding the cursor.

match_brackets_content : Set this to false if you'd rather have brackets highlighted only when the cursor is next to one.

match_brackets_square : Set to false to stop highlighting square brackets. Only takes effect if match_brackets is true.

match_brackets_braces : Set to false to stop highlighting curly brackets. Only takes effect if match_brackets is true.

match_brackets_angle : Set to false to stop highlighting angle brackets. Only takes effect if match_brackets is true.

Automatic Behavior

auto_match_enabled : Toggles automatic pairing of quotes, brackets, etc.

save_on_focus_lost : Set to true to save files automatically when switching to a different file or application.

find_selected_text : If true, the selected text will be copied into the find panel when it's shown.

word_separators : Characters considered to divide words for actions like advancing the cursor, etc. Not used for every context where a notion of a word separator is useful (for example, word wrapping). In some contexts, the text might be tokenized based on other criteria (for example, the syntax definition rules).

ensure_newline_at_eof_on_save : Always adds a new line at the end of the file if not present when saving.

System and Miscellaneous Settings

is_widget : Returns true if the buffer is an input field in a dialog, as opposed to a regular buffer.

spell_check : Toggles the spell checker.

dictionary : Word list to be used by the spell checker. Accepts a path rooted at the data directory (such as Packages/Language - English/en_US.dic). You can add more dictionaries.

fallback_encoding : The encoding to use when the encoding can't be determined automatically. ASCII, UTF-8 and UTF-16 encodings will be detected automatically .

default_line_ending : Determines what characters to use to designate new lines. Valid values: system (OS-dependant), windows (CRLF) and unix (LF).

tab_completion : Determines whether pressing will insert completions.

Build and Error Navigation Settings

result_file_regex and result_line_regex : Regular expressions used to extract error information from some output dumped into a view or output panel. Follows the same rules as error capturing in build systems.

result_base_dir : Folder to start looking for offending files based on information extracted with result_file_regex and result_line_regex.

build_env : List of paths to add to build systems by default.

File and Directory Settings

default_dir : Sets the default save folder for the view.

Input Settings

command_mode : If set to true, the buffer will ignore key strokes. Useful when emulating Vim's modal behavior.

- +
Skip to content

Settings

WARNING

This page may contain outdated or incomplete information. You can see a description of most available settings in the default settings file (Preferences → Settings or Default/Preferences.sublime-settings).

See Also

Settings User Guide : Explanations for how settings work in Sublime Text.

Global Settings

These settings can only be modified from Preferences.sublime-settings and Preferences ({platform}).sublime-settings.

theme : Theme to be used. Accepts a file base name (e. g.: Default.sublime-theme).

scroll_speed : Set to 0 to disable smooth scrolling. Set to a value between 0 and 1 to scroll slower, or set to a value larger than 1 to scroll faster.

hot_exit : Exiting the application or window with an associated project with hot_exit enabled will cause it to close immediately without prompting. Unsaved modifications and open files will be preserved and restored when next starting.

remember_open_files : Determines whether to reopen the buffers that were open when Sublime Text was last closed.

open_files_in_new_window : macOS only. When filters are opened from Finder, or by dragging onto the dock icon, this controls if a new window is created or not.

close_windows_when_empty : Close windows as soon as the last file is closed, unless there's a folder open within the window.

show_full_path : Show the full path to files in the title bar.

preview_on_click : If true, preview file contents when clicking on a file in the side bar. Double clicking or editing the preview will open the file and assign it a tab.

folder_exclude_patterns : Excludes the matching folders from the side bar, GoTo Anything, etc.

file_exclude_patterns : Excludes the matching files from the side bar, GoTo Anything, etc.

binary_file_patterns : Excludes the matching files from GoTo Anything and Find in Files but not the side bar.

show_tab_close_buttons : If false, hides the tabs' close buttons until the mouse hovers over the tab.

mouse_wheel_switches_tabs : If true, scrolling the mouse wheel will cause tabs to switch if the cursor is in the tab area.

open_files_in_new_window : macOS only. When filters are opened from Finder, or by dragging onto the dock icon, this controls whether a new window is created or not.

ignored_packages : A list of packages that will be ignored (not loaded).

File Settings

Whitespace and Indentation

auto_indent : Toggles automatic indentation.

tab_size : Number of spaces a tab is considered equal to.

translate_tabs_to_spaces : Determines whether to replace a tab character with tab_size number of spaces when is pressed.

use_tab_stops : If translate_tabs_to_spaces is true, will make and

insert/delete tab_size number of spaces per key press.

trim_automatic_white_space : Toggles deletion of white space added by auto_indent.

detect_indentation : Set to false to disable detection of tabs vs. spaces whenever a buffer is loaded. If set to true, it automatically will modify translate_tabs_to_spaces and tab_size.

draw_white_space : Valid values: none, selection, all.

trim_trailing_white_space_on_save : Set to true to remove white space on save.

Visual Settings

always_show_minimap_viewport : If set to true, then it will always show rectangle on minimap highlighting current document position; defualt false, which shows position only on mouse over the minimap.

color_scheme : Sets the colors used for text highlighting. Accepts a path rooted at the data directory (e.g.: Packages/Color Scheme - Default/Monokai Bright.tmTheme).

font_face : Font face to be used for editable text.

font_size : Size of the font for editable text.

font_options : Valid values: bold, italic, no_antialias, gray_antialias, subpixel_antialias, directwrite (Windows).

gutter : Toggles display of gutter.

rulers : Columns in which to display vertical rules. Accepts a list of numeric values (such as [79, 89, 99]) or a single numeric value (for example, 79).

draw_minimap_border : Set to true to draw a border around the minimap's region corresponding to the the view's currently visible text. The active color scheme's minimapBorder key controls the border's color.

highlight_line : Set to false to stop highlighting lines with a cursor.

line_padding_top : Additional spacing at the top of each line, in pixels.

line_padding_bottom : Additional spacing at the bottom of each line, in pixels.

scroll_past_end : Set to false to disable scrolling past the end of the buffer. If true, Sublime Text will leave a wide, empty margin between the last line and the bottom of the window.

line_numbers : Toggles display of line numbers in the gutter.

word_wrap : If set to false, long lines will be clipped instead of wrapped. Scroll the screen horizontally to see the clipped text.

wrap_width : If greater than 0, wraps long lines at the specified column as opposed to the window width. Only takes effect if word_wrap is set to true.

indent_subsequent_lines : If set to false, wrapped lines will not be indented. Only takes effect if word_wrap is set to true.

draw_centered : If set to true, text will be drawn centered rather than left-aligned.

match_brackets : Set to false to disable underlining the brackets surrounding the cursor.

match_brackets_content : Set this to false if you'd rather have brackets highlighted only when the cursor is next to one.

match_brackets_square : Set to false to stop highlighting square brackets. Only takes effect if match_brackets is true.

match_brackets_braces : Set to false to stop highlighting curly brackets. Only takes effect if match_brackets is true.

match_brackets_angle : Set to false to stop highlighting angle brackets. Only takes effect if match_brackets is true.

Automatic Behavior

auto_match_enabled : Toggles automatic pairing of quotes, brackets, etc.

save_on_focus_lost : Set to true to save files automatically when switching to a different file or application.

find_selected_text : If true, the selected text will be copied into the find panel when it's shown.

word_separators : Characters considered to divide words for actions like advancing the cursor, etc. Not used for every context where a notion of a word separator is useful (for example, word wrapping). In some contexts, the text might be tokenized based on other criteria (for example, the syntax definition rules).

ensure_newline_at_eof_on_save : Always adds a new line at the end of the file if not present when saving.

System and Miscellaneous Settings

is_widget : Returns true if the buffer is an input field in a dialog, as opposed to a regular buffer.

spell_check : Toggles the spell checker.

dictionary : Word list to be used by the spell checker. Accepts a path rooted at the data directory (such as Packages/Language - English/en_US.dic). You can add more dictionaries.

fallback_encoding : The encoding to use when the encoding can't be determined automatically. ASCII, UTF-8 and UTF-16 encodings will be detected automatically .

default_line_ending : Determines what characters to use to designate new lines. Valid values: system (OS-dependant), windows (CRLF) and unix (LF).

tab_completion : Determines whether pressing will insert completions.

Build and Error Navigation Settings

result_file_regex and result_line_regex : Regular expressions used to extract error information from some output dumped into a view or output panel. Follows the same rules as error capturing in build systems.

result_base_dir : Folder to start looking for offending files based on information extracted with result_file_regex and result_line_regex.

build_env : List of paths to add to build systems by default.

File and Directory Settings

default_dir : Sets the default save folder for the view.

Input Settings

command_mode : If set to true, the buffer will ignore key strokes. Useful when emulating Vim's modal behavior.

+ \ No newline at end of file diff --git a/reference/symbols.html b/reference/symbols.html index 3b2ca8da..ecf38621 100644 --- a/reference/symbols.html +++ b/reference/symbols.html @@ -6,13 +6,13 @@ Symbols | Sublime Text Community Documentation - + - + @@ -81,8 +81,8 @@ <string> s/class\s+([A-Za-z_][A-Za-z0-9_]*.+?\)?)(\:|$)/$1/g; s/def\s+([A-Za-z_][A-Za-z0-9_]*\()(?:(.{0,40}?\))|((.{40}).+?\)))(\:)/$1(?2:$2)(?3:$4…\))/g; -</string>

Once symbols are defined, you can navigate them using standard key bindings:

ShortcutDescription
F12Go to definition
Ctrl RShow local symbol list
Ctrl  RShow global symbol list

See Also

Goto Anything : Browsing symbols using Goto Anything.

- +</string>

Once symbols are defined, you can navigate them using standard key bindings:

ShortcutDescription
F12Go to definition
Ctrl RShow local symbol list
Ctrl  RShow global symbol list

See Also

Goto Anything : Browsing symbols using Goto Anything.

+ \ No newline at end of file diff --git a/reference/syntaxdefs_legacy.html b/reference/syntaxdefs_legacy.html index eb4303fa..e08cb1a7 100644 --- a/reference/syntaxdefs_legacy.html +++ b/reference/syntaxdefs_legacy.html @@ -6,13 +6,13 @@ Syntax Definitions (Legacy) | Sublime Text Community Documentation - + - + @@ -116,8 +116,8 @@ include: '#this-is-actually-a-comment' -match: '#"\w+' - +match: '#"\w+' + \ No newline at end of file