VSCodeでHSP3開発を超快適にしよう！ [2023-'24年]

## 概要

HSP3 (Hot Soup Processor) をいまだに初期装備の「ＨＳＰスクリプトエディタ」で開発している方に向けて、**VSCodeというエディタで超快適な開発環境を作ります！**

↓ 最終的にこうなります（demo.hspを実行している画面）
![最終的な環境](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764802/08cdb1b0-7a37-8d2c-784e-04a7e23f5faf.png)

### VSCodeとは

「Visual Studio Code」の略称で、Microsoftが開発している高機能かつ無料のコードエディタです。
とにかく使いやすくて、見た目もかっこいい！　カッコの入力補完機能にはきっと感動すると思います！

https://code.visualstudio.com/

## Let's 環境構築

### 0. 前提

- HSPがインストール済み（最新のHSP3.6を推奨）
- [VSCodeの要件](https://code.visualstudio.com/docs/supporting/requirements)を満たしていること
  - OSがWindows 10 または 11 [^old-os]
  - 500MBの空き容量

### 1. VSCodeをインストール

1. https://code.visualstudio.com/ からインストーラーをダウンロード
1. 実行してインストール

初回起動時は「Get Started with VSCode」の画面が出ますが、テーマ選択やちょっとした説明なので無視しても構いません。

### 2. 日本語化

最初はUIが英語なので、日本語にします。

1. 左側にあるサイドバーから一番下のアイコンをクリックし (またはCtrl+Shift+X)、拡張機能のビューを開く
1. 上部の検索欄に「japanese」と入力
1. 一番上に「Japanese Language Pack for Visual Studio Code」という拡張機能が出てくるので「Install」ボタンを押す
    <img width="511" alt="Japanese Language Packのインストール画面" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764802/c0b23e78-2ed6-d3cc-b1b6-053d9b059851.png">
1. 右下にポップアップが出るのでそこの「Change Language and Restart」ボタンを押す（VSCodeが再起動されて日本語表示に変わります）

### 3. 拡張機能をインストール

VSCodeでHSPの開発ができるよう、以下3つの拡張機能を入れます。

1. **[language-hsp3](https://marketplace.visualstudio.com/items?itemName=honobonosun.language-hsp3)**
   - HSPの基本的な開発を可能にする拡張機能
1. **[HSP3 アナライザー・ミニ (LSP)](https://marketplace.visualstudio.com/items?itemName=vain0x.hsp3-analyzer-mini)**
   - HSP開発に多数の便利機能を追加する拡張機能（どれも標準エディタにはない機能）
1. **[Code Runner](https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner)**
   - 様々な言語のコードを実行できる拡張機能なのですが、language-hsp3によるHSPのコード実行と実行ファイル作成には欠点があるため、これを代わりに使います

<details><summary>Code Runnerを使う理由の詳細（気になる場合はどうぞ）</summary>

language-hsp3の欠点は以下の2つです。

1. **処理後に出力ウィンドウへフォーカスが移る**（そのため、コード実行のたびにいちいちエディタ部分をクリックしてフォーカスを戻す必要がある）
1. **保存していないファイルの変更が反映されない**
※標準エディタはコードを「hsptmp」ファイルに一時的にコピーして処理しているため、ファイルを保存しなくても変更が反映されます。それに対し、language-hsp3は開いているファイルを直接処理するため、一度ファイルを保存する必要があります。

Code Runnerでは、以下のように解決できます。

1. そもそも出力ウィンドウにフォーカスが移らない
1. 処理前にファイルを保存するオプションがあるのでそれをオンにする

language-hsp3の仕組みは内部でhspc.exeを呼び出しているだけなので、Code Runnerでも同じようにhspc.exeを呼び出すコマンドを設定すれば完全に置き換えられるわけです。

</details>

:::note info
前項の日本語化のときと同じように、拡張機能のビューでそれぞれの名前を検索して「インストール」ボタンを押してください。
:::

#### language-hsp3の機能一覧

- HSPのコードの色分け（シンタックスハイライト）
  - [アウトライン](#アウトライン)機能
  - if文などの折りたたみ
- HSPのコンパイルと実行
- HSPの実行ファイル作成
- HSPのヘルプ起動

#### HSP3 アナライザー・ミニ (LSP) の機能一覧

- コード内のシンボル[^what-is-symbol]の色分け（セマンティックハイライト）
- [アウトライン](#アウトライン)機能（language-hsp3より多くのシンボルに対応）
- 定義へ移動（シンボルの使用箇所から定義箇所に飛べる機能）
  - ginger.txtにファイル名を書いておけば`#include`先のファイルも開ける
- 参照へ移動（逆にシンボルの定義箇所から使用箇所に飛べる機能）
- シンボルの名前変更（シンボルの名前を一括変更できる機能）
- 入力補完（入力途中にシンボル名の候補が表示される）  
  ![meの入力補完](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764802/e9b5de7d-cef3-d934-3cd2-8413a35e14d0.png)
- ホバーヘルプ（マウスカーソルをのせると、HSPのヘルプなどが表示される）
  ![screen命令のヘルプ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764802/6b1b8191-8023-acdf-b666-ebce6188b2ac.png)
- シグネチャヘルプ（命令や関数の呼び出しを書いている途中に、引数の情報が表示される）  
  ![mes命令のシグネチャヘルプ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764802/d0e11b25-cb51-9343-e876-6949f5f8c62c.png)

その他、細かい機能は[マーケットプレイス](https://marketplace.visualstudio.com/items?itemName=vain0x.hsp3-analyzer-mini)を参照。

</details>

### 4. hspcを導入

「hspc」というのは、HSPのコード実行や実行ファイル作成ができるコマンドラインツールで、VSCode側から呼び出すことでコンパイル周りをこれに任せられます。
（本来はlanguage-hsp3が内部で呼び出すものなのですが、前項の説明通りCode Runnerで呼び出すように次で設定します）

1. hspcを https://dev.onionsoft.net/seed/info.ax?id=1392 からダウンロード
1. 中にあるhspc.exeをHSPのインストールディレクトリ[^where-hsp-installed-directory]にコピー

### 5. 設定

VSCodeと拡張機能の設定をします。

1. 左下にある歯車アイコンをクリックして「設定」を選択（またはCtrl+,）
1. 右上にあるファイルアイコン（設定 (JSON) を開く）をクリック
1. settings.jsonが開かれるので、以下に書き換え  
    ※`【HSPの場所】` は「HSPのインストールディレクトリのパス[^where-hsp-installed-directory]」にすべて置き換えてください（例: `C:\\hsp36`）。パスの区切り文字は `\\` なことに注意。
    ```jsonc:settings.json
    {
        // 【おすすめ】空白文字を表示（行末にある不要な空白や、インデントのスペースとタブの混在が発見しやすくなります）
        "editor.renderWhitespace": "boundary",
        // 【おすすめ】ファイル保存時に最終行を単一の空行にする
        "files.insertFinalNewline": true,
        "files.trimFinalNewlines": true,
        // HSPの規定の文字コードをShift-JISにし、インデントをタブにする
        "[hsp3]": {
            "files.encoding": "shiftjis",
            "editor.insertSpaces": false
        },
        // 以下、拡張機能の設定
        "hsp3-analyzer-mini.hsp3-root": "【HSPの場所】",
        "language-hsp3.helpman.path.local": "【HSPの場所】\\hsphelp\\helpman.exe",
        "code-runner.clearPreviousOutput": true,
        "code-runner.customCommand": "chcp 65001 > nul && 【HSPの場所】\\hspc -aCD2mP $fullFileName",
        "code-runner.enableAppInsights": false,
        "code-runner.executorMap": {
            "hsp3": "chcp 65001 > nul && 【HSPの場所】\\hspc -aCDdR2w -oobj $fullFileName"
        },
        "code-runner.saveFileBeforeRun": true,
        "code-runner.showExecutionMessage": false,
        "code-runner.showRunCommandInEditorContextMenu": false,
        "code-runner.showRunCommandInExplorerContextMenu": false
    }
    ```

#### UTF-8で書く場合

<details><summary>HSPのソースコードをUTF-8で書きたい場合</summary>

その場合、`"files.encoding": "shiftjis",` の行を削除してください。これで規定の文字コードがUTF-8になります。

なお、Shift-JISのコードも開きたい場合は、`"files.autoGuessEncoding": true`（文字コードの自動認識）を追加してください（ただし、日本語文字が少ないとWindows-1252に誤認識される場合があるので注意）。

確認用。絵文字を表示するサンプルコード ↓

```:emoji.hsp
#include "hsp3utf.as
font "ＭＳ ゴシック", 100 // FixedSys以外のフォントにしないと表示されないので注意
mes "😊"
```

</details>

#### Coder Runnerのコマンド解説

<details><summary>意味が分かる方向け</summary>

hspcのオプションの詳細は、hspc同梱のReadme.mdかReadme.pdfを参照。

##### code-runner.customCommand

Code Runnerのカスタムコマンド。この記事ではHSPの実行ファイル作成をするのに使っています。
2つのコマンドを`&&`で繋げています。

- `chcp 65001 > nul` コンソールのコードページをUTF-8に変更。このときの標準出力は邪魔なので破棄する。
  ※標準出力はShift-JISなのにVSCodeの出力ウィンドウはUTF-8らしく、hspcの出力が文字化けするため。
- `hspc`の実行
  - `-a` ソースファイルのUTF-8自動判定
  - `-C` カレントディレクトリをソースファイルのディレクトリに移動
  - `-D2` 中間ファイルとpackfileを削除
  - `-m` 実行ファイル自動作成とiconinsツールによるリソース挿入
  - `-P` packfileを生成
  - `$fullFileName` ソースファイルのフルパス（[Code Runnerの専用引数](https://github.com/formulahendry/vscode-code-runner#configuration)）

##### code-runner.executorMap

Code Runnerの言語に関連させるコマンド。これでHSP実行をしています。
language-hsp3で定義される言語`hsp3`に対して、2つのコマンドを`&&`で繋げてセットしています。

- `chcp 65001 > nul` *(前述)*
- `hspc`の実行
  - `-a` *(前述)*
  - `-C` *(前述)*
  - `-D` 中間ファイルを削除
  - `-d` デバッグ情報付与
  - `-R2` 同期実行（HSPが終了するまで待機。さらに新規コンソールで実行されるため、hsp3clランタイム使用時にコンソールが表示されるようになります）
  - `-w` デバッグウィンドウ表示
  - `-oobj` 中間ファイルの名前を`obj`に変更
    ※hsp3utfランタイムでファイル名に日本語を含むソースファイルを実行できるようにするため`obj`で固定します。
詳しく書くと、デフォルトの中間ファイル名は、ソースファイル名の拡張子を.axに変えた名前になるのですが、UTF-8対応のhsp3utfランタイムにマルチバイト文字（要は日本語）を含む中間ファイル名を渡すと「Startup failed.」と出て実行に失敗してしまうバグがあるのでその対策です。なお、この不具合はテスト版の[HSP3.7β7](https://hsp.tv/play/pforum.php?mode=all&num=100310)で修正されているようです。
  - `$fullFileName` *(前述)*

なお、`-R`ではなく`-r`で非同期実行した場合、中間ファイルが削除されないようです。
</details>

### 6. キーボードショートカットを変更

VSCodeと拡張機能のキーボードショートカットを変更します。

1. 左下にある歯車アイコンをクリックして「キーボード ショートカット」を選択（またはCtrl+Kの後にCtrl+S）
1. 右上にあるファイルアイコン（キーボード ショートカット (JSON) を開く）をクリック
1. keybindings.jsonが開かれるので、以下に書き換え
    ```jsonc:keybindings.json
    [
        // 【おすすめ】タブ移動を使用した順ではなくタブ順にする
        {
            "key": "ctrl+tab",
            "command": "workbench.action.nextEditor"
        },
        {
            "key": "ctrl+shift+tab",
            "command": "workbench.action.previousEditor"
        },
        // HSP実行
        {
            "key": "f5",
            "command": "code-runner.run",
            "when": "editorLangId == 'hsp3'"
        },
        {
            "key": "ctrl+k f5",
            "command": "-language-hsp3.run",
            "when": "editorLangId == 'hsp3'"
        },
        // HSP実行ファイル作成
        {
            "key": "ctrl+f9",
            "command": "code-runner.runCustomCommand",
            "when": "editorLangId == 'hsp3'"
        },
        {
            "key": "ctrl+f9",
            "command": "-language-hsp3.make",
            "when": "editorLangId == 'hsp3'"
        },
        // HSPヘルプ起動
        {
            "key": "f1",
            "command": "language-hsp3.helpman.search",
            "when": "editorLangId == 'hsp3'"
        },
        {
            "key": "ctrl+f1",
            "command": "-language-hsp3.helpman.search",
            "when": "editorLangId == 'hsp3'"
        },
    ]
    ```

:::note
F5とF1は既存のVSCode標準コマンドと重複しますが、問題はありません。F5のデバッグ関係はHSPの開発をするときには使いませんし、F1の「すべてのコマンドの表示」はCtrl+Shift+Pで代用できるためです。
:::

### 7. HSPのファイルアイコンを追加

VSCodeではタブや[エクスプローラー](#エクスプローラー)部分にファイルアイコンが表示されるのですが、残念ながらHSPのアイコンは表示されません。
そのため、HSPのファイルアイコンを追加する拡張機能（筆者自作）をインストールします。

1. https://github.com/yumunet/language-hsp3-icon/releases から、language-hsp3-icon-0.0.1.vsixをダウンロード
1. VSCodeの拡張機能のビュー (Ctrl+Shift+X) に、ダウンロードした.vsixファイルをドラッグ＆ドロップ

### 8. 右上の実行ボタンを非表示に

右上に出るlanguage-hsp3の実行ボタンは、Code Runnerで代替していて使うことがないため非表示にします。

1. VSCodeでてきとうな.hspファイルを開く
1. タブ欄右端の`⋯`を右クリック
1. 出てきたメニューで「Run HSP program」のチェックを外す

### 番外編: knowbugを導入しよう

knowbugはとても見やすいデバッグウィンドウです！
標準のデバッグウィンドウは窓から投げ捨ててknowbugを使いましょう。
この機会にどうぞ。

導入方法と機能の詳細は以下から。

https://github.com/vain0x/knowbug

## 標準エディタとの機能の対応

これを見れば、VSCodeに移行しても操作に迷うことはないはず！

| 標準エディタ              | VSCode                                             |
| ------------------------- | -------------------------------------------------- |
| 実行+コンパイル           | `F5` [^f5-run]                                     |
| 実行ファイル作成          | `Ctrl`+`F9`                                        |
| HSPキーワード検索         | `F1` またはマウスを重ねる                          |
| ラベル・関数一覧 (`F11`)  | [アウトライン](#アウトライン) (`Ctrl`+`Shift`+`O`) |
| リンクラベル              | ラベル上で「定義へ移動」(`F12`)                    |
| かんたん入力              | [ユーザースニペット](#ユーザースニペット)          |
| ウィンドウの分割          | [画面分割](#画面分割)                              |
| 置換 (`Ctrl`+`R`)         | `Ctrl`+`H`                                         |
| 先頭行に移動 (`Ctrl`+`T`) | `Ctrl`+`Home`                                      |
| 最終行に移動 (`Ctrl`+`B`) | `Ctrl`+`End`                                       |
| 指定行に移動 (`Ctrl`+`J`) | `Ctrl`+`G`                                         |

なお、**Code Runnerの仕様で同時に2つ以上のスクリプトは実行できないようになっています**。
単一インスタンスの方が開発しやすいとは思いますが、複数実行したい場合は[設定](#5-設定)の`code-runner.executorMap`でhspcの`-R2`オプションを`-r`に変えてください（ただし、その場合は中間ファイルが削除されなくなるので注意）。

### コード色分けの比較

VSCodeでは変数や数値にも色が付きます。ただ、命令とラベルの色は同じです。

| 標準エディタ | VSCode |
| :-: | :-: |
| ![標準エディタのコード色分け](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764802/e005e674-46a3-50f4-9168-67f4cce86162.png) | ![VSCodeのコード色分け](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764802/fe59f8b6-03ee-a861-7554-1c8b3d15261b.png) |

※標準エディタのフォントはVSCodeに合わせて、Consolasの12pxにしています。

### アウトライン

左サイドバーのエクスプローラー内には「アウトライン」という部分があります。ここではシンボル[^what-is-symbol]が一覧になっており、それぞれクリックでシンボルがある行に飛べます。

また、Ctrl+Shift+Oでエディタ上からも飛べます（ただし、後述する2つのアウトラインが混ざって表示されるので注意）。

<img width="611" alt="アウトライン" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764802/a27dbdd8-add0-9463-b143-686fc477f8f9.png">

アウトラインは拡張機能によって作成され、「HSP3 アナライザー・ミニ (LSP)」と「language-hsp3」の2つが別々のアウトラインを作成しています。

表示されるシンボルやアイコンに違いがあり、language-hsp3ではシンボルの種類の表示やモジュールの階層表示もされます。
ただ、HSP3 アナライザー・ミニ (LSP) にはラベルが二重に表示される不具合があります（[#11](https://github.com/vain0x/hsp3-ginger/issues/11)）。

| HSP3 アナライザー・ミニ (LSP) | language-hsp3 |
| - | - |
| ![HSP3 アナライザー・ミニ (LSP) のアウトライン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764802/aab93407-51c3-f321-d8b2-9b81e04066f0.png) | ![language-hsp3のアウトライン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764802/2827d112-a706-e1de-58e2-953a1fe95033.png) |

<details><summary>上のアウトラインが表示されるコード</summary>

※一応コンパイルは通るようにしています。

```:.hsp
#module mod
	#deffunc deffunc int p1
		return
	#defcfunc defcfunc
		return
	#modfunc modfunc
		return
	#modcfunc modcfunc
		return
	#modinit
		return
	#modterm
		return
#global

#uselib "a.dll"
#func func "func"
#cfunc cfunc "cfunc"

#regcmd "","b.dll"
#cmd cmd 0

#usecom ICom "{00000000-0000-0000-0000-000000000000}"
#comfunc comfunc 0

#define DEFINE 0
#const CONST 1
#enum ENUM = 2
variable = 3
*label
```

</details>

<details><summary><strong>詳細比較</strong></summary>

シンボルが表示されるか（✅or❌）と、分類（これによりアイコンが変わる）の比較表です。

| シンボル    | HSP3 アナライザー・ミニ (LSP) | language-hsp3                          |
| ----------- | ----------------------------- | -------------------------------------- |
| `#deffunc`  | ✅ function                   | ✅ method                              |
| `#defcfunc` | ✅ function                   | ✅ method                              |
| `#func`     | ✅ function                   | ✅ method                              |
| `#cfunc`    | ✅ function                   | ✅ method                              |
| `#cmd`      | ✅ constant                   | ✅ method                              |
| `#comfunc`  | ❌                            | ✅ string                              |
| `#define`   | ✅ constant                   | ✅ object                              |
| `#const`    | ✅ constant                   | ✅ constant                            |
| `#enum`     | ✅ constant                   | ✅ enumeration                         |
| `#module`   | ✅ module                     | ✅ class                               |
| `#modfunc`  | ✅ method                     | ✅[^language-hsp3-outline] method      |
| `#modcfunc` | ✅ method                     | ✅[^language-hsp3-outline] method      |
| `#modinit`  | ❌                            | ✅[^language-hsp3-outline] constructor |
| `#modterm`  | ❌                            | ✅[^language-hsp3-outline] method      |
| ラベル      | ✅ constant                   | ✅ key                                 |
| 変数        | ✅ variable                   | ❌                                     |
| 引数        | ✅ constant                   | ❌                                     |

</details>

なお、どちらのアウトラインも設定で無効化ができ、片方だけ使うことも可能です。

### ユーザースニペット

標準エディタの「かんたん入力」に似た機能です。
使い方はこちらの記事がとても分かりやすいです。

https://qiita.com/12345/items/97ba616d530b4f692c97

参考までに、私が実際に使っているスニペットの1つです。

```json
"16進数に変換": {
    "prefix": "toHex",
    "body": "strf(\"0x%08X\", $1)"
}
```

### 画面分割

メニューバーの `表示` > `エディターレイアウト` から、画面の分割が行えます。
比率や配置も自由に変えられます。

基本的にはタブ領域ごと増えていき分割数はほぼ無制限ですが、グループ内分割 (Ctrl+K Ctrl+Shift+\\) で1つのタブ内でも分割できます（その場合は2分割まで）。

## VSCodeの機能

HSPの標準エディタにはない、VSCodeの便利な機能を紹介します！
「[HSP3 アナライザー・ミニ (LSP) の機能一覧](#hsp3-アナライザーミニ-lsp-の機能一覧)」の項も一緒に参照してください。

### エクスプローラー

左サイドバーの一番上のボタン（またはCtrl+Shift+E）から「エクスプローラー」が開けます。VSCodeではここで任意のフォルダーを開くことができ、ファイル作成や移動などの操作ができます。
そのため、いちいちWindowsのエクスプローラーと行き来する手間がなくなります！

![VSCodeのエクスプローラー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764802/471ae3d6-29c5-2129-68ec-1bf637d53f80.png)

注意点として、ファイルを左クリックなどで切り替えると複数のタブが開くのではなく、1つのタブが再利用される仕様になっています。ファイルを編集したり、ダブルクリックや中クリックで開けば、別のタブで開けます。

### タイムライン

左サイドバーの[エクスプローラー](#エクスプローラー)内にはアウトラインと一緒に「タイムライン」という部分があります。
ファイルが保存されるたびに差分が記録されており、ここでその差分を見たり、その時点の内容を復元できます。バックアップとして覚えておくと便利。

![VSCodeのタイムラインビュー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/764802/2f74999f-87e7-fe05-c858-199305f728d3.png)

### マルチカーソル

VSCodeには複数のカーソルを挿入できる「マルチカーソル」という機能があります。
反復的な編集をするのに便利です。

詳細はこちらの記事が分かりやすいです。

https://qiita.com/TomK/items/3b1f5be07d708d7bd6c5

### 便利なキーボードショートカット17選

とりあえずこれさえ覚えておけば間違いないです。
ショートカットを駆使して開発効率を上げていきましょう。

| コマンド                 | ショートカット                             |
| ------------------------ | ------------------------------------------ |
| 行を上/下へ移動          | `Alt`+`↓` / `↑`                          |
| 行を上/下へコピー        | `Shift`+`Alt`+`↓` / `↑`                  |
| 行を上/下に挿入          | `Ctrl`+`Enter` / `Ctrl`+`Shift`+`Enter`    |
| 行の削除                 | `Ctrl`+`Shift`+`K`                         |
| 単語単位で削除           | `Ctrl`+`Backspace` / `Ctrl`+`Delete`       |
| 行のインデント           | 選択状態で`Tab` (または`Ctrl`+`]`)         |
| 行のインデント解除       | 選択状態で`Shift`+`Tab` (または`Ctrl`+`[`) |
| 行コメントの切り替え     | `Ctrl`+`/`                                 |
| シンボルの名前変更       | シンボル[^what-is-symbol]上で`F2`          |
| 定義へ移動               | シンボル[^what-is-symbol]上で`F12`         |
| 参照へ移動               | シンボル[^what-is-symbol]上で`Shift`+`F12` |
| 単語単位でカーソル移動   | `Ctrl`+`←` / `→`                         |
| カーソルが前に戻る       | `Alt`+`←`                                 |
| カーソルが次に進む       | `Alt`+`→`                                 |
| 閉じたファイルを開く     | `Ctrl`+`Shift`+`T`                         |
| サイドバーの表示切り替え | `Ctrl`+`B`                                 |
| 下部パネルの表示切り替え | `Ctrl`+`J`                                 |

## VSCodeの欠点

標準エディタと比べての欠点です。

- **シンプルに重い**
標準エディタと比べるとVSCodeは重たいです。起動時の処理負荷は高いですし、メモリ使用量も格段に多いです。
動作自体は軽快ですが、あまり古いパソコンだとキツイかも⋯？

<p></p>

- **デバッグウィンドウの表示切り替えに手間がかかる**  
標準エディタではメニューバーの「Debugウィンドウ表示」チェックで簡単に切り替えられますが、VSCodeでは設定にてhspcの`-w`オプションを直接付け外ししなくてはなりません。

## 参考

https://qiita.com/vain0x/items/1c0be49b3b22142dbfd1

## 追記 (2023/11/06)

ほのぼのさんにこの記事を見ていただけたようで、記事に書いていたhspcの不具合を修正してくださいました！　さらにpackfile削除機能の追加もしてくださいました。
まさか見ていただけるとは思っていなくてめちゃくちゃびっくりしました。本当にありがとうございます。

次に、MIZUSHIKIさんが「[HSP3forVSCodeインストーラー](https://hsp.tv/contest2023/list_n2.html#2317)」というものを公開されていたのですが、この記事を参考にしてくださったようです。ありがとうございます！
興味があったので仮想環境で実際に使ってみたところ、起動 → インストールボタン → 後は待つだけでセットアップが完了して普通に感動しました。しかもアイコンテーマ作成までこなしてくれるので驚きです。ファイルの関連付けも凝っていますし、欠点にあげていたデバッグウィンドウ表示切り替えも専用の拡張機能で解消してしまっています。
ただ、この記事を書いた身としてはCode Runnerを使わないのが少し残念。ほぼ好みの問題かもしれませんが……。

最後に、Googleで「hsp vscode」と検索したら、上から2番目に出てくるようになっていました。投稿してから1ヶ月とかではまったく出てこなかったので嬉しい限りです。

## 追記 (2024/02/14)

なんとベインさんがこの記事を見てくださり、HSP3 アナライザー・ミニ (LSP) を更新してくださいました。アウトラインの無効化オプションが追加されたのと、VC++ランタイムライブラリが不要になりました。
また、アウトラインのラベルが二重になる不具合の修正もしてくださったのですが、ラベルの定義移動が使えなくなっていたため、大変申し訳なかったのですがissueを立てたところ、ロールバックしてくださいました。

まさかベインさんにまで見ていただけるとは思わなかったので、VSCodeでアナライザー・ミニの更新ボタンが出て変更内容を見たときには心臓止まるかと思いました。
本当にありがとうございます。

## 追記 (2024/12/05)

久しぶりの記事更新です。

ほのぼのさんがhspcを更新してくださり、v3.6.0にて新規コンソール画面で実行する `--newwnd` (`-R2`) オプションが実装されました！（これにより、hsp3clランタイム実行時にコンソール画面が開くようになりました）
欠点のところに書いていたのですが、おそらく見ていただけたのだと思います。何度もお世話になって感謝しかありません。ありがとうございます！！！
language-hsp3の欠点が～なんて書いているのが申し訳ない⋯。

もう2025年も近いですが、この先もこの記事が誰かの役に立てば嬉しいです。

[^old-os]: Windows 7は[v1.70.2](https://code.visualstudio.com/updates/v1_70)、Windows 8/8.1は[v1.79.2](https://code.visualstudio.com/updates/v1_79) の旧バージョンが利用可能ですが、この記事の対象とはしません。
[^what-is-symbol]: 「シンボル」とは、変数、命令、関数、ラベル、定数などのこと。
[^where-hsp-installed-directory]: 「HSPのインストールディレクトリ」は、HSPで`mes dir_exe`を実行することで確認できます。
[^f5-run]: F5での実行は「HSPのファイルを開いているエディタにフォーカスしている時」にしか効かず、他の部分にフォーカスしている場合はデバッグ実行の操作になってしまうので注意。
例えば、エクスプローラー部分でファイルを開いてすぐにF5を押すと、エディタにフォーカスしていないためにデバッグ実行となってしまい、エラーダイアログが出てしまいます。
[^language-hsp3-outline]: 親の`#module`でモジュール名がついている場合にのみ、モジュール名を親として階層表示される。