Personalização de caracteres “wrap” em Sublime Text

4

Em Sublime Text, destacando qualquer texto e pressionando qualquer um dos seguintes símbolos:

'
"
(
{
[

fará com que toda a seção destacada esteja rodeada pela tecla que você pressionou (ou pelo símbolo correspondente). Existe uma opção para adicionar mais caracteres a esta lista? Eu usaria com bastante frequência | e 'no desenvolvimento do Ruby.

    
por Devon Parsons 03.02.2015 / 20:41

1 resposta

6

Como acontece, eu já configurei as combinações de teclas para backticks ('), então modificá-las para pipes | deve ser fácil. Para fazer isso, abra Preferences -> Key Bindings-User . Se o arquivo estiver vazio, adicione a abertura e o fechamento dos colchetes [] em linhas separadas e cole o seguinte entre eles:

// Auto-pair backticks
{ "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": "not_regex_contains", "operand": "['a-zA-Z0-9_]$", "match_all": true },
        { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double", "match_all": true }
    ]
},
{ "keys": ["'"], "command": "insert_snippet", "args": {"contents": "'${0:$SELECTION}'"}, "context":
    [
        { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
        { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }
    ]
},
{ "keys": ["'"], "command": "move", "args": {"by": "characters", "forward": true}, "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 }
    ]
},
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
    [
        { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
        { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
        { "key": "preceding_text", "operator": "regex_contains", "operand": "'$", "match_all": true },
        { "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true }
    ]
},

Para caracteres de pipe, você precisará modificar alguns dos regexes um pouco, pois | tem um significado especial. O seguinte funciona para mim:

// Auto-pair pipes in Ruby
{ "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": "not_regex_contains", "operand": "[\|a-zA-Z0-9_]$", "match_all": true },
        { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double", "match_all": true },
        { "key": "selector", "operator": "equal", "operand": "source.ruby", "match_all": true }
    ]
},
{ "keys": ["|"], "command": "insert_snippet", "args": {"contents": "|${0:$SELECTION}|"}, "context":
    [
        { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
        { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true },
        { "key": "selector", "operator": "equal", "operand": "source.ruby", "match_all": true }
    ]
},
{ "keys": ["|"], "command": "move", "args": {"by": "characters", "forward": true}, "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": "equal", "operand": "source.ruby", "match_all": true }
    ]
},
{ "keys": ["backspace"], "command": "run_macro_file", "args": {"file": "res://Packages/Default/Delete Left Right.sublime-macro"}, "context":
    [
        { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
        { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
        { "key": "preceding_text", "operator": "regex_contains", "operand": "\|$", "match_all": true },
        { "key": "following_text", "operator": "regex_contains", "operand": "^\|", "match_all": true },
        { "key": "selector", "operator": "equal", "operand": "source.ruby", "match_all": true }
    ]
}

Você notará que eu adicionei o seletor source.ruby aos | keybindings - você pode remover ou alterar isso se quiser usá-lo em outros arquivos além do código Ruby. Eu não adicionei ao código backtick porque eles podem ser usados em outras sintaxes - Python e Markdown são os que vêm à minha mente primeiro.

    
por 03.02.2015 / 23:56