# 画面遷移図

## 概要

space-vimはVim/Neovimの設定フレームワークであり、従来のWebアプリケーションとは異なる「画面」概念を持ちます。
本図では、Vimのウィンドウ・バッファ・ポップアップなどのビュー要素を「画面」として捉え、その遷移関係を示します。

## 凡例

- 実線矢印: 直接的な画面遷移
- 破線矢印: オーバーレイ・ポップアップ表示
- 楕円: メイン画面
- 四角: サブウィンドウ・パネル
- 菱形: モーダル・ポップアップ

## 全体遷移図

```mermaid
flowchart TB
    subgraph 起動フェーズ
        START[Vim起動] --> STARTIFY[Startify<br/>スタート画面]
        STARTIFY -->|ファイル選択| EDITOR[エディタ画面<br/>メインバッファ]
        STARTIFY -->|セッション選択| EDITOR
    end

    subgraph メイン編集領域
        EDITOR -->|SPC| WHICHKEY{Which-Key<br/>キーバインド表示}
        WHICHKEY -->|b b| BUFLIST{FZF<br/>バッファ一覧}
        WHICHKEY -->|f f| FILEFIND{FZF<br/>ファイル検索}
        WHICHKEY -->|f t / F4| NERDTREE[NERDTree<br/>ファイルツリー]
        WHICHKEY -->|t t / F6| TAGBAR[Tagbar<br/>シンボル一覧]
        WHICHKEY -->|g y| GOYO[Goyo<br/>集中執筆モード]
        WHICHKEY -->|'| TERMINAL[Terminal<br/>ターミナル]

        BUFLIST -->|選択| EDITOR
        FILEFIND -->|選択| EDITOR
        NERDTREE -->|ファイル選択| EDITOR
        TAGBAR -->|シンボル選択| EDITOR
        GOYO -->|SPC q| EDITOR
        TERMINAL -->|exit| EDITOR
    end

    subgraph コード支援
        EDITOR -->|入力中| COMPLETION{補完ポップアップ}
        EDITOR -->|gd| DEFINITION[定義ジャンプ<br/>新バッファ]
        COMPLETION -->|選択/ESC| EDITOR
        DEFINITION --> EDITOR

        EDITOR -.->|エラー検出| DIAGNOSTIC[LSP診断<br/>サインカラム]
        EDITOR -.->|構文チェック| ALE[ALE/Syntastic<br/>構文エラー表示]
    end

    subgraph バージョン管理
        EDITOR -->|:Gstatus| FUGITIVE[Fugitive<br/>Gitステータス]
        EDITOR -->|:Gdiff| GITDIFF[Git差分表示<br/>分割ウィンドウ]
        EDITOR -->|:GV| GV[GV<br/>コミット履歴]

        FUGITIVE --> EDITOR
        GITDIFF --> EDITOR
        GV -->|コミット選択| GITDIFF
    end

    subgraph 検索・ナビゲーション
        EDITOR -->|:copen| QUICKFIX[Quickfix<br/>結果一覧]
        EDITOR -->|Ctrl-P| CTRLP{CtrlP<br/>ファイル検索}
        EDITOR -->|SPC c s| CSCOPE[Cscope<br/>参照検索結果]

        QUICKFIX -->|選択| EDITOR
        CTRLP -->|選択| EDITOR
        CSCOPE --> QUICKFIX
    end

    subgraph ヘルプ・情報
        EDITOR -->|:help| HELP[Help<br/>ヘルプ画面]
        EDITOR -->|F1| HELP
        HELP -->|:q| EDITOR
    end

    %% スタイル定義
    classDef main fill:#e1f5fe,stroke:#01579b
    classDef panel fill:#f3e5f5,stroke:#4a148c
    classDef popup fill:#fff3e0,stroke:#e65100
    classDef overlay fill:#e8f5e9,stroke:#1b5e20

    class EDITOR,STARTIFY,GOYO main
    class NERDTREE,TAGBAR,QUICKFIX,HELP,TERMINAL,FUGITIVE,GITDIFF,GV panel
    class WHICHKEY,BUFLIST,FILEFIND,COMPLETION,CTRLP popup
    class DIAGNOSTIC,ALE overlay
```

## 主要フロー詳細

### 1. 起動からファイル編集

```mermaid
flowchart LR
    A[Vim起動] --> B[Startify]
    B -->|最近のファイル選択| C[エディタ]
    B -->|セッション復元| C
    B -->|新規ファイル| C
    A -->|vim ファイル名| C
```

### 2. ファイル検索・ナビゲーション

```mermaid
flowchart TB
    EDITOR[エディタ] -->|SPC f f| FZF[FZFファイル検索]
    EDITOR -->|SPC f t| NERD[NERDTree]
    EDITOR -->|Ctrl-P| CTRLP[CtrlP]

    FZF -->|Enter| EDITOR
    NERD -->|Enter| EDITOR
    CTRLP -->|Enter| EDITOR

    FZF -->|ESC| EDITOR
    NERD -->|q| EDITOR
    CTRLP -->|ESC| EDITOR
```

### 3. コード解析・補完

```mermaid
flowchart TB
    EDITOR[エディタ] -->|文字入力| COMP{補完候補}
    COMP -->|Tab/Enter| EDITOR
    COMP -->|ESC| EDITOR

    EDITOR -->|gd| DEF[定義ジャンプ]
    DEF --> EDITOR

    EDITOR -->|SPC t t| TAG[Tagbar]
    TAG -->|シンボル選択| EDITOR

    EDITOR -->|保存時| LINT[構文チェック]
    LINT -.->|エラー表示| EDITOR
```

### 4. Git操作フロー

```mermaid
flowchart TB
    EDITOR[エディタ] -->|:Gstatus| STATUS[Fugitive Status]
    STATUS -->|s: ステージ| STATUS
    STATUS -->|u: アンステージ| STATUS
    STATUS -->|cc: コミット| COMMIT[コミットメッセージ編集]
    COMMIT -->|:wq| STATUS
    STATUS -->|:q| EDITOR

    EDITOR -->|:Gdiff| DIFF[差分表示]
    DIFF -->|:q| EDITOR

    EDITOR -->|:GV| LOG[コミットログ]
    LOG -->|Enter| DIFF
    LOG -->|q| EDITOR
```

## キーバインド対応表

| 画面遷移 | キーバインド | 説明 |
|---------|-------------|------|
| エディタ -> Which-Key | `SPC` | キーバインドガイド表示 |
| エディタ -> ファイルツリー | `SPC f t` / `F4` | NERDTreeトグル |
| エディタ -> ファイル検索 | `SPC f f` | FZFファイル検索 |
| エディタ -> バッファ一覧 | `SPC b b` | FZFバッファ一覧 |
| エディタ -> タグバー | `SPC t t` / `F6` | Tagbarトグル |
| エディタ -> ターミナル | `SPC '` | ターミナル起動 |
| エディタ -> 集中モード | `SPC g y` | Goyoトグル |
| エディタ -> 定義ジャンプ | `gd` | LSP定義ジャンプ |
| エディタ -> ヘルプ | `:help` / `F1` | ヘルプ表示 |
| 任意画面 -> 終了 | `:q` / `SPC q` | 画面を閉じる |
