半角と全角のアンダーバー("_"と"_")の文字種についてのちょっとしたご報告

  1. はじめまして!
    3.0.0から使わせていただくようになった新米ユーザーです。
    わたしはプログラマーさんではなく、日本語の文章を書くこととテキストの整形にしか使わない(使えない)のですが、
    Meryは色んなことがスマートにできて本当に驚いています。
    特に矩形選択などは「今までモードを切り替えていたのはなんだったんだ?!」という感じです。

    さて、ときどきランダムな文字列を目視で確認したい事があり、
    以前使用していたテキストエディタでは文字種によって色分けをしていました。
    具体的には"l|1Ii"などの紛らわしい文字を「えーっと、これはアルファベットの小文字のLかな?」などと迷わずに識別したい時があるのです。

    Meryでも同じことをしようと思いましたが、半角のアンダーバーが意図しない表示になってしまいました。

    例えば、
    ツール→オプション→表示の表示項目にて下記のように文字色を決めます。

    半角英字 青
    半角記号 緑
    全角英字 赤
    全角記号 桃

    その後、
    A_B_
    をタイプしてみると
    青緑赤桃の順で表示されるとの期待に反して
    青青赤桃の順で表示されます。

    全角のアンダーバーは記号扱いですが、
    半角のアンダーバーは英字扱いになっている事が原因のようです。
    もしかすると理由があっての事なのかもしれませんが、
    プログラムの世界の事情が分からない人間からすると、半角のアンダーバーも記号扱いになってくれると嬉しいです。

    上記はWindows10 64bit上のMery v3.0.0の64bit版にて確認しましたが、
    Mery v3.0.1の64ビット版のZIPを解凍してMery.exeを起動した環境(他は一切カスタマイズしておらず、マクロやプラグインも導入していない状態)でも同じでした。

    なお、現在は専用の構文ファイルと専用のテーマを作り、
    それらを組み合わせることでアルファベットの小文字と大文字と数字と(アンダーバーを含む)記号が、それぞれ別の色で表示されるようにできたので実は困っておりません(笑)
    もしもテーマ内だけでアルファベットの大文字と小文字に対しても別の色を指定できるようになってくれたら嬉しい限りですが、外部テーマのこれまでの資産もありますし、きっと難しいですよね?

     |  ちかひら  |  返信
  2. はじめまして。Mery を開発している者です。

    > Meryは色んなことがスマートにできて本当に驚いています。

    このたびは Mery をお試しいただきありがとうございます。

    > 特に矩形選択などは「今までモードを切り替えていたのはなんだったんだ?!」という感じです。

    矩形選択はメニューからモードを切り替えて使うエディターが多いですね。

    Mery はメモ帳を使っているかたが気軽に試せるエディターを目指していて、[矩形選択] のような難しそうな機能はメニューに表示していませんが、[矩形選択] を知ってる人は Alt で矩形選択が出来るか試してみたら普通に出来た、ぐらいの直感的に使えるエディターをコンセプトに開発しています。

    > Meryでも同じことをしようと思いましたが、半角のアンダーバーが意図しない表示になってしまいました。

    Mery では半角のアンダーバーは [半角英字] に分類される仕様となっています。

    プログラムの世界というわけではないのですが、パソコンですと一般的にアンダーバーは英字を連結して 1 つの単語にする意味があります。

    Mery の [半角英字] などの色分けは、文字に色を付けるためだけではなくて、その区切りが文字の区切りとなっており、例えば文字をダブルクリックしたときに選択される単語もその区切りを基準にしています。

    なので、例えば apple-orange をダブルクリックすると、apple と orange で分割されますが、apple_orange なら 1 つの単語として選択できたほうが都合が良いというわけです。

    構文ファイル (編集モード) を作成されたとのことなので、その方法で合ってます。

    編集モードは上記の単語分割の処理などとは関係なく、ユーザーさんが自由に色分けを設定するためのもので、基本的にユーザーさんは編集モードを作成して好みの色分けを作っていくかたちになります。

    今回のアンダーバーのように編集モードに関係なく常に注意色として別の色を付けておきたい場合は、マーカー機能が使えます。

    マーカー機能は常にその文字に目印をつける機能なので、1 と l や 0 と O などに編集モードにかかわらず色を付けることができます。

    マーカー機能の使い方は以下の記事にて紹介していますので、ご興味がございましたらどうぞ。
    https://www.haijin-boys.com/software/mery/mery-tips#9

     |  Kuro  |  返信
  3. > Mery の [半角英字] などの色分けは、文字に色を付けるためだけではなくて、その区切りが文字の区切りとなっており

    改めてプログラムを確認してみましたところ、上記の仕様は違っていて、色分けと単語の区切りの処理は別々となっておりました。

    仕様のように言ってしまって申し訳ありません。

    構文ファイル (編集モード) でご対応いただいているということですが、この部分につきましてはその方法でご対応いただいて問題ございません。

    アンダーバーの色を [半角英字] ではなく [半角記号] に含めたいということで、ご要望として今後の開発の参考にさせていただきたいと思います。

     |  Kuro  |  返信
  4. Kuro さん
    お返事ありがとうございます!
    プログラムの確認までして頂いてお手数おかけしました。

    それにしてもMeryは本当に直感的に使えて最高です!
    いまやってみたら、Tokyoなどの文字列を選択状態にして、D&Dで任意の場所へ移動、その際にCtrlを併用すればコピーになるんですね!!
    初めてExcelを触った時のようなワクワクがこみあげてきました笑

    先日はapple-orangeとapple_orangeの違いを理解していなかったので、あのような投稿になってしまったのですが、
    ナルホドそのような理由があったのですね!
    たしかにWebブラウザー上でapple-orangeとapple_orangeをダブルクリックしても同様の挙動になりました。

    半角アンダーバー_を記号としてみなしてもらえたら便利などと思ってしまっていたのは、上記の事情を知らなかった事が第一にありました。
    また、"l|11liIi"などの紛らわしい文字を色を使って識別しやすくするという目的の為には
    数字やアルファベットと共に半角記号をヒットさせなくてはなりませんが、
    自分の力量では構文ファイルにて全ての半角記号をヒットさせる事ができなかったのです(それゆえテーマ設定で半角記号のヒットさせる必要があった)。

    加えて、対応する括弧を目立たせてくれる親切機能をテーマ設定にて解除する必要もあったため、
    紛らわしい文字を色を使って識別したくなった時は、構文ファイルとテーマの両方をソレ専用のものに切り替える必要がありました。
    それならテーマで一元管理できた方が何かと便利だと思ってしまいました(apple-orangeとapple_orangeを書き分ける違いを理解していなかったので)。

    しかし、教えていただいたマーカー機能!
    これにも正規表現が使えるということで、こちらで目的のことを達成できました。
    (対応する括弧の強調に関しては、気になった時だけテーマを切り替えればいいや!と思えてきました)
    うーん、マーカー機能も本当に便利(笑)

    ですので、半角アンダーバーを記号に含めるという提案のことは気にして頂かなくても大丈夫です。

    (ここからが少々ややこしくなるのですが、、、)

    便利になったら便利になったで更に欲が出てしまうもので
    「こんな便利なマーカー機能を上記の目的の為だけに使い切ってしまうのは勿体ないぞ」
    、、、と感じるようになり、もう一度構文ファイルの編集に挑戦しました。

    マーカー機能で理想的な動作を獲られた正規表現の各ルールを構文ファイルにコピペすれば理想的な動作になると予測できたのと、構文ファイルはタブ(文書)毎に個別の設定を適用できるのことが都合良かったのです。

    しかし、構文ファイルではマーカー機能と同じ動作にはなってくれません。

    下記は(上記の"l|11liIi"を区別するものではなく)簡略化した構文ファイルですが、、、

    #Word Color=0, WholeWord=False, RightSide=False, RightAll=False, MatchCase=False, InsideTag=False, RegEx=True
    2021|Tokyo

    #Word Color=1, WholeWord=False, RightSide=False, RightAll=False, MatchCase=False, InsideTag=False, RegEx=True
    [0-9]|Osaka

    #Word Color=2, WholeWord=False, RightSide=False, RightAll=False, MatchCase=False, InsideTag=False, RegEx=True
    2020|Olympic

    この構文ファイルを使うと0番色で表示させたい"2021"の文字列が1番色で表示されてしまいます。
    (他の5つに関しては狙い通りの色で表示できています)

    "2021"と"2020"に関しては[0-9]の条件も満たしてしまうのが原因かと思うのですが、このような場合に優先される条件を特定できないでおります。
    過去のディスカッションに、「強調文字列(構文ファイル)はMery内部で複雑な処理をしている」と書かれていたので
    もしかするとそれが理由かも?とも思ったり、そもそも、自分が何か勘違いしているのではないか?とも思ったり、、、

    仮に前者だとすると、偶然的に理想的な動作をする構文ファイルを作って保存できたとしても、
    Meryで開く文書の内容やタイミングによっては挙動(色)が変化する可能性も覚悟しておいた方が良いということなのかな??とも思ったり、、、

    このようなケースではどうするのがベストか分からず、ご相談させて頂きました。

     |  ちかひら  |  返信
  5. ご返信ありがとうございます。

    > それにしてもMeryは本当に直感的に使えて最高です!

    ありがとうございます ^^

    私はキーボードよりもマウスで操作することのほうが多いので、マウス操作を意識した作りになっている部分もありますね。

    > "2021"と"2020"に関しては[0-9]の条件も満たしてしまうのが原因かと思うのですが、このような場合に優先される条件を特定できないでおります。

    構文ファイルにおける強調文字列の優先順位ですが、おっしゃるとおり Mery 側で独自の処理で順位付けをしていますのでユーザーさん側で優先順位を操作することはできません。

    というのも、構文ファイルの強調文字列は、編集モードにもよりますが多い場合は 1,000 を超える単語が登録されることもあります。

    これらを上から順番にすべてチェックしていくとなると動作速度が非常に遅くなってしまいますので、Mery では動作速度を重視した優先順位をつけて色分けをしています。

    マーカー機能のほうはそんなにたくさんの単語を登録することは少ないと思いますので、登録画面にも [上へ] と [下へ] のボタンが用意されており、上から順番に並べることでユーザーさんが色分けの優先順位を決められるようになっています。

    > Meryで開く文書の内容やタイミングによっては挙動(色)が変化する可能性も覚悟しておいた方が良いということなのかな??とも思ったり、、、

    タイミングは関係ないはずですが、色分けが最短で済むような処理になっているので文書の内容によってヒットする色が変わる可能性はあると思います。

    ところで "l|11liIi" のように紛らわしい文字を区別したいということでしたら、区別しやすく作られているフォントをご利用されるのも良いかもしれません。

    視認性が良くて美しい「白源 (はくげん/HackGen」フォントさんですが、作者様が Mery 向けにも調整してくださっていて、Mery ユーザーさんの間でも人気が高く、私も愛用させていただいております。

    i や l とか | はもちろんですが、0 や O とかの視認性にも優れていてしかもすごくオシャレでカッコイイフォントなのでオススメです ^^

     |  Kuro  |  返信
  6. Kuro さん

    お返事ありがとうございます。
    さっそくHackGenフォントを導入してみました。
    このフォントは確かにとっても見やすいですね(笑)
    しばらくこの環境で使ってみようと思いました!

    強調文字列の処理はスピードが絡んでくるのですね。
    スタタタタ!と書いていけて、Meryは多機能なのにとっても快適と感じていたので、すごく納得です。
    構文ファイルについては条件が重ならないように記述して、どうしても重なってしまう部分だけマーカー機能に頼ってみようと思います。
    マーカーは新しいものほど優先順位が高くなるようですね!

    (ここからは、新規投稿にすべきか迷ったのですが、、、)
    サイト内をGoogle検索したところ、2010年のディスカッションにて「多重起動させるには大掛かりな作り直しが必要」とおっしゃっていました。
    プロ生ちゃんエディション、通常版版、ポータブル版、ビット数を問わず、今でも起動できるMery.exeは1つまで!なのですよね?

    些細なことですが、ひとつのMery上でオプションや構文ファイルを切り替えるよりも、
    それらの設定を適用済みの(別の)Mery.exeを同時起動できた方が便利に思うこともありまして(笑)

    ディスカッションを拝見すると"隠しオプション"というワードをたびたび見掛けるので、もしかしたら?と思いお尋ねしました!
    それもこれもMeryが快適すぎて他のエディタを使うことが考えられなくなってきたからなのですが!

     |  ちかひら  |  返信
  7. ご返信ありがとうございます。

    HackGenフォント、気に入っていただけて良かったです。

    > マーカーは新しいものほど優先順位が高くなるようですね!

    あれれ、新しいものは順番的に下に追加されていくので優先順位が低くなるはずなのですが…

    > サイト内をGoogle検索したところ、2010年のディスカッションにて「多重起動させるには大掛かりな作り直しが必要」とおっしゃっていました。
    > プロ生ちゃんエディション、通常版版、ポータブル版、ビット数を問わず、今でも起動できるMery.exeは1つまで!なのですよね?

    検索のご協力ありがとうございます。

    多重起動は隠しオプションというわけではありませんが、コマンドラインオプション /sp を使えば可能です。

    注意事項としては通常版をお使いですと設定ファイルが 1 箇所になってしまうので、複数のプロセス (Mery.exe) を起動した場合に最後に終了したプロセスの設定が上書きされますから、/sp オプションを使う場合はポータブル版を使っていただいたほうが安全です。

    また、多重起動した場合、異なるプロセス間でのタブの分離や結合などの操作はできません。

    その他、想定外の問題が発生する可能性もありますが、これらはすべてサポート外とさせていただいてますのでご了承ください。

    コマンドラインオプションにつきましては、以下をご参照ください。
    https://www.haijin-boys.com/wiki/ヘルプ:目次

    /sp オプションはサポート外なのでヘルプには記載していませんが…^^;

     |  Kuro  |  返信
  8. > i や l とか | はもちろんですが、0 や O とかの視認性にも優れていてしかもすごくオシャレでカッコイイフォントなのでオススメです ^^

    > さっそくHackGenフォントを導入してみました。
    > このフォントは確かにとっても見やすいですね(笑)

    こんにちは、HackGen 作者です。

    気に入っていただけたようで良かったです!
    こういった文字の判別性を高めたフォントは他にも色々とありますから、色々と試してみるのも楽しいですよ~^^

    Mery はカスタムフォントという仕組み (Mery.exe のあるフォルダに Fonts フォルダを置いて、その中にフォントファイルを置くだけでフォントをインストールせずに利用できる) が使える数少ないテキストエディタなので、フォント職人には嬉しかったりします。

    Kuro さんもオススメありがとうございます!素敵なお声を頂けて嬉しいです。

     |  yuko  |  返信
  9. ご返信ありがとうございます。

    HackGenフォント、勝手にオススメさせていただいてしまい、すみません… ^^;

    > Kuro さんもオススメありがとうございます!素敵なお声を頂けて嬉しいです。

    実は Mery Ver 3.0.0 のブログ記事の画像でも使わせていただいてまして、ほんとは記事中でも HackGen フォントを紹介させていただきたかったのですが、ご迷惑かもしれないとも思いまして…

    大好きなフォントなのでついみんなにオススメしたくなってしまうのですが、Mery が原因の問い合わせなどが HackGen フォントの作者様のところに行くことがあるかもしれないと思うと心苦しい限りです。

    もし Mery がご迷惑をお掛けしている状況がございましたら、ご遠慮なくおっしゃってくださいね。

     |  Kuro  |  返信
  10. > 実は Mery Ver 3.0.0 のブログ記事の画像でも使わせていただいてまして、ほんとは記事中でも HackGen フォントを紹介させていただきたかったのですが、ご迷惑かもしれないとも思いまして…

    いえいえ、まったく迷惑なんかではないですよ!
    自由に使ってほしくて Qiita なんかにも投稿しているわけですから、全然お気になさらず。むしろ紹介されたら両手を上げて喜びますw

    仮にこちらに問い合わせがあったとしても、対処できることならするし、できなければごめんなさいのスタイルなので (無償提供ならでは)、特に負担にもならないですよ~

     |  yuko  |  返信
  11. ご返信ありがとうございます。

    > 自由に使ってほしくて Qiita なんかにも投稿しているわけですから、全然お気になさらず。むしろ紹介されたら両手を上げて喜びますw

    そうでしたか、ほっとしました ^^

    今後、記事にて紹介させていただいたり、Qiita 記事へのリンクを貼らせていただくことがあるかもしれませんが、そのときはよろしくお願いいたします。

    > 仮にこちらに問い合わせがあったとしても、対処できることならするし、できなければごめんなさいのスタイルなので (無償提供ならでは)、特に負担にもならないですよ~

    お気遣いいただきありがとうございます。さすがにそこまでお手を煩わせるわけにはいきませんので、そのときはご遠慮なくおっしゃってくださいね ^^;

     |  Kuro  |  返信
スポンサーリンク