Как вы уже поняли, поведение ST по умолчанию заключается в "вставке наилучшего завершения", когда перед кареткой стоит только пробел в строке.
К счастью, ST очень настраиваем, и мы можем переопределить это поведение на то, что вы желаете.
Чтобы сделать это, добавьте это в ваши пользовательские сочетания клавиш:
{ "keys": ["tab"], "command": "indent",
"context":
[
{ "key": "preceding_text", "operator": "regex_match", "operand": "^\\s*$", "match_all": true },
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
{ "key": "following_text", "operator": "not_regex_match", "operand": "^$", "match_all": true },
{ "key": "auto_complete_visible", "operator": "equal", "operand": false },
]
},
{ "keys": ["tab"], "command": "insert", "args": { "characters": "\t" },
"context":
[
{ "key": "preceding_text", "operator": "regex_match", "operand": "^\\s*$", "match_all": true },
{ "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
{ "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true },
{ "key": "auto_complete_visible", "operator": "equal", "operand": false },
]
},
Это говорит ST, что когда вы нажимаете Tab , он должен иметь отступ для текста, когда выполняются следующие условия:
- нет выбора
- каретка находится в начале строки или перед ней ставится только пробел (то есть отступ)
- после (/ справа от) каретки есть текст
- всплывающее окно автозаполнения не отображается
Кроме того, когда все эти условия выполняются, за исключением того, что в строке после каретки есть текст, мы сообщаем ST вставить символ табуляции. Примечание: ST переведет это на правильное количество пробелов, если вы используете пробелы для отступа.
(старое поведение отступа при нажатии Tab с многострочным выделением останется, как и другие привязки по умолчанию, когда наши условия не будут выполнены.)