Shit+TABの動作について

  1. Meryのコンセプトに反しないようでしたら、「Shit+TAB」での文頭文字の削除に、全角スペースも追加して頂けないでしょうか。

    ウェブからコピー&ペーストしてインデントする際に、全角も消せたらと思いまして。

     |  saku  |  返信
  2. インデント・逆インデントってプログラム向けなのに全角スペース?、と思いましたが文書の構造化などでも使えそうですね。
    一応マクロで対応してみました。
    標準の逆インデントに動作を近づけてみると、意外と行数嵩みますね。
    なお、そのままだとインデント幅を 4 固定です。
    先頭 2 行を有効化すれば設定からとってくるようになりますが、重いので 3 行目の数字をいじって対応することをおすすめします。

    //#include "include/MeryInfo.js"
    //var tab2space = MeryInfo.GetTabSpace();
    var tab2space = 4;  // タブ幅を設定からとってくるには上 2 行を有効化してこの行をコメントアウト

    var s = Document.Selection;
    var b = s.GetTopPointY(mePosLogical);
    var e = s.GetBottomPointY(mePosLogical);
    if (b == e) {Quit();}   // 単一行でも動作させるならこの行をコメントアウト

    // 行全体を選択
    s.SetAnchorPoint(mePosLogical, 1, b);
    s.SetActivePoint(mePosLogical, Document.GetLine(e, mePosLogical).length+1, e, true);

    // 逆インデント
    var t = s.Text.split("\n");
    var r = new RegExp("^( {1," + tab2space + "}| {1," + (tab2space/2) + "}|\t)");
    for (var i=0; i<t.length; i++) {
      t[i] = t[i].replace(r, "");
    }
    t = t.join("\n");
    if (s.Text != t) {
      s.Text = t;
      s.SetAnchorPoint(mePosLogical, 1, b);
      s.SetActivePoint(mePosLogical, Document.GetLine(e, mePosLogical).length+1, e, true);
    }

     |  ks  |  返信
  3. Visual Studio 2008 では全角スペースも逆インデントできました。
    Visual Studio 2013 ではできなくなっているようですが…

    Delphi の IDE、秀○さん、サクラさんは駄目、E○Editor さんは可能なようです。

    全角スペースって逆インデントできない印象が強いですが、別にできても問題ないかなと思いますね。
    逆インデントできちゃうと副作用で何かデメリットとかあるのかなぁ…

     |  Kuro  |  返信
  4. > Visual Studio 2008 では全角スペースも逆インデントできました。

    なんと、斯様な機能が!

    > 全角スペースって逆インデントできない印象が強いですが、別にできても問題ないかなと思いますね。
    > 逆インデントできちゃうと副作用で何かデメリットとかあるのかなぁ…

    今時の言語は全角文字が識別子に使えるので全角スペースも意味を持つかも、
    と思いましたが調べてみると多くの言語は全角スペースを区切り文字(スペースと同等)と見なすのですね。
    むしろ逆インデントの対象になっている方が自然に思えてきました。

     |  ks  |  返信
  5. ksさん

    >インデント・逆インデントってプログラム向けなのに全角スペース?
    ウェブからサンプルコードをコピペしたら、文頭に全角スペースが入ってる事がたまにありまして。
    逆インデントでそれらをさっと消して、再インデントできたらなと。

    マクロありがとうございますm(_ _)m

    kuroさん
    僕も問題ない気がするのですが、なんせ知識が浅はかですので自信ないです。

     |  saku  |  返信
  6. 話に割り込んでしまい申し訳ありません。

    Kuro 様

    > 全角スペースって逆インデントできない印象が強いですが、別にできても問題ないかなと思いますね。
    > 逆インデントできちゃうと副作用で何かデメリットとかあるのかなぁ…

    汎用のテキストエディタなので、段落のはじめなど、行頭の全角空白は余白じゃなく、消えると困ります。
    半角空白かタブをインデント文字として indent メソッドでインデントして、その反対動作でインデント文字
    だけを消す unindent メソッドがあるので、つりあっているような、、、。これで unindent だけ全角空白も
    消すのは、不釣合いかもしれません。

    ks 様

    ありがたくマクロを試用させていただきました。
    全角空白の連続が、半角空白の連続、タブ文字と同様に、逆インデント動作で削除されます。
    しかし、タブ位置への移動ではなくタブ幅数の空白削除になっているような気がします。
    まだ、半角空白と全角空白が入り乱れていたりするとズレてしまいます。
    折り返し表示行では、動作のあとの選択位置が元の選択範囲でなくなることがあります。

    失礼しました。

     |  通りすがり  |  返信
  7. > ウェブからサンプルコードをコピペしたら、文頭に全角スペースが入ってる事がたまにありまして。

    先頭の全角スペースを除去するだけなら、正規表現置換で 1 発のような気がしますが…^^;

    なんとか、全角半角入り乱れている状態での全角スペースの逆インデントのプログラムを組み込むことができましたが、全角空白が消えると困る方もいらっしゃるのですね…

    やはり標準的に搭載するのはやめておきましょうか… 。・゚・(ノ∀`)・゚・。

     |  Kuro  |  返信
  8. kuroさん

    >正規表現置換で 1 発
    そうでしたね(汗

    ご検討ありがとうございました。

     |  saku  |  返信
  9. saku さん

    インデント/逆インデント や タブ/逆タブ とは違う方法で、
    行頭にある全角空白を、そのままの位置で半角にします。

    キーボード割り当て、または、ポップアップメニューにてお試しを。

    https://onedrive.live.com/redir?resid=9DBB8AE3047FADA8!118&authkey=!AFp1Tn_nXeyHkgc&ithint=file%2cjs
    https://onedrive.live.com/redir?resid=9DBB8AE3047FADA8!119&authkey=!AN9q1B9XCHJbBs0&ithint=file%2cjs

     |  inuuik  |  返信
  10.  |  inuuik  |  返信