This behavior is caused by the auto_match_enabled
and is meant to prevent to accidentally add extra closing brackets, but it’s a kind of stupid in terms of detecting unbalanced brackets.
The easiest way to disable this “habit” without loosing auto-matching is to add some key bindings to User\Default.sublime-keybindings.
{ "keys": [")"], "command": "insert", "args": {"characters": ")"} },
{ "keys": ["]"], "command": "insert", "args": {"characters": "]"} },
{ "keys": ["}"], "command": "insert", "args": {"characters": "}"} },
{ "keys": ["'"], "command": "insert", "args": {"characters": "'"}, "context":
[
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
{ "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true },
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true },
]
},
{ "keys": ["\""], "command": "insert", "args": {"characters": "\""}, "context":
[
{ "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
{ "key": "following_text", "operator": "regex_contains", "operand": "^\"", "match_all": true },
{ "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true },
{ "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true },
]
},
Be sure to duplicate the context for quotations from the default file to only overwrite the default “move” command.