Skip to main content

BracketHighlighter

基础配置

{
"debug_enable": false,
"content_highlight_bar": true,
"align_content_highlight_bar": true,

// 开启内容侧边线高亮
"show_unmatched": true,

// 内容侧边线也进行缩进
"show_offscreen_bracket_popup": false,
"high_visibility_style": "underline"
}

添加vue文件的标签高亮

bh_tag.sublim3e-settings

{
/* If you add a new key to one of these settings, you must add one to all! */

// This is where you initially define a new tag mode.
// This new tag_mode key must be used in all other settings in this file
// to set up its specific settings.
// Determine which style of tag-matching to use in which syntax.
"tag_mode": [
{"mode": "xml", "syntax": ["XML"]},
{
"mode": "xhtml",
"syntax": [
"HTML",
"HTML 5",
"PHP",
"HTML (Jinja Templates)",
"HTML (Jinja2)",
"HTML (Rails)",
"HTML (Twig)",
"HTML (Django)",
"laravel-blade",
"blade",
"Handlebars",
"AngularJS",
"Java Server Pages (JSP)",
"Vue Component"
],
"first_line": "^[ \\t]*<\\?xml"
},
{
"mode": "html",
"syntax": [
"HTML",
"HTML 5",
"PHP",
"HTML (Jinja Templates)",
"HTML (Jinja2)",
"HTML (Rails)",
"HTML (Twig)",
"HTML (Django)",
"laravel-blade",
"blade",
"Handlebars",
"AngularJS",
"Java Server Pages (JSP)",
"Vue Component"
],
"first_line": "^<!--"
},
{
"mode": "cfml",
"syntax": ["HTML+CFML", "ColdFusion", "ColdFusionCFC"]
}
],

// Style to use for matched tags
"tag_style": {
"xml": "tag",
"xhtml": "tag",
"html": "tag",
"cfml": "tag",
"template":"tag",
},

// Scopes to exclude from tag searches.
"tag_scope_exclude": {
"xhtml": ["string", "comment"],
"html": ["string", "comment"],
"cfml": ["string", "comment"],
"template": ["string", "comment"],
},

// Optional closing HTML tags. You can use 'null' if it does not require a pattern.
"optional_tag_patterns": {
"xml": null,
"xhtml": null,
"html": "colgroup|dd|dt|li|option|optgroup|p|td|tfoot|th|thead|tr",
"cfml": "cf.+|colgroup|dd|dt|li|option|optgroup|p|td|tfoot|th|thead|tr",
"template": "cf.+|colgroup|dd|dt|li|option|optgroup|p|td|tfoot|th|thead|tr"
},

// Tags that never have a closing. You can use 'null' if it does not require a pattern.
"void_tag_patterns": {
"xml": null,
"xhtml": null,
"html": "area|base|basefont|br|col|embed|frame|hr|img|input|isindex|keygen|link|meta|param|source|track|wbr",
"cfml": "area|base|basefont|br|col|embed|frame|hr|img|input|isindex|keygen|link|meta|param|source|track|wbr",
"template": null
},

// Self closing tags. Single tags that are closed like this <tag />
"self_closing_tag_patterns": {
"xml": "[\\w:\\.\\-]+",
"xhtml": "[\\w:\\.\\-]+",
"html": "circle|ellipse|line|path|polygon|polyline|rect|stop|use",
"cfml": "cf.+",
"template": null
},

// Regex for tag name. Do not use capturing groups.
"tag_name":
{
"xml": "[\\w:\\.\\-]+",
"xhtml": "[\\w:\\.\\-]+",
"html": "[\\w:\\.\\-]+",
"cfml": "[\\w:\\.\\-]+",
"template": "[\\w:\\.\\-]+",
},

// HTML attributes. Do not use capturing groups.
"attributes":
{
"xml": "[\\w:][-\\w\\d:.]*(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'))?",
"xhtml": "[\\w:@][-\\w\\d:.]*(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'))?",
"html": "[\\w:@][-\\w\\d:.]*(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s\"'`=<>]+))?",
"cfml": "[\\w:][-\\w\\d:.]*(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s\"'`=<>]+))?",
"template": "[\\w:@][-\\w\\d:.]*(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s\"'`=<>]+))?",
},

// Regex for start/opening tag. Use a capturing group for tag name and self closing indicator '/' only.
// Attributes and tag names are inserted using python string formatting:
// the keyword 'attributes' and `tag_name` are used.
"start_tag": {
"xml": "<(%(tag_name)s)(?:\\s+%(attributes)s)*\\s*(/?)>",
"xhtml": "<(%(tag_name)s)(?:\\s+%(attributes)s)*\\s*(/?)>",
"html": "<(%(tag_name)s)(?:\\s+%(attributes)s)*\\s*(/?)>",
"cfml": "<(%(tag_name)s)(?:(?:\\s+%(attributes)s)*|(?:(?<=cfif)|(?<=cfelseif))[^>]+)\\s*(/?)>",
"template": "<(%(tag_name)s)(?:\\s+%(attributes)s)*\\s*(/?)>",

},

// Regex for end/closing tag. Only use a capturing group for name.
"end_tag": {
"xml": "</([\\w\\:\\.\\-]+)[^>]*>",
"xhtml": "</([\\w\\:\\.\\-]+)[^>]*>",
"html": "</([\\w\\:\\.\\-]+)[^>]*>",
"template": "</([\\w\\:\\.\\-]+)[^>]*>",
"cfml": "</([\\w\\:\\.\\-]+)[^>]*>"
}
}

bh_core.sublime-settings

// 主要是在  // Angle 处添加 Vue Component

{
"name": "angle",
"open": "(<)(?=[^?%]|$)",
"close": "(?:(?<=[^?%])|(?<=^))(>)",
"style": "angle",
"scope_exclude": [
"string",
"comment",
"keyword.operator",
"source.ruby.rails.embedded.html",
"source.ruby.embedded.html",
"storage.type.function.arrow.js",
"punctuation.accessor.php",
"punctuation.accessor.arrow.php",
"source.php meta.embedded.html punctuation.section.embedded.begin.php",
"source.php meta.embedded.js punctuation.section.embedded.begin.php",
"source.php meta.embedded.css punctuation.section.embedded.begin.php"
],
"language_filter": "whitelist",
"language_list": [
"HTML",
"HTML 5",
"XML",
"PHP",
"HTML (Rails)",
"HTML (Jinja Templates)",
"HTML (Jinja2)",
"HTML (Twig)",
"HTML (Django)",
"HTML+CFML",
"ColdFusion",
"ColdFusionCFC",
"laravel-blade",
"blade",
"Handlebars",
"AngularJS",
"Java Server Pages (JSP)",
"Vue Component" // !!!! 添加了vue支持
],
"plugin_library": "bh_modules.tags",
"enabled": true
},
{
// Debug logging
"debug_enable": false,

// When only either the left or right bracket can be found
// this defines if the unmatched bracket should be shown.
"show_unmatched": true,

// Do the opposite of `show_unmatched` for the languages listed below
"show_unmatched_exceptions": [],

// Enable high visibility by default when sublime starts up
// If sublime is already running and this gets changed,
// you will not see any changes (restart required to see change)
"high_visibility_enabled_by_default": false,

// Experimental: Creates a visible bar at the beginning of all lines between
// multiline bracket spans.
"content_highlight_bar": true,

// Show hover popup
// This will show a hover popup when mousing over
// the visible bracket if the other
// highlighted matching bracket is off screen.
// It will show line text of the off screen bracket -/+ 128 chars
// from the bracket start and end points.
// A link will be available allowing the user to click and jump to
// the other bracket.
"show_offscreen_bracket_popup": true,

// If enabled with `show_offscreen_bracket_popup`,the popup will be shown
// even if brackets are onscreen.
"show_bracket_popup_always": false,

// Adjust char per line context of bracket popup.
"popup_char_context": 120,

// Adjust number of lines of additional context
// that are shown when brackets are vertically off screen.
// Specified line count is split to context before and after the target line.
// So a value of 4 would give you two lines of context before and two lines after.
"popup_line_context": 2,

// Experimental: Use `popup_bracket_emphasis` to customize the popup's bracket emphasis color
"use_custom_popup_bracket_emphasis": false,

// Experimental: Specify the scope (to get color) to emphasize the off screen bracket
// in popups. Alternatively you can use a hex value in the form `#rgb` or `#rrggbb`.
"popup_bracket_emphasis": "keyword",

// Experimental: Align the content highlight bar at the bracket indent level
"align_content_highlight_bar": true,

// Experimental: Allow bracket highlighter to search in widgets.
// Most widgets use Plain Text which BH should ignore,
// But regex find views views are usually regular expression
// Which should be the only views to trigger BH.
"search_in_widgets": false,

// Show brackets in the minimap.
// Depending on your highlight style, regions may not be visible in minimap.
// "underline" won't show up due to it being a style consisting of
// multiple zero width selections to create a fat underline.
// But the following styles should show up fine as they are normal regions styles:
// - thin_underline
// - solid
// - outline
// - squiggly
// - stippled
"show_in_minimap": false,

// High visibility style and color for high visibility mode
// (`solid`|`outline`|`underline`)
// ST3 has additional options of (`thin_underline`|`squiggly`|`stippled`)
"high_visibility_style": "outline",

// (scope|__default__|__bracket__)
"high_visibility_color": "scope",

// Match brackets only when the cursor is touching the inside of the bracket
"match_only_adjacent": false,

// Outside adjacent bracket matching
"bracket_outside_adjacent": true,

// Experimental: Special matching mode for block cursor.
// Essentially, this provides a matching mode that makes a little more
// sense to some in regards to the visual representation of block cursors.
// This will ignore `bracket_outside_adjacent`.
"block_cursor_mode": false,

// When `bracket_outside_adjacent` is set, and a plugin command explicitly sets
// `no_outside_adj` to `None` instead of `true` or the default `false`,
// this value will be used.
"ignore_outside_adjacent_in_plugin": true,

// When `block_cursor_mode` is set, and a plugin command explicitly sets
// "no_block_mode" to `None` instead of `true` or the default `false`,
// this value will be used.
"ignore_block_mode_in_plugin": true,

// Character threshold to search
"search_threshold": 5000,

// Ignore threshold
"ignore_threshold": false,

// Set mode for string escapes to ignore (`regex`|`string`)
"bracket_string_escape_mode": "string",

// Set max number of multi-select brackets that will be searched automatically
"auto_selection_threshold" : 10,

// Enable this to completely kill highlighting if "auto_selection_threshold"
// is exceeded. Default is to highlight up to the "auto_selection_threshold".
"kill_highlight_on_threshold": true,

// Disable gutter icons when doing multi-select
"no_multi_select_icons": false,

// Rules that define the finding and matching of brackets
// that are contained in a common scope.
// Useful for bracket pairs that are the same but
// share a common scope. Brackets are found by
// Finding the extent of the scope and using regex
// to look at the beginning and end to identify bracket.
// Use only if they cannot be targeted with traditional bracket
// rules.
"scope_brackets": [
// Quotes
{
"name": "py_single_quote",
"open": "(?:u|b|f)?r?((?:'')?')",
"close": "((?:'')?')",
"style": "single_quote",
"scopes": ["string", "meta.string"],
"language_filter": "whitelist",
"language_list": [
"Python",
"PythonImproved",
"MagicPython"
],
"sub_bracket_search": "true",
"plugin_library": "bh_modules.pyquotes",
"enabled": true
},
{
"name": "py_double_quote",
"open": "(?:u|b|f)?r?((?:\"\")?\")",
"close": "((?:\"\")?\")",
"style": "double_quote",
"scopes": ["string", "meta.string"],
"language_filter": "whitelist",
"language_list": [
"Python",
"PythonImproved",
"MagicPython"
],
"sub_bracket_search": "true",
"plugin_library": "bh_modules.pyquotes",
"enabled": true
},
{
"name": "csharp_double_quote",
"open": "\\$?@?(\")",
"close": "(\")",
"style": "double_quote",
"scopes": ["string.quoted.double", "meta.string.interpolated"],
"language_filter": "whitelist",
"language_list": ["C#"],
"sub_bracket_search": "true",
"enabled": true
},
{
"name": "single_quote",
"open": "(')",
"close": "(')",
"style": "single_quote",
"scopes": [
"meta.attribute-with-value.style.html -entity.other.attribute-name.style.html -punctuation.separator.key-value.html",
"source.ruby string.quoted, source.ruby meta.interpolation",
"string",
"string.quoted"
],
"language_filter": "blacklist",
"language_list": ["Plain text", "Hex"],
"sub_bracket_search": "true",
"enabled": true
},
{
"name": "double_quote",
"open": "(\")",
"close": "(\")",
"style": "double_quote",
"scopes": [
"meta.attribute-with-value.style.html -entity.other.attribute-name.style.html -punctuation.separator.key-value.html",
"source.ruby string.quoted, source.ruby meta.interpolation",
"string",
"string.quoted"
],
"language_filter": "blacklist",
"language_list": ["Plain text", "Hex"],
"sub_bracket_search": "true",
"enabled": true
},
{
"name": "backtick_quote",
"open": "(`)",
"close": "(`)",
"style": "single_quote",
"scopes": [
"string.interpolated.ruby",
"string.interpolated.backtick.shell",
"string.template-string.js",
"string.template.js, meta.template.expression.js"
],
"language_filter": "whitelist",
"language_list": ["Ruby", "Shell-Unix-Generic", "Bash", "JavaScript", "JavaScriptNext"],
"sub_bracket_search": "true",
"enabled": true
},
// Regex for different Languages
{
"name": "jsregex",
"open": " *(/)",
"close": "(/)[igm]*",
"style": "regex",
"scopes": ["string"],
"language_filter": "whitelist",
"language_list": ["JavaScript"],
"sub_bracket_search": "true",
"enabled": true
},
{
"name": "perlregex",
"open": "(?:m|s|tr)(.|\n)",
"close": "(.|\n)(?:[igmos]*)",
"style": "regex",
"scopes": ["string.regexp"],
"language_filter": "whitelist",
"language_list": ["Perl"],
"sub_bracket_search": "true",
"enabled": true
},
{
"name": "rubyregex",
"open": " *(/)",
"close": "(/)[imxo]*",
"style": "regex",
"scopes": ["string"],
"language_filter": "whitelist",
"language_list": ["Ruby", "RSpec", "Better RSpec"],
"sub_bracket_search": "true",
"enabled": true
},
// Markdown
{
"name": "mditalic",
"open": "(\\*|_)",
"close": "(\\*|_)",
"style": "default",
"scopes": ["markup.italic"],
"language_filter": "whitelist",
"language_list": ["Markdown", "Multimarkdown", "GithubFlavoredMarkdown", "Markdown Extended"],
"sub_bracket_search": "true",
"enabled": true
},
{
"name": "mdbold",
"open": "(\\*\\*|__)",
"close": "(\\*\\*|__)",
"style": "default",
"scopes": ["markup.bold"],
"language_filter": "whitelist",
"language_list": ["Markdown", "Multimarkdown", "GithubFlavoredMarkdown", "Markdown Extended"],
"sub_bracket_search": "true",
"enabled": true
},
{
"name": "mdcodeinline",
"open": "(`+)",
"close": "(`+)",
"style": "default",
"scopes": ["markup.raw.inline.markdown"],
"language_filter": "whitelist",
"language_list": ["Markdown", "Multimarkdown", "GithubFlavoredMarkdown", "Markdown Extended"],
"sub_bracket_search": "true",
"plugin_library": "bh_modules.mdcode",
"enabled": true
},
{
"name": "mdcodeblock",
"open": "\\s*(`{3,}|~{3,})",
"close": "(`{3,}|~{3,})\\n?",
"style": "default",
"scopes": ["markup.raw.block.fenced.markdown, markup.raw.block.markdown.fenced"],
"language_filter": "whitelist",
"language_list": ["Markdown", "Multimarkdown", "GithubFlavoredMarkdown", "Markdown Extended"],
"plugin_library": "bh_modules.mdcode",
"sub_bracket_search": "true",
"enabled": true
},
// LaTeX
{
"name": "latexmath_inline",
"open": "(\\$)",
"close": "(\\$)",
"style": "default",
"scopes": ["string.other.math.tex", "meta.environment.math.inline.dollar.latex"],
"language_filter": "whitelist",
"language_list": ["LaTeX", "LaTeX (TikZ)", "knitr (Rnw)"],
"sub_bracket_search": "true",
"enabled": true
}
],

// Rule definitions for finding and matching brackets.
// Brackets are found by using regex and can use scope
// qualifiers exclude certain matches.
// Once all matches are found, the closest pair surrounding
// the cursor are selected.
"brackets": [
// OCaml
{
"name": "ocaml_comment",
"open": "(\\(\\*)",
"close": "(\\*\\))",
"style": "default",
"scope_exclude": ["-comment"],
"language_filter": "whitelist",
"language_list": ["OCaml"],
"sub_bracket_search": "false",
"enabled": true
},
// Basic brackets
{
"name": "curly",
"open": "(\\{)",
"close": "(\\})",
"style": "curly",
"scope_exclude": [
"string",
"comment",
"source.regexp constant.character.escape",
"source.yaml-tmlanguage constant.character.escape"
],
"scope_exclude_exceptions": ["text.tex string.other.math"],
"language_filter": "blacklist",
"language_list": ["Plain text", "Hex"],
"find_in_sub_search": "true",
"ignore_string_escape": true,
"enabled": true
},
{
"name": "round",
"open": "(\\()",
"close": "(\\))",
"style": "round",
"scope_exclude_exceptions": [
"text.tex string.other.math",
"punctuation.definition.string.begin.shell",
"punctuation.definition.string.end.shell"
],
"scope_exclude": [
"string",
"comment",
"source.regexp constant.character.escape",
"keyword.control.conditional.patterns.end.shell",
"source.yaml-tmlanguage constant.character.escape"
],
"language_filter": "blacklist",
"language_list": ["Plain text", "Hex", "RTF"],
"find_in_sub_search": "true",
"ignore_string_escape": true,
"enabled": true
},
//XML
{
"name":"xml_cdata",
"open":"(<!\\[CDATA\\[)",
"close":"(\\]\\]>)",
"style":"default",
"language_filter": "whitelist",
"language_list": ["XML"],
"scope_exclude": [
"comment"
],
"enabled":true
},
{
"name": "square",
"open": "(\\[)",
"close": "(\\])",
"style": "square",
"scope_exclude": [
"string",
"source.regexp constant.character.escape",
"comment"
],
"scope_exclude_exceptions": ["text.tex string.other.math", "source.yaml-tmlanguage meta.value -constant.character.escape"],
"language_filter": "blacklist",
"language_list": ["Plain text", "Hex", "RTF"],
"find_in_sub_search": "true",
"ignore_string_escape": true,
"enabled": true
},
// PHP Angle
{
"name": "php_angle",
"open": "(<\\?)(?:php)?",
"close": "(\\?>)",
"style": "angle",
"scope_exclude": ["string", "comment", "keyword.operator"],
"language_filter": "whitelist",
"language_list": ["HTML", "HTML 5"],
"enabled": true
},
// Angle
{
"name": "angle",
"open": "(<)(?=[^?%]|$)",
"close": "(?:(?<=[^?%])|(?<=^))(>)",
"style": "angle",
"scope_exclude": [
"string",
"comment",
"keyword.operator",
"source.ruby.rails.embedded.html",
"source.ruby.embedded.html",
"storage.type.function.arrow.js",
"punctuation.accessor.php",
"punctuation.accessor.arrow.php",
"source.php meta.embedded.html punctuation.section.embedded.begin.php",
"source.php meta.embedded.js punctuation.section.embedded.begin.php",
"source.php meta.embedded.css punctuation.section.embedded.begin.php"
],
"language_filter": "whitelist",
"language_list": [
"HTML",
"HTML 5",
"XML",
"PHP",
"HTML (Rails)",
"HTML (Jinja Templates)",
"HTML (Jinja2)",
"HTML (Twig)",
"HTML (Django)",
"HTML+CFML",
"ColdFusion",
"ColdFusionCFC",
"laravel-blade",
"blade",
"Handlebars",
"AngularJS",
"Java Server Pages (JSP)",
"Vue Component"
],
"plugin_library": "bh_modules.tags",
"enabled": true
},
// CSSedit groups
{
"name": "cssedit_groups",
"open": "(/\\* *@group .*\\*/)",
"close": "(/\\* *@end *\\*/)",
"style": "default",
"scope_exclude": [],
"language_filter": "whitelist",
"language_list": ["CSS"],
"enabled": true
},
// Ruby embedded HTML
// !!! May conflict with `php_keywords` if enabled in same file !!!
{
"name": "ruby_embedded_html",
"open": "((?:(?<=<%)|(?<=^)|(?<==)|(?<=<<))\\s*\\b(?:if|begin|case)\\b(?!:)|(?:(?<=<%)|(?<=^))\\s*(?:(?:private|public|protected)\\s*)?def\\b[\\p{Ll}\\p{Lu}]*\\b(?!:)|(?:(?<=<%)|(?<=^))\\s*\\b(?:for|until|unless|while|class|module)\\b(?!:)|(?<!:)\\bdo\\b(?!:)|(?<=return)\\s*\\b(?:begin|case|for|until|while|class|module)\\b(?!:))",
"close": "(?<=[\\s;])(end)\\b(?!:)",
"style": "default",
"scope_exclude": ["text.html", "source", "comment", "string"],
"scope_exclude_exceptions": [
"source.ruby.rails.embedded.html -comment -string",
"source.ruby.embedded.html -comment -string"
],
"plugin_library": "bh_modules.rubykeywords",
"language_filter": "whitelist",
"language_list": ["HTML", "HTML 5", "HTML (Rails)"],
"enabled": true
},
// Ruby conditional statements
{
"name": "ruby",
"open": "((?:(?<=^)|(?<==)|(?<=<<))\\s*\\b(?:if|begin|case)\\b(?!:)|^\\s*(?:(?:private|public|protected)\\s*)?def\\b[\\p{Ll}\\p{Lu}]*\\b(?!:)|^\\s*\\b(?:for|until|unless|while|class|module)\\b(?!:)|(?<!:)\\bdo\\b(?!:)|(?<=return)\\s*\\b(?:begin|case|for|until|while|class|module)\\b(?!:))",
"close": "(?<=[\\s;])(end)\\b(?!:)",
"style": "default",
"scope_exclude": ["string", "comment"],
"plugin_library": "bh_modules.rubykeywords",
"language_filter": "whitelist",
"language_list": ["Ruby", "RSpec", "Better RSpec", "Ruby on Rails"],
"enabled": true
},
// C/C++ compile switches
{
"name": "c_compile_switch",
"open": "\\#[ \\t]*(if|ifdef|ifndef)\\b",
"close": "\\#[ \\t]*(endif)\\b",
"style": "c_define",
"scope_exclude": ["string", "comment"],
"language_filter": "whitelist",
"language_list": ["C++", "C", "Objective-C++", "Objective-C", "CCpp", "C Improved"],
"enabled": true
},
// PHP conditional keywords
// !!! May conflict with `ruby_embedded_html` if enabled in same file !!!
{
"name": "php_keywords",
"open": "(?:(?<=^)|(?<=<\\?php)|(?<=<\\?))\\s*(if|foreach|for|while|switch)\\b(?=.*?\\)\\s*:\\s*(?://.*?|/\\*.*?\\*/\\s*?)?(?:\\?>|$))",
"close": "(?:(?<=^)|(?<=<\\?php)|(?<=<\\?))\\s*(endif|endfor|endforeach|endwhile|endswitch)\\b(?=\\s*(?:;|;?\\?>))",
"style": "default",
"language_filter": "whitelist",
"scope_exclude": ["string", "comment", "text.html"],
"scope_exclude_exceptions": [
"source.php -comment -string"
],
"plugin_library": "bh_modules.phpkeywords",
"language_list": [
"HTML",
"HTML 5",
"PHP",
"HTML+CFML",
"ColdFusion",
"ColdFusionCFC"
],
"enabled": true
},
// Erlang conditional statements
{
"name": "erlang",
"open": "\\s*(\\b(?:if|case|begin|try|fun(?=\\s*\\()|receive)\\b)",
"close": "\\b(end)\\b",
"style": "default",
"scope_exclude": ["string", "comment"],
"language_filter": "whitelist",
"plugin_library": "bh_modules.lowercase",
"language_list": ["Erlang", "HTML (Erlang)"],
"enabled": true
},
//Bash
{
"name": "bash",
"open": "(?:(?<!\\\\\\n)(?:;|^|&|\\|)\\s*)\\b(if|case|while|select|until|for)\\s",
"close": "(?:(?<!\\\\\\n)(?:;|^)\\s*)\\b(fi|esac|done)(?=;|\\s|$)",
"style": "default",
"scope_exclude": ["string", "comment"],
"plugin_library": "bh_modules.bashsupport",
"language_filter": "whitelist",
"language_list": ["Shell-Unix-Generic", "Bash"],
"enabled": true
},
//Fish shell
{
"name": "fish",
"open": "(?:(?<!\\\\\\n)(?:;|^|&|\\||and|or|not)\\s*)\\b(begin|if|while|for|switch|function)(?:;|\\s)",
"close": "(?:(?<!\\\\\\n)(?:;|^)\\s*)\\b(end)(?=;|\\s|$)",
"style": "default",
"scope_exclude": ["string", "comment"],
"language_filter": "whitelist",
"language_list": ["fish"],
"enabled": true
},
// Lua
{
"name": "lua",
"open": "(?:(?<=[\\s;])|(?<=^))(if|function|do|repeat)\\b",
"close": "(?:(?<=[\\s;])|(?<=^))(end|until)\\b",
"style": "default",
"scope_exclude": ["string", "comment"],
"plugin_library": "bh_modules.luakeywords",
"language_filter": "whitelist",
"language_list": ["Lua"],
"enabled": true
},
// LaTeX
{
"name": "latexenv",
"open": "(\\\\begin{[^}]*})",
"close": "(\\\\end{[^}]*})",
"style": "tag",
"scope_exclude": ["comment"],
"plugin_library": "bh_modules.latexenvironments",
"language_filter": "whitelist",
"language_list": ["LaTeX", "LaTeX (TikZ)", "knitr (Rnw)"],
"sub_bracket_search": "true",
"enabled": true
},
// Pascal
{
"name": "pascal",
"open": "(?:(?<=^)|(?<=[\\s;]))(try|(?<=\\=\\s)(?:class|record|interface)|begin|repeat)\\b",
"close": "(?<=[\\s;])(end(?=[;\\s])|until(?=\\s))",
"style": "default",
"scope_exclude": ["string", "comment"],
"plugin_library": "bh_modules.pascalkeywords",
"language_filter": "whitelist",
"language_list": ["Pascal"],
"enabled": true
},
// Elixir
{
"name": "elixir",
"open": "\\b(do$|fn)\\b",
"close": "\\b(end)\\b",
"style": "default",
"scope_exclude": ["string", "comment"],
"language_filter": "whitelist",
"language_list": ["Elixir"],
"enabled": true
},
// CMake
{
"name": "cmake",
"open": "\\b(foreach|function|if|macro|while)\\b",
"close": "\\b(end(?:foreach|function|if|macro|while))\\b",
"style": "default",
"scope_exclude": ["-keyword.cmake"],
"plugin_library": "bh_modules.cmakekeywords",
"language_filter": "whitelist",
"language_list": ["CMake"],
"enabled": true
},
// `SINUMERIK 840D SL G-Code`
{
"name": "s840d_gcode",
"open": "\\b(IF(?!.*GOTO)|FOR|WHILE|REPEAT(?!.*GOTO))\\b",
"close": "\\b(END(?:IF|FOR|WHILE)|UNTIL)\\b",
"style": "tag",
"scope_exclude": ["string", "comment"],
"plugin_library": "bh_modules.s840d_gcode",
"language_filter": "whitelist",
"language_list": ["s840d_gcode"],
"enabled": true
},
// `SINUMERIK 840D SL RunMyHmi`
{
"name": "s840d_hmi",
"open": "^\\s*(//[ABGMS]|ACTIVATE|CHANGE|FOCUS|IF|LOAD|UNLOAD|OUTPUT|PRESS|SUB)\\b",
"close": "^\\s*(//END|END_(?:ACTIVATE|CHANGE|FOCUS|IF|LOAD|UNLOAD|OUTPUT|PRESS|SUB))\\b",
"style": "tag",
"scope_exclude": ["string", "comment"],
"plugin_library": "bh_modules.s840d_hmi",
"language_filter": "whitelist",
"language_list": ["s840d_hmi"],
"enabled": true
}
],

// `user_scope_brackets` and `user_brackets` will be appended
// to the tail of scope_brackets and brackets respectively
// If you have custom rules that you don't want to commit to
// the official list, and do not need to be inserted before
// one of the official definitions, this is a good place to
// put yours rules and keep in sync with the defaults.
// If you want to disable all gutter icons, please set icon
// to none for all region with user_bracket_styles
"user_scope_brackets": [],
"user_brackets": [],
"user_bracket_styles": {},

// Define region highlight styles
"bracket_styles": {
// `default` and `unmatched` styles are special
// styles. If they are not defined here,
// they will be generated internally with
// internal defaults.

// `default` style defines attributes that
// will be used for any style that does not
// explicitly define that attribute. So if
// a style does not define a color, it will
// use the color from the "default" style.
"default": {
"icon": "dot",
// Support the old convention of `brackethighlighter.default`
// for themes that already provide something.
// As this has always been the only one we've provided
// by default, all the others will use region-ish colors.
// "color": "region.yellowish brackethighlighter.default",
"color": "#fff",
"style": "underline"
},

// This particular style is used to highlight
// unmatched bracket pairs. It is a special
// style.
"unmatched": {
"icon": "question",
"color": "region.redish",
// "color": "region.yellowish brackethighlighter.default",
"style": "outline"
},

// User defined region styles
"curly": {
"icon": "curly_bracket",
// "color": "region.purplish"
// "color": "#FCFF00",
"color": "region.yellowish brackethighlighter.default",
// "style": "underline"
},
"round": {
"icon": "round_bracket",
"color": "region.yellowish"
// "color": "#FCFF00",
// "style": "underline"
},
/* 中括号 */
"square": {
"icon": "square_bracket",
// "color": "region.bluish"
"color": "region.yellowish brackethighlighter.default",
// "style": "underline"
},
"angle": {
"icon": "angle_bracket",
"color": "region.orangish"
// "color": "#FCFF00",
// "style": "underline"
},
"tag": {
"icon": "tag",
"color": "region.orangish"
// "color": "#FCFF00",
// "style": "underline"
},
"c_define": {
"icon": "hash",
"color": "region.yellowish"
// "color": "#FCFF00",
// "style": "underline"
},
"single_quote": {
"icon": "single_quote",
"color": "region.greenish"
// "color": "#FCFF00",
// "style": "underline"
},
"double_quote": {
"icon": "double_quote",
"color": "region.greenish"
// "color": "#FCFF00",
// "style": "underline"
},
"regex": {
"icon": "star",
"color": "region.greenish"
// "color": "#FCFF00",
// "style": "underline"
}
}
}