bugfix> sublimetext3 > 投稿

ctrl + shift + [を押すとスニペット \{\} が挿入される崇高なテキストでスニペットを作成しようとしています 、しかし、エスケープ文字を使用してそれを行う方法を見つけるのに問題があります。

ここに私が持っているものがあります:

{
    "keys": ["ctrl+shift+["], 
    "command": "insert_snippet", 
    "args": {
        "contents": "\\{\\}"
    }
}

しかし、キーボードショートカットを使用すると、 {} のみが挿入されますバックスラッシュなし!奇妙なのは、 "\\" に変更すると出力は \ です 、ただし、2つのバックスラッシュの後に何かが来ると、バックスラッシュは無視されます。

次のように各文字を個別に挿入するChainOfCommandパッケージを使用して、さまざまな回避策を見つけました。

{ 
    "keys": ["ctrl+shift+["], 
    "command": "chain", 
    "args": {
        "commands": [
            ["insert_snippet", {"contents": "\\"}],
            ["insert_snippet", {"contents": "{"}],
            ["insert_snippet", {"contents": "\\"}],
            ["insert_snippet", {"contents": "}"}]
        ]
    }
}

しかし、それに関する問題は、次にctrl-zを元に戻すと、スニペット全体を削除するのではなく、各文字を1つずつ削除することです。これは面倒です。また、それは物事の原則であり、私は確かに1つのスニペットでそれを行うことができるはずです!

誰かが私がそれを機能させる方法を知っていますか?

回答 1 件
  • 直感的ではないかもしれませんが、次のキーバインドを使用すると \{\} が挿入されます :

    {
        "keys": ["ctrl+shift+["], 
        "command": "insert_snippet", 
        "args": {
            "contents": "\\\\{\\\\}"
        }
    },
    
    

    この理由は、https://github.com/SublimeTextIssues/Core/issues/1878#issuecomment-328133400で説明されています。

    Due to compatibility with TextMate snippets, the following characters must be escaped to be literal:

    \${}

         

    その他の \{CHAR}  逐語的に生成されます。これは、単一のバックスラッシュで十分であるが、2つが単一になる理由を説明しています。

    役立つ場合は、STコンソールで次のコマンドを実行して、JSONエクストラエスケープの違いを確認することもできます(たとえば、 .sublime-snippet 内の同じコンテンツと比較して)  ファイル):

    view.run_command('insert_snippet', { 'contents': r'\\{\\}' })
    
    

あなたの答え