Завершение кавычки f-строками в Python 3 для Sublime Text - PullRequest
0 голосов
/ 12 ноября 2018

Когда я набираю кавычку в Sublime Text 3 (3176), она автоматически завершается закрывающей кавычкой.

например, я набираю " Я получаю "<cursor>"

Это здорово, и теперь я ожидаю этого все время.Однако с введением f-строк в Python, если я наберу f", я получу f"<cursor> вместо f"<cursor>".Это не большая проблема, но это не так плавно, как мне кажется.

Я думаю, что правила автозаполнения не добавляют лишних кавычек, если слева от курсора есть символ, как это обычно бывает, когда вы пытаетесь ввести закрывающую кавычку.

Есть ли способ изменить правила, чтобы он вводил закрывающую кавычку, если символ слева - "f"?Чтобы избежать странного случая использования, когда вы действительно пытаетесь завершить строку, заканчивая символом "f", возможно, может существовать условие and для проверки открывающей скобки, пробела или знака равенства слева от "f".«для случаев интенсивного использования print(f"string", foo = f"string" и foo =f"string".

1 Ответ

0 голосов
/ 12 ноября 2018

Да, это возможно. Просто добавьте в свой файл пользовательских клавиш следующее (меню «Настройки» -> «Привязки клавиш». Справочная таблица пользовательских клавиш):

// Auto-pair quotes even after string modifiers.
// Copied over from the default bindings with modifications to `preceding_text`
// and an added selector condition.
{ "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\"$0\""}, "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": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
        { "key": "preceding_text", "operator": "regex_contains", "operand": "(?i)\\b[bfru]+$", "match_all": true },
        { "key": "selector", "operator": "equal", "operand": "source.python" },
        { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true }
    ]
},
{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'$0'"}, "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": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true },
        { "key": "preceding_text", "operator": "regex_contains", "operand": "(?i)\\b[bfru]+$", "match_all": true },
        { "key": "selector", "operator": "equal", "operand": "source.python" },
        { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true }
    ]
},

По умолчанию он будет доставлен в следующей сборке ST.

Он использует селектор области действия, чтобы определить, находится ли каретка внутри строки или нет, поэтому случай завершения строки символом f не представляет проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...