マクロの概要(入門用) マクロの記述方法(Ver9.34対応版)
マクロの記述方法
たとえば秀丸エディタを使って文書を作成しているとします。「現在作成中の文章を保存したい」と思った場合、編集作業をしているなら上書き保存を、また、
新規に文章を作成している場合は名前を付けて保存をしますが、一般的には「ファイル」やアイコンからその処理を選ぶか、ウィンドウの右上×閉じるをクリックして終了させるか、
各自が好きな方法を取っていることでしょう。この「好き」な方法をもっと自分流にすることもマクロを組むことで可能になります。規定のやり方に囚われない方法にカスタマイズできるのです。
コンピュータに「この文章を保存しなさい」と命令するマクロを作成すると仮定します。
まず、コンピュータにとって現在編集中なのか新規作成なのかを指示する必要があります。編集中なら上書き保存を実行させます。また、新規作成ならどこのフォルダにどういうファイル名で、
ファイルの種類はテキスト文書で、文字コードはShift-JISで、改行はCR(キャリッジリターン)+LF(ラインフィールド)だということを指示しなければなりません。
このように、人間なら状況に合わせておこなう単純な作業でさえ、1から10までを事細かに指示してやらなければ、コンピュータにとってはどのように保存するのかがわかりません。コンピュータは人間ほど賢くなく融通も利かない機械です。
それらの細かい作業指示書がマクロです。
マクロは、コンピュータが理解できるように決められた文法で記述する必要があります。秀丸エディタのマクロを記述する文(プログラミング言語)は、C、Javaなどのプログラミング言語とほぼ同じ記述方法を使用します。
マクロの記述は、各種の動作を実行する文(主に「文」を用います)と、流れを制御する制御文からなります。文やキーワードは、基本的にすべて小文字だけで記述します。(例外もあります)
動作を実行するときに使用する命令を「文」といい、決められた一連の処理をコンピュータに実行させます。たとえば「save;」という文を使って命令すると現在表示されているファイルを上書き保存します。
- マクロ記述の基本文法
-
文はセミコロン「 ; 」で文の終わりを指定します(日本語の文の終わりは「。」をつけるのと同じです)。
例 |
$file_name = "test.txt";
|
ただし、ラベル名(後述)はコロン「 : 」で文の終わりを指定します。
条件判断、繰り返し処理などは、グループ記号と呼ばれる中カッコ「 { } 」で関連のある記述をまとめます(//以下の文字はコメントです。この日本語のコメントは、コンピュータが直接読んで理解するものではなく、マクロ作成者であるあなた自身の覚書として書き込んでおくことができます)。
例 |
question "上書き保存しますか?";
if( result == yes ){ //質問の結果が「はい」ならば処理を実行する
save; //ファイルを上書き保存する
}
|
文「question」は、質問のメッセージボックスを表示します(「はい」と「いいえ」のボタンあり)。
例 |
#cnt = 10; //#cntという数値変数に初期値10を代入する
while( #cnt > 0 ){ //#cntが0より大きいなら処理を実行する
down; //カーソルを1行下へ移動する
#cnt = #cnt - 1; //#cntをひとつ減らす
}
|
上記の「 // 」記号以下の文字は、覚書コメントだと説明しました。どんな処理を実行させているのかといったことや、変数の意味などを記入しておくと便利です。
※このヘルプでのコメントは、主にマクロ動作の説明を記入しています。
例 |
$file_name = "test.txt"; //保存ファイル名
|
また、処理の流れなどを視覚的に見やすくするために「字下げ」(Tabキー利用)をするとマクロが読みやすくなります。
現在作成中のマクロなら、見やすくするための字下げや、覚書コメントは不必要なものに感じるかもしれませんが、しばらくたってから作成したマクロを再利用したり改造したりする場合に非常に役立ちます。
職業プログラマーでさえ、3ヶ月経過した自分のプログラムは他人が記述したものと同じだと一般的に言われています。
- マクロ処理の流れ
-
処理は大きく分けて「順次」「選択」「繰り返し」を組み合わせで記述します。
「順次処理」は、記載された順に上から下へ実行していきます。
「選択処理」は、いくつかの選択肢から選択条件に合う処理だけを実行します。
たとえば、条件判断などがあれば指定された条件に該当する処理だけを実行します。
「繰り返し処理」は、繰り返し条件で指定された条件を満たす(または満たさなくなる)まで、同じ処理を繰り返し実行します。