LoginSignup
1
2

More than 5 years have passed since last update.

サクラエディタでコメントアウトするマクロ

Last updated at Posted at 2019-02-13

サクラエディタの話

社内研修で真っ先に触れたサクラエディタ。
それまでExcelのVBAくらいしか触れていなかったため、「すごい! Ctrl+ホイール対応してる!! 色分けできる!!!」とかそういう感動の仕方をしていた。
そして今に至っても(業務上の都合でSJISを捨てられないため)ネイティブSJIS対応の軽量なエディタとして愛用し続けている。殴っても壊れない頑丈な道具って大切。石器時代を生き抜こう。

本題

コメントアウト/アンコメントのマクロが見当たらなかった1ので作った。
追記:普通にあった。

C/C++用のつもりで作ったが、単に行頭に文字列を追加/削除するだけなので言語によっては変更すれば普通に使える。
ただし、とある事情(//コメントの末尾が2byte文字だとバグる虚弱妹系組込コンパイラの存在)により、正規表現で見つけた2byte文字の末尾に.を追加している。これはアンコメントしても戻さないため、コメント以外の変数名等で2byte文字を利用する文化圏の場合は該当部分を削除した方が良い。

今のところはCtrl + Shift + F6でコメントアウト、Ctrl + Shift + F7でアンコメントを割り当てている。他のエディタとの共通性が無いのでそろそろ入れ替えようかとは思っている。

commentin.js
/*コメントアウト(末尾2Byte文字対応)*/
function c_comment(){
    if(IsTextSelected()){
        //選択範囲に含まれる行を全てコメントアウト.
        var linFrm = Editor.GetSelectLineFrom();
        var linEnd = Editor.GetSelectLineTo();
        for( var buf = linFrm; buf <= linEnd; buf++){
            Editor.Jump(buf);
            Editor.GoLineTop(1);
            Editor.InsText("//");
            //ここから2byte対応.
            Editor.GoLineEnd(1);
            Editor.Left_Sel();
            var get = Editor.GetSelectedString(0);
            if(get.match(/^[^\x01-\x7E\xA1-\xDF]+$/)){
                Editor.GoLineEnd(1);
                Editor.InsText(".");
            }
            //ここまで.
        }
        Editor.Jump(linFrm);
        Editor.SelectLine(0);
        for( var buf = linFrm; buf < linEnd; buf++){
            Editor.Down_Sel();
        }
        if(linEnd != Editor.GetLineCount(0)){
            Editor.Left_Sel();
        }else{
            Editor.GoLineEnd_Sel(0);
        }
    }else{
        //選択範囲が無い場合, カーソル行をコメントアウト.
        Editor.GoLineTop(1);
        Editor.InsText("//");
        //ここから2byte対応.
        Editor.GoLineEnd(1);
        Editor.Left_Sel();
        var get = Editor.GetSelectedString(0);
        if(get.match(/^[^\x01-\x7E\xA1-\xDF]+$/)){
            Editor.GoLineEnd(1);
            Editor.InsText(".");
        }
        //ここまで.
        Editor.SelectLine(0);
        Editor.Left_Sel();
    }
}
c_comment();
uncomment.js
/*コメントアウトを戻す*/
function c_uncomment(){
    if(IsTextSelected()){
        //選択範囲に含まれる行の先頭に"//"が存在すればトルツメ.
        var linFrm = Editor.GetSelectLineFrom();
        var linEnd = Editor.GetSelectLineTo();
        for( var buf = linFrm; buf <= linEnd; buf++){
            Editor.Jump(buf);
            Editor.GoLineTop(1);
            Editor.Right_Sel();
            Editor.Right_Sel();
            if(Editor.GetSelectedString(0)=="//"){
                Editor.DeleteBack();
            }
        }
        Editor.Jump(linFrm);
        Editor.SelectLine(0);
        for( var buf = linFrm; buf < linEnd; buf++){
            Editor.Down_Sel();
        }
        if(linEnd != Editor.GetLineCount(0)){
            Editor.Left_Sel();
        }else{
            Editor.GoLineEnd_Sel(0);
        }
    }else{
        //カーソル行の先頭に"//"が存在すればトルツメ.
        Editor.GoLineTop(1);
        Editor.Right_Sel();
        Editor.Right_Sel();
        if(Editor.GetSelectedString(0)=="//"){
            Editor.DeleteBack();
        }
        Editor.SelectLine(0);
        Editor.Left_Sel();
    }
}
c_uncomment();

例によってJavaScriptのことを全く理解せずに書いているのでたぶんツッコミどころがある。適宜マサカリを頂ければ幸いです。


以下日記

プログラミングを始めて1年半ほど経つが、未だにサクラエディタから離れられていない。一時期Sublime3を利用していたが、100回に1回ほどプラグインがバグってSJISの日本語コメントが異次元に吸い込まれたので利用を断念した。おのれSJIS。
最近はVSCordやAtomを恐る恐る触っている。高機能かつ拡張機能が豊富で非常に便利だが、悲しいかなユーザ側(私)の技量と知識量が足りていない。何らかのプラグインを自作できるようになれば十分使えると思うのだが……。
ただ、サクラエディタはひたすら軽く安定した動作を見せてくれる。またGREP時の挙動やフォントのレンダリングも私好みであるため、まだまだ使い続けたい良エディタだと感じる。何よりSJISの呪縛から逃れるまではバックアップ用に残しておかざるを得ない。


  1. 2017/08時点。もしかしたらどこかに存在しているかもしれない→普通にあったわごめん 

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2