# 画面設計書 14-Airline（ステータスライン）

## 概要

本ドキュメントは、space-vimにおけるAirline（ステータスライン）画面の設計を記述したものである。vim-airlineプラグインによって提供されるカスタマイズされたステータスライン表示機能について、その構成・機能・操作方法を詳細に解説する。

### 本画面の処理概要

Airline画面（正確には「ステータスライン表示」）は、Vimウィンドウの下部に表示されるステータスバーを高度にカスタマイズした表示である。現在のモード、ファイル名、ファイルタイプ、Git状態、エンコーディング、行番号、カラム位置など、編集作業に必要な情報を美しく整理して表示する。

**業務上の目的・背景**：開発者は常にファイルの状態やエディタの状態を把握する必要がある。標準のVimステータスラインは情報が限られており、カスタマイズにも手間がかかる。vim-airlineは、視覚的に優れたステータスラインを提供し、Git状態、構文チェック結果、バッファ情報などの重要な情報を一目で確認できるようにする。これにより、開発者は本来の編集作業に集中しながら、必要な情報を即座に取得できる。

**画面へのアクセス方法**：
- 自動表示：Vim起動時から常時表示
- 設定変更：`.spacevim`または設定ファイルでカスタマイズ可能

**主要な操作・処理内容**：
1. **モード表示**：現在の編集モード（NORMAL/INSERT/VISUAL等）を色分け表示
2. **ファイル情報表示**：ファイル名、ファイルタイプ、エンコーディング、改行コード
3. **Git情報表示**：現在のブランチ名（vim-fugitive連携）
4. **位置情報表示**：行番号、カラム位置、ファイル内の位置（%）
5. **エラー・警告表示**：ALE/Syntasticの構文チェック結果
6. **タブライン表示**：バッファ一覧をタブ形式で表示

**画面遷移**：
- ステータスラインは常時表示され、独立した画面遷移は存在しない
- バッファ番号クリックでバッファ切り替え（マウス操作有効時）

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

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 23 | airline連携 | 主機能 | vim-airlineによるカスタマイズされたステータスライン表示 |
| 21 | space-vim-dark | 補助機能 | space-vim-darkテーマとの連携 |
| 41 | ALE連携 | 補助機能 | ALEのエラー・警告情報のステータスライン表示 |

## 画面種別

常時表示UI（ステータスライン・タブライン）

## URL/ルーティング

自動表示（設定による制御）：
- ステータスライン：常時ウィンドウ下部に表示
- タブライン：`showtabline`設定に基づいて上部に表示

## 入出力項目

| 項目名 | 入出力 | データ型 | 説明 |
|--------|--------|----------|------|
| 現在のモード | 入力（自動） | 文字列 | Vimの編集モード |
| ファイル情報 | 入力（自動） | 構造体 | ファイル名、タイプ、エンコーディング等 |
| Git情報 | 入力（自動） | 文字列 | ブランチ名（vim-fugitive経由） |
| 診断情報 | 入力（自動） | 構造体 | エラー・警告数（ALE経由） |
| ステータスライン | 出力 | 文字列 | 整形されたステータス表示 |

## 表示項目

### ステータスライン（下部）

| セクション | 位置 | 表示内容 |
|------------|------|----------|
| section_a | 左端 | 編集モード（NORMAL, INSERT, VISUAL等） |
| section_error | 左 | エラー数（ALE連携） |
| section_warning | 左 | 警告数（ALE連携） |
| section_b | 左 | Gitブランチ名 |
| section_c | 中央 | ファイル名（パス） |
| section_x | 右 | ファイルタイプ |
| section_y | 右 | エンコーディング、改行コード |
| section_z | 右端 | 行番号、カラム位置、ファイル位置（%） |

### タブライン（上部）

| 表示項目 | 説明 |
|----------|------|
| バッファ番号 | 各バッファの番号（0-9でジャンプ可能） |
| ファイル名 | バッファのファイル名（短縮表示） |
| 変更マーカー | 未保存の変更がある場合のインジケータ |

## イベント仕様

### 1-モード変更時の表示更新

編集モードが変更されると、ステータスラインのセクションAの色と表示が更新される。

```
[トリガー] InsertEnter / InsertLeave / VisualEnter等
        ↓
[vim-airline] mode_changed autocmd
        ↓
[画面更新] セクションAの色・テキストが変更
```

### 2-バッファ切り替え時の更新

バッファを切り替えると、ファイル情報セクションが更新される。

```
[トリガー] BufEnter
        ↓
[vim-airline] ステータスライン再描画
        ↓
[画面更新] ファイル名、タイプ、Git情報が更新
```

### 3-ALE診断結果の反映

ALEによる構文チェックが完了すると、エラー・警告セクションが更新される。

```
[トリガー] ALELintPost
        ↓
[vim-airline] ALE拡張機能が結果を取得
        ↓
[画面更新] エラー・警告数がステータスラインに表示
```

### 4-タブラインでのバッファ選択

タブラインに表示されたバッファ番号に対応するキーを押すと、そのバッファに切り替わる。

```
[ユーザー操作] Leader + 1-9キー押下
        ↓
[vim-airline] <Plug>AirlineSelectTab{N}
        ↓
[バッファ切り替え] 指定番号のバッファを表示
```

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

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

## メッセージ仕様

Airline自体はメッセージを表示しない。ステータスライン上の情報表示のみ。

## 例外処理

| 例外状態 | 対処 | ユーザーへの通知 |
|---------|------|-----------------|
| vim-fugitive未インストール | Git情報セクションを非表示 | 特になし |
| ALE未インストール | エラー・警告セクションを非表示 | 特になし |
| Powerlineフォント未インストール | フォールバックシンボルを使用 | 特になし（設定で制御可能） |

## 備考

- vim-airlineはvim-airline開発チームによって開発されたステータスラインプラグインである
- space-vimではvioletテーマがデフォルトで設定されている
- タブラインでのバッファ表示が有効化されており、`buffer_idx_mode`で番号選択が可能
- Powerlineフォントがインストールされていない場合、ASCIIフォールバックが自動適用される
- space-vimでは遅延読み込みが設定されており、250ms後に読み込まれる

---

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

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

### 推奨読解順序

#### Step 1: プラグイン登録と遅延読み込みを理解する

まず、vim-airlineがどのように登録され、いつ読み込まれるかを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | packages.vim | `layers/+themes/airline/packages.vim` | vim-airlineの登録と遅延読み込み設定 |
| 1-2 | defer.vim | `core/autoload/spacevim/defer.vim` | airlineの遅延読み込み関数（250ms後に実行） |

**読解のコツ**: `speed_up_via_timer`設定により、timer_startで250ms後に読み込まれる。

**主要処理フロー**:
1. **2-3行目（packages.vim）**: vim-airline-themesとvim-airlineの遅延読み込み設定
2. **6行目（packages.vim）**: `call timer_start(250, 'spacevim#defer#airline')` - 250ms後に読み込み
3. **14-17行目（defer.vim）**: `spacevim#defer#airline()`関数 - プラグインロードと再描画

#### Step 2: Airline設定を理解する

ステータスライン・タブラインの詳細設定を確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | config.vim | `layers/+themes/airline/config.vim` | テーマ、拡張機能、レイアウト設定 |

**主要処理フロー**:
1. **4行目**: `let g:airline_theme='violet'` - テーマ設定
2. **6行目**: `let g:airline#extensions#branch#enabled = 1` - Git連携有効化
3. **7-14行目**: タブライン設定（有効化、バッファ番号表示、フォーマット）
4. **15-22行目**: セクション幅の設定
5. **23-26行目**: レイアウト設定（セクションの配置順序）
6. **29-30行目**: ALE連携シンボル設定

#### Step 3: シンボル設定を理解する

Powerlineフォント未使用時のフォールバックシンボルを確認する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | airline.vim | `core/autoload/spacevim/plug/airline.vim` | フォールバックシンボル定義 |
| 3-2 | config.vim | `layers/+themes/airline/config.vim` | シンボル適用処理（31-40行目） |

**主要処理フロー**:
1. **4-9行目（airline.vim）**: `g:spacevim#plug#airline#symbols`の定義
2. **31-40行目（config.vim）**: `SpacevimAfterUserConfig`イベントでシンボル適用

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

```
Vim起動
    │
    ├─ timer_start(250, ...)
    │      │
    │      └─ spacevim#defer#airline()
    │             ├─ plug#load('vim-airline', 'vim-airline-themes')
    │             └─ redraws!
    │
    └─ vim-airline（プラグイン本体）
           │
           ├─ ステータスライン初期化
           │      ├─ section_a（モード）
           │      ├─ section_b（ブランチ）
           │      ├─ section_c（ファイル）
           │      ├─ section_x（タイプ）
           │      ├─ section_y（エンコード）
           │      └─ section_z（位置）
           │
           └─ タブライン初期化
                  └─ バッファ一覧表示

SpacevimAfterUserConfig イベント
    │
    └─ s:after_user_config()
           └─ Powerlineフォント未使用時のシンボル設定
```

### データフロー図

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

Vimモード変更 ──▶ vim-airline ──────────▶ セクションA更新
                          │
                          └─▶ 色・テキスト変更

ファイル切替 ───▶ vim-airline ──────────▶ ステータスライン更新
                          │
                          └─▶ ファイル情報取得・表示

ALE診断完了 ───▶ airline#extensions#ale ─▶ エラー・警告表示
                          │
                          └─▶ 診断結果取得・表示

vim-fugitive ──▶ airline#extensions#branch ▶ ブランチ名表示
                          │
                          └─▶ Git情報取得・表示
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| packages.vim | `layers/+themes/airline/packages.vim` | ソース | vim-airlineプラグイン登録・遅延読み込み |
| config.vim | `layers/+themes/airline/config.vim` | ソース | テーマ・拡張機能・レイアウト設定 |
| defer.vim | `core/autoload/spacevim/defer.vim` | ソース | 遅延読み込み実行関数 |
| airline.vim | `core/autoload/spacevim/plug/airline.vim` | ソース | フォールバックシンボル定義 |
| 画面一覧.csv | `docs/code-to-docs/画面一覧/画面一覧.csv` | データ | 画面No.14の定義 |
