

私はsublimetextのプラグインを開発しています。  
ダブルクリックで日本語を単語レベルで分割可能にするプラグインです。  
<https://github.com/ASHIJANKEN/JapaneseWordSeparator>

現在このプラグインはPackage Controlに登録申請中で、管理者と色々やり取りをしています。  
<https://github.com/wbond/package_control_channel/pull/6992#issuecomment-383399294>  
その中で、「この機能は日本語の文章の時のみ有効になるように、.sublime-
keymapや.sublime_mousemapの中で、以下のようにcontextを使ってキーバインディングにマスクをかけたほうがいい」と言われました。

[code]

    {
        "keys": ["ctrl+left"],
        "command": "key_select_jp",
        "args": {"key": "left"},
        "context": [
            { "key": "preceding_text", "operator": "regex_contains", "operand": "\\p{Jpan}$" }
        ]
    }
    
[/code]

これを元に以下のようなcontextを作ってみたのですが、どうもうまく動きません。operandを色々いじっているのですが、どんな時でも(英語の文章でも)このプラグインが有効になってしまいます。

[code]

    //パターン1
    "context": [
      { "key": "preceding_text", "operator": "regex_contains", "operand": "[\\p{Katakana}\\p{Hiragana}\\p{Han}。、，．！？　・「」：”（）ーﾟﾞ]$" }
    ]
    
    //パターン2
    "context": [
      { "key": "preceding_text", "operator": "regex_contains", "operand": "[\\p{Katakana}\\p{Hiragana}\\p{Han}。、，．！？　・「」：”（）ーﾟﾞ]" }
    ]
    
    //パターン3
    "context": [
      { "key": "preceding_text", "operator": "regex_contains", "operand": "[あ-んア-ン一-龠ヴ。、，．！？　・「」：”（）ーﾟﾞ]" }
    ]
    
    //など。regex_matchも試したが効果なし。
    
[/code]

正規表現のやり方が悪いのだとは思うのですが、どう指定してやったら解決するのかわかりません。  
どなたか何かヒントとなりそうな情報をお持ちの方はいらっしゃいませんか?  
よろしくお願いいたします。

ちなみにcontextについては、以下のサイトが分かりやすいかと思います。  
<https://qiita.com/shibainurou/items/dc18f2dfc91e36adb208#%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%8C%E3%81%82%E3%82%8B%E5%A0%B4%E5%90%88>


CC BY-SA 4.0
2018-05-22T17:40:48.627
44167
2018-05-23T06:38:06.353
2018-05-22T17:51:47.367
25734
25734
question
正規表現 sublimetext
sublimetextで、contextを用いて、日本語の時のみ有効になるキーバインディングを作成したい


私も Sublime Text のパッケージをいくつか作って Package Control に登録しています。

お作りになったパッケージを Sublime Text の `Packages` ディレクトリに入れて、パターン 1-3 で試してみたところ、パターン 1 2
はうまく行きませんが、パターン 3 だと問題なく動作するようです。

ここで「問題なく動作する」というのは具体的には次のことを指しています。

  * カーソルがある行の、カーソルよりも前の部分に日本語があるときは `key_select_jp` コマンドが反応する
  * カーソルがある行の、カーソルよりも前の部分に日本語が無いときは `set_motion` コマンドが反応する（＝ Sublime Text のデフォルトの動き）

ちなみに、私が動作確認をしたときの `.sublime-keymap` の一部は次のとおりです。

[code]

        {
            "keys": ["super+left"],
            "command": "key_select_jp",
            "args": {"key": "left"},
            "context": [
                {
                    "key": "preceding_text",
                    "operator": "regex_contains",
                    "operand": "[あ-んア-ン一-龠ヴ。、，．！？　・「」：”（）ーﾟﾞ]"
                }
            ]
        },
    
[/code]

私の環境は macOS です。

以下、いくつかコメントです。

  * 確証はありませんが、パターン 1 2 の `\\p{Katakana}` といった表現はここでは使えないのではないかと思います。一度確認してみてください。
  * ご存知のとおり `context` のドキュメントはあまり無いようなので、他のパッケージを参考にされるのがよいかと思います。すでにパッケージをたくさんインストールされていれば、 `Packages` ディレクトリ以下で検索すると参考例を見ることができます。

ご参考になれば幸いです :)


CC BY-SA 4.0
2018-05-23T06:38:06.353
44180
2018-05-23T06:38:06.353
28632
44167
answer