# Neovim チートシート

このNeovim設定は、Joseanのカスタム設定をベースにしています。

## リーダーキー

- **Leader**: `Space`

## 基本操作

### モード切り替え

| キーバインド | 説明 |
|------------|------|
| `jk` | インサートモードから抜ける（カスタム） |
| `i` | インサートモード |
| `v` | ビジュアルモード |
| `V` | ビジュアルラインモード |
| `Ctrl v` | ビジュアルブロックモード |
| `Esc` | ノーマルモードに戻る |

### 保存と終了

| キーバインド | 説明 |
|------------|------|
| `:w` | 保存 |
| `:q` | 終了 |
| `:wq` / `ZZ` | 保存して終了 |
| `:q!` | 保存せず強制終了 |

## ナビゲーション

### 基本移動

| キーバインド | 説明 |
|------------|------|
| `h` / `j` / `k` / `l` | 左 / 下 / 上 / 右 |
| `w` / `b` | 次の単語 / 前の単語 |
| `0` / `^` | 行頭 / 行頭（空白以外） |
| `$` | 行末 |
| `gg` | ファイル先頭 |
| `G` | ファイル末尾 |
| `Ctrl d` | 半ページ下 |
| `Ctrl u` | 半ページ上 |
| `Ctrl f` | 1ページ下 |
| `Ctrl b` | 1ページ上 |

## 編集

### 基本編集

| キーバインド | 説明 |
|------------|------|
| `i` / `a` | カーソル前 / 後に挿入 |
| `I` / `A` | 行頭 / 行末に挿入 |
| `o` / `O` | 下 / 上に新しい行を挿入 |
| `dd` | 行を削除 |
| `yy` | 行をヤンク（コピー） |
| `p` / `P` | カーソル後 / 前にペースト |
| `u` | アンドゥ |
| `Ctrl r` | リドゥ |

### 数値の増減

| キーバインド | 説明 |
|------------|------|
| `Leader +` | 数値をインクリメント（カスタム） |
| `Leader -` | 数値をデクリメント（カスタム） |

### 検索とハイライト

| キーバインド | 説明 |
|------------|------|
| `/pattern` | 前方検索 |
| `?pattern` | 後方検索 |
| `n` / `N` | 次 / 前の検索結果 |
| `Leader nh` | 検索ハイライトをクリア（カスタム） |

## ウィンドウ管理

### 分割

| キーバインド | 説明 |
|------------|------|
| `Leader sv` | ウィンドウを垂直分割（カスタム） |
| `Leader sh` | ウィンドウを水平分割（カスタム） |
| `Leader se` | 分割ウィンドウを均等サイズに（カスタム） |
| `Leader sx` | 現在の分割を閉じる（カスタム） |

### ウィンドウ間移動

| キーバインド | 説明 |
|------------|------|
| `Ctrl h` / `j` / `k` / `l` | 左 / 下 / 上 / 右のウィンドウに移動 |

※ tmux-navigatorプラグインでtmuxペインとシームレスに移動可能

## タブ管理

| キーバインド | 説明 |
|------------|------|
| `Leader to` | 新しいタブを開く（カスタム） |
| `Leader tx` | 現在のタブを閉じる（カスタム） |
| `Leader tn` | 次のタブ（カスタム） |
| `Leader tp` | 前のタブ（カスタム） |
| `Leader tf` | 現在のバッファを新しいタブで開く（カスタム） |

## ファイル操作（Telescope）

| キーバインド | 説明 |
|------------|------|
| `Leader ff` | ファイルをファジー検索 |
| `Leader fr` | 最近開いたファイルを検索 |
| `Leader fs` | カレントディレクトリ内を文字列検索（live grep） |
| `Leader fc` | カーソル下の文字列を検索 |
| `Leader ft` | TODOコメントを検索 |
| `Leader fk` | キーマップを検索 |

### Telescope内のキーバインド

| キーバインド | 説明 |
|------------|------|
| `Ctrl j` / `Ctrl k` | 次 / 前の結果 |
| `Ctrl q` | クイックフィックスリストに送信してTroubleを開く |
| `Ctrl t` | Troubleで開く |

## ファイルエクスプローラー（NvimTree）

| キーバインド | 説明 |
|------------|------|
| `Leader ee` | ファイルエクスプローラーを切り替え |
| `Leader ef` | 現在のファイルでエクスプローラーを切り替え |
| `Leader ec` | ファイルエクスプローラーを折りたたむ |
| `Leader er` | ファイルエクスプローラーをリフレッシュ |

### NvimTree内のキーバインド

| キーバインド | 説明 |
|------------|------|
| `Enter` / `o` | ファイルを開く／ディレクトリを展開 |
| `a` | 新しいファイル／ディレクトリを作成 |
| `d` | 削除 |
| `r` | リネーム |
| `x` | カット |
| `c` | コピー |
| `p` | ペースト |
| `y` | ファイル名をコピー |
| `Y` | 相対パスをコピー |
| `g y` | 絶対パスをコピー |
| `R` | リフレッシュ |
| `H` | 隠しファイルを切り替え |

## LSP（Language Server Protocol）

### コードナビゲーション

| キーバインド | 説明 |
|------------|------|
| `gR` | リファレンスを表示（Telescope） |
| `gD` | 宣言に移動 |
| `gd` | 定義に移動 |
| `gi` | 実装を表示（Telescope） |
| `gt` | 型定義を表示（Telescope） |
| `K` | ホバードキュメントを表示 |

### コードアクション

| キーバインド | 説明 |
|------------|------|
| `Leader ca` | コードアクションを表示 |
| `Leader rn` | シンボルをリネーム |

### 診断

| キーバインド | 説明 |
|------------|------|
| `Leader d` | 行の診断を表示 |
| `Leader D` | ファイルの診断を表示（Telescope） |
| `[d` | 前の診断に移動 |
| `]d` | 次の診断に移動 |
| `Leader rs` | LSPを再起動 |

## Git操作（Gitsigns）

| キーバインド | 説明 |
|------------|------|
| `]h` | 次のhunkに移動 |
| `[h` | 前のhunkに移動 |
| `Leader hs` | hunkをステージ |
| `Leader hr` | hunkをリセット |
| `Leader hS` | バッファをステージ |
| `Leader hR` | バッファをリセット |
| `Leader hp` | hunkをプレビュー |
| `Leader hb` | 行のblameを表示 |
| `Leader hd` | 差分を表示 |

## コメント

| キーバインド | 説明 |
|------------|------|
| `gcc` | 行をコメント切り替え |
| `gc` + motion | モーションに対してコメント切り替え |
| `gbc` | ブロックコメント切り替え |

ビジュアルモードでも同様：
- `gc`: 選択範囲をコメント
- `gb`: 選択範囲をブロックコメント

## Treesitter テキストオブジェクト

### 選択

| キーバインド | 説明 |
|------------|------|
| `vaa` | パラメータの外側を選択 |
| `via` | パラメータの内側を選択 |
| `vaf` | 関数の外側を選択 |
| `vif` | 関数の内側を選択 |
| `vac` | クラスの外側を選択 |
| `vic` | クラスの内側を選択 |

### 移動

| キーバインド | 説明 |
|------------|------|
| `]]` | 次の関数の開始 |
| `][` | 次の関数の終了 |
| `[[` | 前の関数の開始 |
| `[]` | 前の関数の終了 |

### リピート

| キーバインド | 説明 |
|------------|------|
| `;` | 最後の移動を繰り返す |
| `,` | 最後の移動を逆方向に繰り返す |

## サラウンド操作

| キーバインド | 説明 |
|------------|------|
| `ys` + motion + char | サラウンドを追加 |
| `ds` + char | サラウンドを削除 |
| `cs` + old + new | サラウンドを変更 |

例：
- `ysiw"`: 単語を`"`で囲む
- `ds"`: `"`を削除
- `cs"'`: `"`を`'`に変更

## 補完（nvim-cmp）

インサートモード内：

| キーバインド | 説明 |
|------------|------|
| `Ctrl n` / `Ctrl p` | 次 / 前の補完候補 |
| `Ctrl b` / `Ctrl f` | ドキュメントをスクロール |
| `Ctrl Space` | 補完を表示 |
| `Ctrl e` | 補完を閉じる |
| `Enter` | 補完を確定 |

## その他の便利な機能

### Auto-pairs

括弧、引用符などは自動で閉じられます。

### Trouble

| キーバインド | 説明 |
|------------|------|
| `Leader xx` | Troubleを切り替え |
| `Leader xw` | ワークスペースの診断 |
| `Leader xd` | ドキュメントの診断 |
| `Leader xq` | クイックフィックス |
| `Leader xl` | ロケーションリスト |

## Tips

1. **リーダーキー**: `Space`がリーダーキーなので、`Space`から始まるコマンドが多い
2. **Telescope**: ファイル検索は`Leader ff`、文字列検索は`Leader fs`が最もよく使う
3. **LSP**: `gd`（定義に移動）と`K`（ドキュメント表示）は頻繁に使用
4. **分割ウィンドウ**: `Ctrl h/j/k/l`でウィンドウ間を移動、tmuxとシームレス
5. **ファイルエクスプローラー**: `Leader ee`でNvimTreeを開閉
6. **どこでも使える**: `:h <keyword>`でヘルプを検索
