面倒すぎて誰も作らなかった全自動コメント反転マクロ
//
から改行まで」のような行コメント
/*
から */
まで」のような範囲コメント
インストール後のファイル構成は次のようになります。
■マクロフォルダ\ │・AltComment.mac …起動マクロ │ └─■AltComment\ ・AltComment-Main.mac …本体 ・AltComment.ini …ユーザー設定ファイル ・AltComment-Default.ini …デフォルト設定ファイル
カーソル位置が地の文ならコメントに、コメント内なら地の文にします。設定により行単位で処理することもできます。〈→設定〉
選択範囲内の地の文をコメントに、コメントを地の文にします。
1行ごとに分割し、文字列選択時の動作を適用します。全角文字やタブ文字をまたいでも大丈夫です。折り返してる2行目以降は無視されます。
秀丸がカラー表示に対応している言語はほとんどプリセットされてます。〈→プリセット一覧〉 プリセットに満足できないときはユーザー設定ファイル AltComment.ini に記述を加えます。ここではその方法を説明します。
設定は拡張子ごとに行います。また、複数の拡張子をひとつのファイルタイプと見なし、ファイルタイプごとに設定することもできます。詳しくはデフォルト設定ファイル AltComment-Default.ini を参考にするか、 CompleteX のマニュアルを参照してください。〈→CompleteX リファレンス:設定ファイルの書き方〉
設定ファイルの中身はだいたいこんな感じになります。
[.c] 1L=/* 1R=*/ 2L=// with=space,indent line=yes change=3 skipcolors=20
設定項目は次のとおりです。「…
」以下は説明文なので実際の設定ファイルに書いてはいけません。
1L=// …行コメント開始記号 2L=/* …範囲コメント開始記号 2R=*/ …範囲コメント終了記号 ; 以下同様
数字は優先順位です。1から連番になっていなければなりません。挿入時は原則として 1L, 1R に指定されたコメント記号が使われます。(後述する change=
の設定によっては 2L, 2R も使えます)
with=space …挿入時:コメント記号の内側(コメント内容との間)に半角スペースを付加する 削除時:コメント記号の内側に半角スペースがあったらそれも削除する with=indent …挿入時:地の文に合わせてコメント記号をインデントする 削除時:インデントされたコメント記号も削除する with=space,indent …両方インデントは処理位置が行頭の場合のみ有効です。
change=0 …常に 1L, 1R を使う change=1 …無選択時は 1L, 1R を、文字列選択時は 2L, 2R を使う change=n …選択範囲が n 行未満のときは 1L, 1R を、それ以上のときは 2L, 2R を使うBOX 選択時は見かけの選択行数で判断されます。この設定にかかわらず、処理範囲の先頭がコメント内だった場合はそのコメント記号が使われます。
skipcolors=20,11,5 …文字定数、URL、特に強調1 は除外カラーコードは秀丸マクロヘルプの [内部的な値を表現するキーワード]-[カーソル関連キーワード] を参照してください。カンマ区切りで複数指定できます。(カンマの前後にスペースなどを入れてはいけません)
line=yes …行単位で処理 line=no …文字列単位で処理行の途中からコメント化することがない場合は
line=yes
を指定します。すると無選択時は行全体がコメント化され、範囲選択時は選択範囲が行単位に拡大されます。これは後述する forline=2
と selline=1
をともに指定するのと同じです。無選択時のコメント解除動作はこの設定に影響されません。
line=
の指定を上書きします。(デフォルト = 0)
forline=0 …カーソル位置 forline=1 …行全体(カーソル位置が行末の場合を除く) forline=2 …行全体(常に)コメント解除動作はこの設定に影響されません。
line=
の指定を上書きします。(デフォルト = 0)
selline=0 …選択範囲そのまま selline=1 …選択範囲を行単位に拡大 selline=n …選択範囲が n 行以上のときは行単位に拡大
autosave=yes …保存する autosave=no …保存しない
[HTML/XML] 1L=<!-- 1R=--> with=space [.rhtml] @=HTML/XML with=indent
この例だと拡張子 rhtml に対し 1L=<!--
1R=-->
with=indent
が設定されます。参照できるのは同じ設定ファイル内にあるセクションだけです。設定を誤ると無限ループします。
AltComment の設定はユーザー設定ファイル AltComment.ini とデフォルト設定ファイル AltComment-Default.ini の2段構えになっています。ユーザーごとの設定はユーザー設定ファイルに書きます。デフォルト設定ファイルはバージョンアップのたびに上書きされるので、いじらない方がいいです。
コメント記号の定義(1L=
, 1R=
, 1LX=
, 1RX=
, 1SX=
, ...)は一括して、ユーザー設定ファイルに 1L=
が定義されていればユーザー設定が、そうでなければデフォルト設定が採用されます。ふたつの設定ファイルの定義が混ざることはありません。
その他の設定(with=
, line=
, change=
, ...)は項目ごとに、ユーザー設定ファイルに値が書かれてればそれが、書かれてなければデフォルト設定が採用されます。デフォルト設定ファイルに書かれた値を打ち消したいときはユーザー設定ファイルにデフォルト値(selline=0
など)または解釈不能な値(with=none
など)を書いてください。
判定用の検索パターンや検索オプションを別途指定しなければならない例を挙げます。これらの設定はマクロ内部のアルゴリズムを理解していないと難しいので、なるべくプリセットに含めておきたいと思います。通常の設定で対応できない例があったら作者に教えてください。〈→談話室〉
1LX=
, 1RX=
, 1SX=
, 2LX=
, 2RX=
, 2SX=
, ... を用いるには、対応するコメント記号 1L=
, 1R=
, 2L=
, 2R=
, ... が同じ設定ファイルに定義されていなければなりません。
TeX はコメント記号をエスケープできます。エスケープされた「\%」はコメント記号ではないので無視しなければなりません。このような場合は検索パターンを正規表現で記述します。
[.tex] 1L=% 1LX=(?<!\\)%[ \t]*
この設定はプリセットに含まれています。
C++ で「//*」という文字列がある場合、これは行コメントですが、範囲コメントの開始と勘違いすることがあります。勘違いを防ぐには次のように指定します。
[C/Java] 1L=// 2L=/* 2R=*/ 2LX=(?<!/)/\*[ \t]* 2RX=[ \t]*\*/ [.c] @=C/Java [.h] @=C/Java [.cpp] @=C/Java
この設定はプリセットに含まれています。
Fortran77 のコメント記号は行頭にある「C」または「*」です。行頭以外の「C」や「*」は無視しなければなりません。文は行単位なので line=yes
も指定しておきましょう。
[.f77] 1L=C 1LX=^C 2L=* 2LX=^\* line=yes
この設定はプリセットに含まれています。なお、実際に Fortran77 でこのマクロを使う際は桁ずれにご注意ください。
コマンドスクリプト(バッチファイル)は REM 命令がコメント開始記号になります。もし「REMOVE」なんてコマンドがあってもヒットしないよう、検索オプションとして word
を指定します。コマンドは行単位なので line=yes
も指定しておきましょう。
[.cmd] 1L=REM with=space …スペース付加 1LX=^REM …検索パターン(単語の検索を行うため「^REM[ \t]*」とはしない) 1SX=word …単語の検索 line=yes
この設定はプリセットに含まれています。なお、大文字小文字を区別するときは casesense
を指定します。
1SX=casesense …大文字小文字を区別する 1SX=word,casesense …単語の検索、大文字小文字を区別する
プリセット(配布時の設定)はデフォルト設定ファイル AltComment-Default.ini に記述されています。内容は次のとおりです。
ファイルタイプ | 拡張子 | コメント開始 | コメント終了 | オプション |
---|---|---|---|---|
[MAIL] | 秀丸メール, 新規作成, .txt | > | 1LX=^> ? with=space line=yes |
|
[HTML/XML] | .html, .htm, .shtml, .xml, .xsl | <!-- | --> | |
[ASP] | .asp, .aspx, .jsp, .php, .php3, .php4 | // | ||
/* | */ | |||
# | ||||
<!-- | --> | |||
[ColdFusion] | .cfm, .cfml | <!--- | ---> | |
<!-- | --> | |||
[C/Java] | .c, .h, .cpp, .hpp, .stl, .java, .js, .rc, .y | // | 2LX=(?<!/)/\*[ \t]* 2RX=[ \t]*\*/ |
|
/* | */ | |||
[C#] | .cs | /// | 2LX=(?<!/)/\*[ \t]* 2RX=[ \t]*\*/ |
|
/** | */ | |||
// | ||||
/* | */ | |||
[Verilog] | .v, .va | // | ||
/* | */ | |||
[SQL] | .sql | /* | */ | |
-- | ||||
[CSS] | .css | /* | */ | |
[Hidemaru] | .mac, .hilight | // | ||
[UNIX] | .cgi, .pl, .pm, .py, .rb, .rm, .awk, .sh, .mak | # | ||
[DOS] | .bat, .cmd | REM | 1LX=^REM 1LS=word with=space line=yes |
|
[Basic] | .bas, .frm, .cls, .vbs | ' | ||
[Pascal] | .pas | { | } | |
(* | *) | |||
// | ||||
[ASM] | .asm, .s, .as | ; | ||
[INI] | .ini, .reg, .hpt | ; | 1LX=^; line=yes |
|
[LISP] | .lsp, .l | ; | ||
;| | |; | |||
[VHDL] | .vhd | -- | ||
[TeX] | .tex, .sty, .bib | % | 1LX=(?<!\\)%[ \t]* | |
[Fortran90] | .f90, .for, .f | ! | ||
[Fortran77] | .f77 | C | 1LX=^C 2LX=^\* line=yes |
|
* |
コメントを扱う秀丸マクロはたくさんあります。わかる範囲でピックアップしてみました。 (2005/03/13 現在)
マクロ名 | 作者 | 挿入/削除 | コメント形式 | 処理範囲 | |
---|---|---|---|---|---|
行コメント | 範囲コメント | ||||
AltComment ※このマクロです |
mobitan | 自動判別 (交互反転) |
自動判別 (拡張子ごと/複数可) |
カーソル位置 行単位 文字列範囲 BOX 範囲 |
|
kbComment.mac | kotobuki-chive さん | 自動判別 (先頭基準) |
自動判別 (拡張子ごと) |
― | カーソル位置 文字列範囲 |
kbCommentB.mac | kotobuki-chive さん | 自動判別 (先頭基準/ 手動選択可) |
― | 自動判別 (拡張子ごと) |
文字列範囲 |
C++ コメントブロックマクロ | sasak さん | 別マクロ | // 専用 |
― | 行単位 |
行頭引用符挿入&削除マクロ | SAS さん | 手動選択 (別マクロ) |
手動選択 | ― | 行単位 |
多形式対応コメント挿入/解除 | mobitan | 別マクロ | 自動判別 (拡張子ごと) |
カーソル位置 文字列範囲 BOX 範囲 |
|
自動判別コメント挿入/削除マクロ | Kuro さん | 自動判別 (先頭基準) |
手動選択 (ウィンドウごと) |
行単位 | |
COBOL 編集用マクロ集 | せーた さん | 別マクロ | COBOL 専用 | 行単位 | |
コメント挿入削除マクロ | FJI さん | 別マクロ | 自動判別 (拡張子ごと/COBOL 対応) ※範囲コメントは挿入のみ |
行単位 |
この比較表に間違いがあったら教えてください。〈→談話室〉
一次配布場所は Wisteria - 秀丸マクロ - AltComment です。二次配布は次のところで行われています。
line=yes
が適用されてなかったバグ修正
line=yes
を追加
selline=n
で選択範囲が1行ずつ増えるバグ修正
with=space,indent
だとインデントされた終了記号が削除されず変な結果になるバグ修正(上方向最長一致検索の実装が中途半端だった)
change=1
により文字列選択時の設定が適用されてしまうバグ修正
change=n
による切り替えを有効にする(見かけの行数で判断)
1L
, 1R
, 2L
, 2R
, ... は正規表現のメタキャラクタをエスケープしない
設定例の提供、バグ報告、ツッコミなどは 談話室 へどうぞ。