# 画面設計書 20-Help（ヘルプ画面）

## 概要

本ドキュメントは、space-vimにおけるHelp（ヘルプ画面）の設計を記述したものである。Vimビルトインのヘルプシステムをspace-vim固有のキーバインドと設定で拡張したヘルプ表示機能について、その構成・機能・操作方法を詳細に解説する。

### 本画面の処理概要

Help画面は、Vimヘルプドキュメントを表示するための専用ウィンドウである。Vimの操作方法、コマンドリファレンス、プラグインのドキュメントなどを参照するために使用する。space-vimではqキーでの簡単な終了や、中国語ドキュメント（vimcdoc）のサポートが追加されている。

**業務上の目的・背景**：Vimは多機能なエディタであり、その操作方法やコマンドを覚えることは容易ではない。Help画面は、作業中にいつでもリファレンスドキュメントを参照できるようにすることで、学習コストを下げ、効率的なVim操作を支援する。また、プラグインのドキュメントも同じインターフェースで参照可能である。

**画面へのアクセス方法**：
- `:help` または `:h` - ヘルプのトップページを開く
- `:help {subject}` - 特定のトピックのヘルプを開く
- `F1` - ヘルプを開く（一般的なキーバインド）
- `K` - カーソル下の単語のヘルプを開く

**主要な操作・処理内容**：
1. **ヘルプトピック表示**：指定したトピックのドキュメントを表示
2. **タグジャンプ**：ヘルプ内のハイパーリンク（タグ）をたどる
3. **検索**：ヘルプ内を検索
4. **ヘルプウィンドウ終了**：qキーで簡単に閉じる
5. **多言語サポート**：中国語ドキュメント（vimcdoc）のサポート

**画面遷移**：
- エディタ画面 → Help画面（`:help`または`F1`）
- Help画面 → エディタ画面（`:q`または`q`キー）
- Help画面内 → 別のヘルプトピック（タグジャンプ：`Ctrl-]`）

**権限による表示制御**：本画面に権限による表示制御は存在しない。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 84 | 中国語ドキュメント | 補助機能 | vimcdocによる中国語ヘルプの表示 |
| 85 | 言語固有設定 | 補助機能 | ftpluginによるヘルプ画面固有のキーバインド設定 |

## 画面種別

参照画面（ドキュメント表示）

## URL/ルーティング

Vimコマンドによるアクセス：
- `:help` / `:h` - ヘルプトップ
- `:help {subject}` - 特定トピック
- `:helpgrep {pattern}` - ヘルプ内検索
- `:helpclose` - ヘルプウィンドウを閉じる

## 入出力項目

| 項目名 | 入出力 | データ型 | 説明 |
|--------|--------|----------|------|
| ヘルプトピック | 入力 | 文字列 | 表示するヘルプのトピック名 |
| 検索パターン | 入力 | 文字列 | ヘルプ内検索のパターン |
| ヘルプテキスト | 出力 | テキスト | ヘルプドキュメントの内容 |

## 表示項目

### ヘルプウィンドウ

| 表示項目 | データ型 | 説明 |
|----------|----------|------|
| ヘルプテキスト | テキスト | ドキュメント本文 |
| タグ（リンク） | 文字列 | 他のヘルプトピックへのハイパーリンク（`|tag|`形式） |
| セクション見出し | 文字列 | 章・節の見出し |
| コード例 | テキスト | コマンドやコードの例示 |

### ハイライト

| ハイライト種別 | 対象 | 説明 |
|----------------|------|------|
| helpHyperTextJump | タグ | ジャンプ可能なタグのハイライト |
| helpHeader | 見出し | セクション見出しのハイライト |
| helpExample | 例 | コード例のハイライト |

## イベント仕様

### 1-ヘルプ表示

`:help {subject}`コマンドでヘルプを表示する。

```
[ユーザー操作] :help {subject}
        ↓
[Vim] ヘルプタグを検索
        ↓
[Vim] 該当するヘルプファイルを開く
        ↓
[画面表示] ヘルプウィンドウが表示される
```

### 2-タグジャンプ

ヘルプ内のタグ上で`Ctrl-]`を押すと、そのタグのヘルプトピックにジャンプする。

```
[ユーザー操作] タグ上でCtrl-]押下
        ↓
[Vim] タグ先を検索
        ↓
[Vim] 該当ヘルプトピックを表示
        ↓
[カーソル移動] タグ先にジャンプ
```

### 3-ヘルプウィンドウ終了

qキーでヘルプウィンドウを閉じる。

```
[ユーザー操作] q押下
        ↓
[help.vim] :helpclose実行
        ↓
[画面更新] ヘルプウィンドウが閉じる
```

### 4-ヘルプ内検索

`:helpgrep`でヘルプ全体を検索する。

```
[ユーザー操作] :helpgrep {pattern}
        ↓
[Vim] 全ヘルプファイルを検索
        ↓
[Vim] 結果をQuickfixリストに格納
        ↓
[画面表示] Quickfixリストで結果を表示
```

## データベース更新仕様

本画面は参照専用であり、データの更新は行わない。

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 表示条件 |
|-------------|------|---------------|---------|
| HELP001 | エラー | E149: Sorry, no help for {subject} | 該当するヘルプトピックがない場合 |
| HELP002 | 情報 | Sorry, help file ... is not readable | ヘルプファイルが読めない場合 |

## 例外処理

| 例外状態 | 対処 | ユーザーへの通知 |
|---------|------|-----------------|
| ヘルプトピックが見つからない | エラーを表示 | E149エラーメッセージ |
| ヘルプファイルが読めない | エラーを表示 | ファイル読み込みエラー |
| helptags未生成 | :helptagsを実行 | 自動生成（または手動実行を促す） |

## 備考

- Vimビルトインのヘルプシステムを使用
- space-vimでは`core/ftplugin/help.vim`でqキーによる終了が設定
- vimcdocプラグインにより中国語ヘルプが利用可能（chineseレイヤー）
- space-vimのヘルプは`:help spacevim`で参照可能
- ヘルプタグは起動時に自動生成される（spacevim_helptags関数）

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: ファイルタイプ設定を理解する

まず、ヘルプバッファ用の設定がどのように行われているかを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | help.vim | `core/ftplugin/help.vim` | ヘルプバッファ固有のキーバインド設定 |

**読解のコツ**: `ftplugin`ディレクトリ内のファイルは、対応するファイルタイプのバッファで自動的に読み込まれる。

**主要処理フロー**:
1. **1行目**: `nnoremap <buffer> q :helpclose<CR>` - qキーでヘルプを閉じる

#### Step 2: ヘルプタグ生成を理解する

space-vimのヘルプタグがどのように生成されるかを確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | spacevim.vim | `core/autoload/spacevim.vim` | s:spacevim_helptags()関数 |

**主要処理フロー**:
1. **210-223行目**: `s:spacevim_helptags()`関数
   - ヘルプファイルのタイムスタンプをチェック
   - 必要に応じて`:helptags`を実行
   - 最終実行時刻をファイルに保存

#### Step 3: space-vimヘルプドキュメントを理解する

space-vim固有のヘルプドキュメントの場所を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | spacevim.txt | `core/doc/spacevim.txt` | space-vimのヘルプドキュメント |

### プログラム呼び出し階層図

```
:help spacevim
    │
    └─ Vim ヘルプシステム
           │
           ├─ ヘルプタグ検索
           │      └─ core/doc/tags
           │
           └─ ヘルプファイル表示
                  └─ core/doc/spacevim.txt

Vim起動
    │
    └─ spacevim#end()
           │
           └─ s:spacevim_helptags()
                  ├─ タイムスタンプチェック
                  └─ :helptags core/doc（必要時）

ヘルプバッファ開始
    │
    └─ ftplugin/help.vim 読み込み
           │
           └─ nnoremap <buffer> q :helpclose<CR>
```

### データフロー図

```
[入力]                    [処理]                         [出力]

:help {topic} ──▶ Vim ────────────────▶ ヘルプウィンドウ
                          │
                          ├─▶ タグ検索
                          │
                          └─▶ ヘルプファイル表示

Ctrl-] ─────────▶ Vim ────────────────▶ タグ先ジャンプ
                          │
                          └─▶ タグ解決・ジャンプ

q キー ─────────▶ help.vim ───────────▶ ウィンドウクローズ
                          │
                          └─▶ :helpclose
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| help.vim | `core/ftplugin/help.vim` | ソース | ヘルプバッファ固有キーバインド（qで閉じる） |
| spacevim.vim | `core/autoload/spacevim.vim` | ソース | ヘルプタグ生成関数 |
| spacevim.txt | `core/doc/spacevim.txt` | ドキュメント | space-vimのヘルプドキュメント |
| 画面一覧.csv | `docs/code-to-docs/画面一覧/画面一覧.csv` | データ | 画面No.20の定義 |
| 画面遷移図.md | `docs/code-to-docs/画面一覧/画面遷移図.md` | ドキュメント | 画面遷移の定義（74-76行目） |
