0

私は新しいSublimeText2ユーザーであり、現時点では主にMarkdown/MultiMarkdownに使用しています。私の執筆ワークフローでは、_underscore_すべてのイタリック体にペアリングを使用**double asterisk**し、すべての太字テキストにペアリングを使用しています。オートペアリングの基本的なコードのいくつかを使用して、単一のアスタリスクを入力した後、二重のアスタリスクをペアリングするようにしました。これは私が望む正確な動作ですが、通常のペアリングバックスペース機能を機能させることができませんでした。

[]などの他の自動ペア文字では、開始文字を入力した後にバックスペースを押すと、両方のペア文字が削除されます。しかし、これらの二重アスタリスクのペアの1つをバックスペースすると、4つのアスタリスクのうちの1つだけが削除されます(***)。

これが可能かどうか誰かが知っていますか?ボーナスポイントについては、2番目のキーバインドスニペット(タブを押して自動ペアリングの最後までスキップできる)で、の最後までタブで移動できるようにしたいと思います**TEXT**

// Auto-pair double asterisks (type a single asterisk to invoke)
{ "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": "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 }
    ]
},
//Tab skips to end of autopaired characters
{ "keys": ["tab"], "command": "move", "args": {"by": "characters", "forward": true},
  "context": [ { "key": "selection_empty", "operator": "equal", "operand": true },
            { "key": "preceding_text", "operator": "not_regex_match", "operand": "[[:space:]]*", "match_all": true },
            { "key": "following_text", "operator": "regex_contains", "operand": "^[\"'\\)\\}\\]\\_]", "match_all": true },
            { "key": "auto_complete_visible", "operator": "equal", "operand": false },
            { "key": "has_next_field", "operator": "equal", "operand": false } ] },
4

1 に答える 1

0

*は正規表現の特殊文字なので、エスケープする必要があります。キーは次のbackspaceようになります。

"keys": ["backspace"], "command": "run_macro_file", "args": {"file": "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 }
]

inkeyregexpオペランドとinkeyregexpオペランドに\\*$注意してください。とにかく、両方を削除するには、2回ヒットする必要があります:両方を一度に削除することはできないと思います。preceding_text^\\*following_textbackspace*

必要なスニペットは次のようになります。

<snippet>
    <content><![CDATA[
**${1:TEXT}** ${2:}
]]></content>
    <tabTrigger>your_snippet</tabTrigger>
</snippet>

your_snippetトリガーとして必要なテキストに変更する必要があります。

于 2013-01-10T16:10:46.417 に答える