保存すると緑のバーが伸びる

  1. https://i.gyazo.com/68f197341789ef98774d8d7662298a6b.gif
    証拠をどーん
    https://i.gyazo.com/2d724de2b3ec580a552acbc9f9d1f7ea.png
    バージョンがこちらです。
    2.8.7
    で起きているので念の為スクショを2つ置いときます。

     |  炎獄 炎陣  |  返信
  2. ご報告ありがとうございます!

    証拠…、確かに緑色のバーがドーンと伸びてますね。

    私の環境ではどうも再現できないようなので、お手数をおかけして申し訳ございませんが、具体的な再現方法か、発生時の操作手順、またはお気づきの点など、わかる範囲で構いませんので出来るだけ詳しく教えていただけますと助かります。

    ご不便をおかけして申し訳ございませんが、ご協力お願いいたします!^^

     |  Kuro  |  返信
  3. https://app.box.com/s/5qqg2bvoa4uu8gmdor63l4qa2b8xp9jl
    これに編集すればわかるのですが、途中で書いた文章以外の所が伸びるんです。

    念の為
    windows10 Home 64BIT
    使っているMery
    バージョン:2.8.7 32BIT版
    EditorConfig使用で発生

    未使用時は起きなかったので多分プラグインバグかも・・・

     |  炎獄 炎陣  |  返信
  4. 横から失礼します。

    EditorConfig を導入しているのでしたら

    trim_trailing_whitespace = true

    が原因なのでは?

     |  sukemaru  |  返信
  5. >> sukemaru さん
    サポートのご協力ありがとうございます。

    >> 炎獄 炎陣 さん
    ご返信ありがとうございます。

    なるほど、EditorConfig を導入されているのであれば sukemaru さんのご指摘通り.editorconfig で

    trim_trailing_whitespace = true
    insert_final_newline = true または false

    この 2 つのオプションのいずれかを指定されていると、これらの機能は保存時に文書全体に対して整形処理を行いますので、すべての行が更新済みということで変更行 (上書き保存済みなので緑色) となってしまいます。

    仕様とは言え、確かにちょっと気になりますね…。

    文書全体の整形後に、実際に変更された行だけを変更行として色付けするような仕組みとなると頭を抱えてしまいますが、何か方法を考えてみようと思います。

     |  Kuro  |  返信
  6. ありがとうございます。
    無理なさらずです・・・!

     |  炎獄 炎陣  |  返信
  7. > 文書全体の整形後に、実際に変更された行だけを変更行として色付けするような仕組みとなると頭を抱えてしまいますが、何か方法を考えてみようと思います。

    内部的に Mery 標準の「置換」メソッドで、正規表現・すべて置換 "\s$" → "" をコッソリ実行して、「検索/置換」文字列の履歴やオプションフラグに形跡を残さないようにすれば…?
    と素人考えですが。 :)

     |  sukemaru  |  返信
  8. > 正規表現・すべて置換 "\s$" → ""

    だと空白文字1文字ずつになっちゃいますし、「\s」だと空行にもヒットしちゃいますから
    "[\t ]+$" → "" (空)
    でしたね。
    EditorConfig の空白文字の定義(特殊な空白文字の扱い)がどうなっているのか分かりませんが。

     |  sukemaru  |  返信
  9. そうなんですよね。

    最初はその仕様で実装していたのですが、onigmo.dll が存在しない環境だと機能自体が使えなくなってしまうという問題があったので、正規表現を使わずに自前で実装した次第です。

    onigmo.dll がない環境で Mery を使おうとする人はいないかもしれませんが、検索と置換以外の部分ではなるべく鬼雲に依存したくないので ^^;

    一応、通常の置換のときには変更行をなるべく保持する仕組みを実装しているわけなので、今回も同じことができないことはないのですが、sukemaru さんもご存じのとおり、あれは非常に作るのが面倒という… (w

     |  Kuro  |  返信
  10. 大石です。

    以前、「Mery」のキーボード設定の並び替えの DLL を公開しました。
    同時に、Delphi XE2 でファイラーやビューワを公開していますが、
    正規表現の検索は Delphi の「System.RegularExpressions」
    を使用しています。

    これであれば、外部の DLL も不要ですので自前で処理する必要は
    ないと思うのですが、そういう事ではないですか?

    よろしくお願いします。

     |  大石剛司  |  返信
  11. ご意見ありがとうございます。

    > 以前、「Mery」のキーボード設定の並び替えの DLL を公開しました。

    覚えていますとも!あれを参考にさせていただき、標準機能でキーボード設定の並べ替えを実装させていただきましたね ^^

    > 正規表現の検索は Delphi の「System.RegularExpressions」
    > を使用しています。
    >
    > これであれば、外部の DLL も不要ですので自前で処理する必要は
    > ないと思うのですが、そういう事ではないですか?

    そうですね。System.RegularExpressions なら外部 DLL 不要で正規表現が使えますので、私も開発段階ではこれも試しました。なんたってコード 1 行でできるので便利です。

    でも、System.RegularExpressions を使うと実行ファイル (.exe) のファイルサイズが 100 キロバイトほど肥大化してしまうので、ひとつの機能のためにそこまでの実装は大げさすぎるかと思いまして、自前での実装に至りました。

    あと、今回問題となっているのは、機能としては自前の実装で動作しているので大丈夫なのですが、Mery の機能の「変更行の強調」との競合のほうが問題でして、自前実装や System.RegularExpressions を使った場合、文書全体を対象に置換することになるので、どの行に対して変更が行われたかという情報が保持できないのです。

    変更した行を記憶しつつ、文書全体を整形する必要があるのでその実装において簡単な方法がないかと模索しておりました。

    情報提供のご協力ありがとうございます。とりあえず、土日、費やしてなんとか形になりつつあります ^^

     |  Kuro  |  返信
  12. 横から失礼します
    なんとなーく予感してましたがやっぱりバグじゃなくて仕様だったんですね。緑のバーが伸びると「うんうん、EditorConfig 君が動作してるね」という確認にもなるので良いのでは?なんて私なら言いそうです。いやなら余分な設定をしなきゃいいわけですし

    > 情報提供のご協力ありがとうございます。とりあえず、土日、費やしてなんとか形になりつつあります ^^

    流石はKuroさんですね~なかなか真似できないバランス感覚だと思います

    実はさっきshift-jisのファイルをちょっと修正して上書き保存したらutf-8になって焦りましたが、EditorConfig の全体設定[*]の所にcharset = utf-8を記述していたのが原因でした。最初のうちは注意が必要ですね

     |  シリル  |  返信
  13. > なんとなーく予感してましたがやっぱりバグじゃなくて仕様だったんですね。

    そうですね、仕様と申し上げましたが、あえてそういう仕様にしているわけではないので仕様上の制限事項と言ったほうが正しいかもしれないですね ^^;

    trim_trailing_whitespace は Mery の [ドキュメントの整形] 機能などと同列で、文書全体を対象とした自動整形機能に該当するので、すべての行が変更行になるのはバグではありません。

    他のエディタの動作も参考にしたかったのですが、EditorConfig に対応していて、かつ変更行/保存行を強調表示できるエディタがなかなか見つからず、Visual Studio 2019 はその条件は満たしているものの、なぜか trim_trailing_whitespace が効かないという…。

    > 緑のバーが伸びると「うんうん、EditorConfig 君が動作してるね」という確認にもなるので良いのでは?なんて私なら言いそうです。いやなら余分な設定をしなきゃいいわけですし

    HTML の [ドキュメントの整形] なら変更行が保持されなくても仕方ないかなといった感じがありますが、保存のたびに実行される trim_trailing_whitespace の場合はやはり変更行が保持されていたほうが使い勝手が良いかと思いました。

    と、今、確認してみたら Visual Studio 2019 だと HTML 整形でも変更行が保持されるみたいですね。さすがにそれは diff でも実装しないと対応できそうにないので、今回は見なかったことにしますが…。

    > 流石はKuroさんですね~なかなか真似できないバランス感覚だと思います

    モチベーションを維持するのが下手なだけです (w ぶぁーっとやって燃え尽きる感じですね。

    > 実はさっきshift-jisのファイルをちょっと修正して上書き保存したらutf-8になって焦りましたが、EditorConfig の全体設定[*]の所にcharset = utf-8を記述していたのが原因でした。最初のうちは注意が必要ですね

    ご存じかもしれませんが、root = true を指定しておけばそのフォルダの配下だけで EditorConfig が有効になるので、全体設定 [*] もそのフォルダの配下だけに適用されます。

    例えばプロジェクトごとなどにフォルダを作って、.editorconfig を配置しておけば、他のフォルダは .editorconfig の影響を受けないので安全かなと思います。

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