コメントアウトとその解除を行う秀丸マクロ


コメントアウトとコメントアウトの解除を簡単に行えるようになるマクロです。 範囲選択中は行コメントに関する処理を、BOX範囲選択中はブロックコメントに関する処理を行います。
私は Ctrl + Shift + C に割り当てて使っています。

ダウンロード

comment_out.mac

使い方

  • 範囲選択中に実行された場合
    選択範囲の先頭行を基準に、行のコメントアウトまたは解除を行います。
  • BOX範囲選択中に実行された場合
    • カーソル位置がブロックコメントの中にある場合はそれを解除します。
    • そうでなければ、BOX選択の開始位置から終了位置までをブロックコメントにします。
  • 範囲選択中でない場合
    • カーソル位置がブロックコメントの中にある場合はそれを解除します。
    • そうでなければ、カーソル行のコメントアウトまたは解除を行います。

その他の特徴

  • マクロの先頭で、ファイルタイプごとにコメントアウトの方法を設定できます。
  • コメントアウトと解除の処理は、まとめてやり直すことが可能です。
  • 常に、処理された範囲が選択された状態でマクロを終了します。

変更履歴

Ver 2.8 (2014-02-10)

  • CoffeeScript の設定を追加

Ver 2.7 (2014-01-25)

  • .erb Rakefile の設定を追加

Ver 2.6 (2014-01-14)

  • .scss .pas .gitignore の設定を追加

Ver 2.5

  • .htaccess の設定を追加

Ver 2.4

  • ブロックコメントによるコメントアウトの対象範囲にブロックコメントの終端文字列が含まれていた場合の確認ダイアログの表示方法を question コマンドに変更

Ver 2.3

  • .bat のコメントアウトの設定を追加
  • .css のファイルタイプの指定が間違っていたので修正

Ver 2.2

  • 秀丸エディタの複数行コメントの設定によってブロックコメントの解除が正常に動かない場合があったので修正
  • 選択範囲の先頭行がコメントアウトされているか判定する際、行末の文字もチェックするよう修正
  • 拡張子 .hta .twig のコメントアウトの設定を追加

Ver 2.1

  • 正規表現のメタ文字をエスケープする処理を修正
  • 拡張子 .rbw のコメントアウトの設定を追加

カテゴリー: 記事 タグ: , , パーマリンク

16 Responses to コメントアウトとその解除を行う秀丸マクロ

  1. ピンバック: 秀丸エディタのお勧めの設定 | TipsZone

  2. 匿名 のコメント:

    以下のようにエラーが表示されてつかえませんTT

    式がおかしいです。 または、このバージョンではこの式はつかえません。

    キーワード/関数/式: selopenx

  3. NORI のコメント:

    秀丸エディタのバージョンが古いと思われます。
    最新版でお試しください。

    秀まるおのホームページ(サイトー企画)-秀丸エディタ

  4. 匿名 のコメント:

    できました。ありがとうございます

  5. 匿名 のコメント:

    以下のようにエラーが表示されてつかえませんTT (秀丸のバージョンは、Version 7.10)

    comment_out.mac(142): 文法エラーです。

  6. NORI のコメント:

    秀丸エディタのバージョンが古いからです。
    最新版でお試しください。

  7. 匿名 のコメント:

    非常に便利に使わせていただいています。

    行の先頭タブやスペースを無視することは可能でしょうか。 行揃えをしていても、行の先頭にコメント文字が入りますが、揃えた行の位置にコメント文字が入ると綺麗でさらに助かります。

  8. NORI のコメント:

    行頭の空白類文字の後にコメント文字を挿入するということであれば、 LINE_COMMENT_OUT サブルーチンと LINE_UNCOMMENT サブルーチンを 次の様に変更し(comment_out.mac の 164 行目ぐらいです。)、 さらに142行目の「先頭行がコメントアウトされているか判定する」の処理を 適切に修正する必要があります。

    // 選択されている行をコメントアウトする。
    // 範囲選択中でない場合はカーソル行をコメントアウトする。
    LINE_COMMENT_OUT:
        if (selecting == false) selectline;
        replaceallfast "^([\t ]*)(.*?)$", "\\1" + $c[0] + "\\2" + $c[1], regular, inselect;
        return;

    // 選択されている行のコメントアウトを解除する。
    // 範囲選択中でない場合はカーソル行のコメントアウトを解除する。
    LINE_UNCOMMENT:
        if (selecting == false) selectline;
        call REGEX_ESCAPE $c[0];
        $$head = $$return;
        call REGEX_ESCAPE $c[1];
        $$tail = $$return;
        replaceallfast "^([\t ]*)" + $$head + "(.*?)" + $$tail + "$", "\\1\\2", regular, inselect;
        return;

    Visual Studio の Ctrl + E, C および Ctrl + E, U によるコメントアウト動作の様にするには、より多くの変更が必要になります。

    どちらでしょうか?

  9. 匿名 のコメント:

    返信ありがとうございます。

    Visual Studioの動作の違いがよく分からなかったのですが、提示していただいたコードで、希望どうりのコメントアウト動作でした。 コメントアウトを外す処理のコードもお手数ですが、お教え願えませんでしょうか。

  10. NORI のコメント:

    出来ました。

    どうぞ

    comment_out_ignore_line_head_blanks.mac

  11. 匿名 のコメント:

    ありがとうございます。思っていたとおりの動作です。 これからも感謝しながら使わせていただきます^^

  12. mtushiro97 のコメント:

    scilabという数値計算用言語を使っています.

    1. scilabではコメントは行単位です.メントアウトする行頭の文字は//ですが,これは$c[0]="//"でわかりまます.しかし,行末に挿入する文字列がないのですが,$c[1]:の設定はどうすればいいでしょうか.
    2. scilabでは行末が...の場合次行は継続行として認識されます.scilabではブロック単位のコメントそのものはないのですが,対応するとすれば行末が...の場合は次行は継続行なので合わせてコメントアウトと解除をするという動作です.そのようなことは可能でしょうか.
    3. 既存のブロックこめんと機能はそのままにしておいても大丈夫でしょうか.

    ご教示いただければ幸いです.

  13. NORI のコメント:
    1. $c[1] は設定しなくて良いです。デフォルトで空文字列が設定されています。
    2. 行末が...の場合に動作を変えるのは大変そうです。 毎回対象範囲を選択してから実行することで対応していただきたいです。
    3. ブロックコメント機能を使わないのであれば、設定はそのままでも問題ありません。
  14. mtushiro97 のコメント:

    ご回答ありがとうございました. 早速使い始めました. 作業が効率的になり助かっております.

    コメント記号の//に左に空白やタブ文字列がある場合の動作を変更したいのですが,可能かどうか,可能であればどうすればいいかご教示頂ければ幸いです.

    //に左に空白やタブ文字列がある場合にショートカットキーを押すと現状はさらに行頭に//がつきます. 望ましい動作は//を削除してコメントアウトの解除です.

    宜しくお願いします.

  15. NORI のコメント:

    以前、他の人から同様のリクエストがあり、その時作ったものがあります。

    お試しください。

    comment_out_ignore_line_head_blanks.mac

  16. mtushiro97 のコメント:

    御礼が遅くなり申し訳ありませんでした. 使って疑問点があれば同時にお聞きしようと思っており返事が遅れました. すごく便利になりましたが,一つ変更したいことがあります. 今はコメント化するか,解除するか,マクロが自動的判断していますが,これをコメント化と解除の二つのマクロにわけて,そろぞれ別のキーを割り当てて使いたいのです.

    ブロック選択をしていて困ることがあります. もともとコメント行がついていて,デバックのためにそのブロック(含むこめんと行)全体をコメント化したい場合があります.既存のコメント行を外してブロック選択すればいいのですが,そうすると解除するときにもとのコメントとそれ以外が同じ//なので,どこまでを解除すればよかったか,一瞬戸惑います.できれば,もとのコメント行は//→////にかわり,解除でもとに戻るとしたいのです. 下のような例です.

    //レベルがあり低いレベルでコメント行があるときのコメントアウトと解除の動作 //原型 for i=1 :10 //xが小さい時の処理 if i<5 then x=10 else x=0 end end

    //'//原型'行も選択していると解除を実行.低レベルのコメントも解除される. 原型 for i=1 :10 xが小さい時の処理 if i<5 then x=10 else x=0 end end

    //'//原型'を選択していないとコメントアウトを実行.希望の処理 //原型 //for i=1 :10 ////xが小さい時の処理 //if i<5 then //x=10 //else //x=0 //end //end

    //'//原型'を選択していると解除を実行し最初のコメント行も解除される. 原型 for i=1 :10 //xが小さい時の処理 if i<5 then x=10 else x=0 end end

    //理想のコメントアウト ////原型 //for i=1 :10 ////xが小さい時の処理 //if i<5 then //x=10 //else //x=0 //end //end

コメントを残す