サクラエディタをカスタマイズして使いこなす

この記事はVSCodeで書いています。

# タブ

「設定 > 共通設定 > タブバー」 から「タブバーを表示する」にチェックを入れることで複数のファイルを一つウィンドウで開くことができるようになります。

# タスクランナー

タスクランナーとはコンパイルや実行やフォーマットなどのタスクを実行する機能のことです。
サクラエディタではマクロを活用することでタスクランナーのようなことができます。
例としてエディタからCのソースコードをMinGWでコンパイルして実行できるよう設定する方法を紹介します。

## マクロの記述

まずサクラエディタのマクロを置くフォルダを作成しましょう。場所と名前は適当でいいです。（私はドキュメントフォルダに `sakura_macros` という名前で作成しました）
サクラエディタのマクロはJScriptというMicrosoft製の古いJavaScriptで記述されます。
次のファイルを先程作成したフォルダに置きます。

```js:run.js
var shell = new ActiveXObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");

// 現在編集中のファイル名
var src = Editor.GetFilename();
// 拡張子をexeに置き換えたファイル名
var exe = fso.GetBaseName(src) + ".exe";
// パスに空白が入っていたときのために二重引用符で括る
src = "\"" + src + "\""
exe = "\"" + exe + "\""

shell.Run("%COMSPEC% /c gcc " + src + " -o " + exe + " -Wall -Wextra -pedantic-errors && " + exe + " & pause");
```

これは概ね次のようなことをしています。

1. コマンドプロンプトを開く (`%COMSPEC%` はコマンドプロンプトを表します)
1. コマンド `gcc "hello.c" -o "hello.exe" -Wall -Wextra -pedantic-errors` でコンパイルする
1. `hello.exe` を実行
1. 開いたコマンドプロンプトが即座に閉じないよう `pause` する

`-Wall -Wextra -pedantic-errors` は私の好みで警告を一通り有効にして、バグに未然に気づきやすくしている部分です。
お好みで削除しても動作には支障ありません。

## マクロの登録

画像つき解説: [sakuraエディタマクロ設定について](https://qiita.com/t_o01/items/6ad844ab04fc0170b4eb)

「設定 > 共通設定 > マクロ」から「マクロ一覧」という記述の右側にある参照からマクロファイルが入っているフォルダを登録します。
次に、空のマクロ一覧が並んでいるので、0番目の行をクリックし、名前とファイルを設定します。
名前は例えば「このCファイルを実行」、ファイルは先程作成したマクロファイルを指定します。
「マクロを実行するたびにファイルを読み込みなおす」にもチェックをつけておきます。
最後に設定ボタンを押します。（忘れがちなので気をつけましょう）

これでマクロが登録されて「ツール > 登録済みマクロ」から実行できるようになったのですが右クリックのメニューにマクロを追加するとより便利です。
「設定 > 共通設定 > カスタムメニュー」で種別に「外部マクロ」を指定します。
左側に登録されているマクロ、右側に右クリックメニューが表示されます。
そこで「→」をクリックして登録したいマクロを右側にコピーすることで右クリックからマクロを実行できるようになります。

# 定型文

定型文の挿入もマクロで可能です。例えば

```c
/* 作成者: mosh */
```

のような定型文を挿入するマクロは次のようになります。

```js
Editor.InsText("/* 作成者: mosh */");
```

[InsText](https://sakura-editor.github.io/help/HLP000288.html) は文字列を挿入する関数です。
このマクロを上述のタスクランナーのときと同様に登録すれば右クリックから定型文を挿入できるようになります。

## 日付

```c
/* 作成日: 2021/04/11 */
```

のように日付を挿入するマクロを書きたいとします。
これは [InsertDate](https://sakura-editor.github.io/help/HLP000164.html) 関数を用いて次のように書くことができます。

```js
Editor.InsertText("/* 作成日: ");
Editor.InsertDate();
Editor.InsText(" */");
```

ただしこのままでは日付が `2021年4月11日` のように入力されてしまいます。
これ以外の書式で日付を挿入したい場合は「設定 > 共通設定 > 書式」から日付書式をカスタムに変更し適切な書式を設定すればよいです。
例えば `2021/04/11` のようにしたければ `yyyy'/'MM'/'dd` と設定します。

## 改行コード

```c
/* 作成者: mosh */
/* 作成日: 2021/04/11 */
```

このように改行を挿入したいときは注意が必要です。改行を表す方法が実は複数あるからです。
具体的には `"\n"`, `"\r\n"`, `"\r"` の三種類です。それぞれ LF, CRLF, CR と呼ばれます。
より詳しい説明は『[備忘録：改行コード「LF」と「CR」と「CRLF」の違い](https://marusunrise2.blogspot.com/2014/06/lfcrcrlf.html)』を参照してください。

[GetLineCode](https://sakura-editor.github.io/help/HLP000268.html#GetLineCode) というファイルの改行コードを取得する関数を提供されているので、これを利用すると次のように書けます。

```js
// 改行コードの設定
var br = "";
var lineCode = Editor.GetLineCode();
switch (lineCode) {
    case 0:
        br = "\r\n";
        break;
    case 1:
        br = "\r";
        break;
    case 2:
        br = "\n";
        break;
}

// 定型文の挿入
Editor.InsText("/* 作成者: mosh */" + br);
Editor.InsText("/* 作成日: ");
Editor.InsertDate();
Editor.InsText(" */");
```

サクラエディタは改行コードが統一されていないと保存時に統一するか聞いてくれるので対応していなくてもなんとかなるのですが、ファイルに合わせた改行コードを使っておくことで、一々聞かれずに済むようになります。

# 入力補完

高度な入力補完には対応していないのですが、Ctrl+Space でファイル内で既出の単語から補完してくれます。
単語ファイルを登録することもできます。(参照: 『[入力補完機能](https://sakura-editor.github.io/help/HLP000104.html)』)

# 定義へ移動

公式の『[ダイレクトタグジャンプの使い方](https://sakura-editor.github.io/help/HLP000278.html)』を参照してください。

# 参考ページ

* [タブバー](https://sakura-editor.github.io/help/HLP000106.html)
* [WSHマクロとPPAマクロ](https://sakura-editor.github.io/help/HLP000269.html)
* [マクロ専用関数/変数](https://sakura-editor.github.io/help/HLP000268.html)
* [WSH JScriptを使いこなそう ～アプリケーション操作～](http://jscript.zouri.jp/Source/ApplicationCtrl.html)
* [入力補完機能](https://sakura-editor.github.io/help/HLP000104.html)