VsVimとPerforceのコマンド活用で快適なコーディング生活を送る

# 最初に

記事中にある開発環境は以下のとおりです。

- VsVimのバージョン：**2.4.1.0**
- IDE：**Visual Studio 2017**
- CLI：Windows PowerShell

また、本記事は[Vim Advent Calendar 2017](https://qiita.com/advent-calendar/2017/vim)の記事です。

結構ギリギリの投稿になってしまって申し訳ありません(´・ω・｀)

# 目的

私が現在所属しているプロジェクトではUE4を用いたゲーム開発をしており、バージョン管理ツールにはPerforceを、IDEにはVisual Studio 2017を採用しています。最近がっつり開発していく中で、Windows PowerShellを使用し、Perforceのコマンドを打ち込んだり、開発コードをVSで書いたりが多くなってきています。

ただ私は、「やりたい事があって、そのコマンドが存在していることまではわかるんだけど、コマンド名自体が思い出せない。接頭辞さえ思い出せない。」という痴呆が多々あリます。そのため、ブラウザの新規タブを開き、コマンド探しの旅に出かける、という無駄な手順が発生しがちです…。

なので、少しでも開発の方に集中して時間を避ける様に、使用頻度が高いコマンド等を、この記事に集めておこうと思います。

あわよくば、誰か似た様な境遇の人の支えにも慣れたら幸いです。

# VsVimとは

Visual Studio 2012以降で使用できるプラグインです。MSで開発されたものではなく、[一開発者の方](https://twitter.com/jaredpar)から生み出されました。Vimユーザーが快適にVSを操作できる様なキーバイディングを提供しています。

VsVim：https://marketplace.visualstudio.com/items?itemName=JaredParMSFT.VsVim

導入方法は以下の記事で詳しく説明されています。

参考：[VsVimの宣伝！](https://qiita.com/Shaula/items/0264fe6fb436f2525702)

# Perforceとは

今回の記事では詳しい説明は省きますが、簡単に紹介をしておきます。

Perforce社から出ている有料の企業向けバージョン管理システムです。
Windows,Linux,MacOSでも動作するマルチプラットフォームで、ツール自体が軽快で高速に動作します。

GitやSubstanceとの比較も載せておきます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/36899/6950d9a9-04e7-97a1-f19b-3c3507abf340.png)

ちなみに、もちろんPerforceにも様々なコマンドが存在しています。

コマンドリファレンス：http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/index.html

# コマンド一覧

⇧ Shift
^ Ctrl

## 共通操作(VS2017)

### 行の編集

| キー           | 動作                             | 備考                                   |
| -------------- | -------------------------------- | -------------------------------------- |
| [^]+[X]        | 行の切り取り                     | 未選択状態の行全体を切り取り           |
| [^]+[C]        | 行のコピー                       | 未選択状態の行全体をコピー             |
| [^]+[⇧]+[L]    | カーソル行を削除                 | 行全体を削除(複数行を選択中は全ての行) |
| [Tab]      | 行をインデント                   |                                        |
| [⇧]+[Tab]      | 行をアンインデント               |                                        |

### コメントの編集

| キー        | 動作                         | 備考                       |
| ----------- | ---------------------------- | -------------------------- |
| [^]+[K],[^]+[C]     | 行コメント記号をトグル       | 複数行を選択中はその行数分 |
| [^]+[K],[^]+[U]  | ブロックコメント記号をトグル | 選択中は選択部分           |

### ファイル/フォルダ自体の表示

| キー        | 動作                                           | 備考                                         |
| ----------- | ---------------------------------------------- | -------------------------------------------- |
| [^]+[Tab]   | 開いているエディターの切り替え表示                     | 開いた後は^を押下したままTabで切り替えられる |

### 検索/置換(シンボルに関しては後述)

| キー        | 動作                                       | 備考                                                       |
| ----------- | ------------------------------------------ | ---------------------------------------------------------- |
| [^]+[⇧]+[F] | 全ファイルにまたがってキーワード検索をするポップアップ表示 |                                                            |
| [^]+[⇧]+[H]     | 全ファイルにまたがって置換をするポップアップ表示                       |                                                       |
| [F3]        | 次を検索                                   | マッチワードがあればその単語で検索                         |
| [⇧]+[F3]    | 前を検索                                   | 同上                                                       |                                                        |

### エディタ移動操作

| キー            | 動作                       | 備考                        |
| --------------- | -------------------------- | --------------------------- |
| [^]+[-]         | 前に表示していた箇所に戻る |                             |
| [^]+[⇧]+[-]     | 次の箇所に進む             |                             |


## コーディング時の操作

### シンボル検索/表示

| キー           | 動作                                           | 備考                               |
| -------------- | ---------------------------------------------- | ---------------------------------- |
| [Alt]+[F12] | シンボルの定義を表示                           | シンボルは変数名、メソッド名のこと |
| [F12]          | シンボルの定義を表示                           | 基本はこっちの方が使い勝手が良い   |
| [^]+[T]        | 全ファイルにまたがって参照検索しファイルを開く |                                    |
| [⇧]+[F12]      | シンボル参照箇所のインライン表示               | [esc]で消せる                      |

### デバッグ操作

| キー      | 動作                               | 備考 |
| --------- | ---------------------------------- | ---- |
| [F9]      | ブレークポイントの切り替え         |      |
| [F5]      | デバッグスタート又はコンティニュー |      |
| [⇧]+[F5]  | ストップ                           |      |
| [F6]      | ポーズ                             |      |
| [F10]     | ステップオーバー                   |      |
| [F11]     | ステップイン                       |      |
| [⇧]+[F11] | ステップアウト                     |      |

## VsVimコマンド

### モード切り替え

| キー  | 動作                 | 備考             |
| ----- | -------------------- | ---------------- |
| [i]   | 挿入モード           | カーソルの前から |
| [a]   | 挿入モード           | カーソルの後から |
| [:]   | コマンドラインモード |                  |
| [v]   | ビジュアルモード     |                  |
| [esc] | ノーマルモード       |                  |

### ファイル操作

| キー    | 動作                                         | 備考                                     |
| ------- | -------------------------------------------- | ---------------------------------------- |
| [:]+[q] | 開いているファイルを閉じる                   | エディタウィンドウが複数なら右から順番に |

### エディタ操作(ノーマルモード)

| キー    | 動作                                 | 備考                                             |
| ------- | ------------------------------------ | ------------------------------------------------ |
| [dd]    | カーソルがある行を切り取り           | [dd]の前に数値を入れて切り取る行数の指定が可能   |
| [yy]    | カーソルがある行のコピー             | [yy]の前に数値を入れてコピーする行数の指定が可能 |
| [P]     | カーソルがある行にペースト           |                                                  |
| [p]     | カーソルの下の行にペースト           |                                                  |
| [u]     | Undo                                 |                                                  |
| [^]+[r] | Redo                                 |                                                  |
| [U]     | 行に対して行った変更の全てを取り消す |                                                  |
| [v]     | 選択開始                             |                                                  |
| [V]     | 行選択                               |                                                  |
| [Alt]+[⇧]+[矢印キー] | 矩形選択                             |                                                  |
| [gv]    | 直前の選択範囲を再選択               |                                                  |

### 検索/置換(ノーマルモード)

| キー                   | 動作                               | 備考                           |
| ---------------------- | ---------------------------------- | ------------------------------ |
| [/]+[文字列]           | 前方検索                           |                                |
| [?]+[文字列]           | 後方検索                           |                                |
| [#]                    | カーソル位置の単語を前方検索       |                                |
| [*]                    | カーソル位置の単語を後方検索       |                                |
| [n]                    | 次の候補                           |                                |
| [N]                    | 前の候補                           |                                |
| [gd]                   | カーソル位置のローカル宣言を検索   |                                |
| [gD]                   | カーソル位置のグローバル宣言を検索 |                                |
| [:]+[%s/from/to/g]     | ページ全体で置換                   | fromが検索語句,toが置換語句    |
| [:]+[32,50s/from/to/g] | 32〜50行目まで置換                 | gは繰り返し、cなら一回毎に確認 |

### テキスト操作(ノーマルモード)

| キー    | 動作                                           | 備考                |
| ------- | ---------------------------------------------- | ------------------- |
| [x]     | 1文字削除                                      | Deleteキーと同じ    |
| [X]     | 1文字削除                                      | BSキーと同じ        |
| [D]     | カーソル位置から行末まで削除                   |                     |
| [s]     | 1文字削除して挿入モードへ切り替え              |                     |
| [S]     | 現在の行を削除して挿入モードへ切り替え         |                     |
| [r]     | カーソル位置の一文字だけ置換                   |                     |
| [R]     | 置換モードに切り替え                           |                     |
| [J]     | 現在の行と下の行をスペースありで連結           |                     |
| [gJ]    | 現在の行と下の行をスペースなしで連結           |                     |

### インデント操作(ノーマルモード)

| キー       | 動作                                 | 備考 |
| ---------- | ------------------------------------ | ---- |
| [⇧]+[>],[⇧]+[>]        | 現在の行をインデント                 |      |
| [⇧]+[<],[⇧]+[<]        | 現在の行を逆インデント               |      |

### 移動操作(ノーマルモード)

| キー              | 動作                                   | 備考                          |
| ----------------- | -------------------------------------- | ----------------------------- |
| [gg]              | 最初の行へ                             |                               |
| [G]               | 最後の行へ                             |                               |
| [数値]+[G]        | 指定した行へ                           |                               |
| [0]               | 行の最初へ                             | インデント無視                |
| [^(Ctrlではない)] | 現在の行の最初へ                       | テキストの最初                |
| [$]               | 行の末尾へ                             |                               |
| [-]               | 前の行の最初へ                         |                               |
| [+]               | 次の行の最初へ                         |                               |
| [%]               | カーソル位置にある括弧に対応する括弧へ |                               |
| [H]               | エディタの上端へ移動                   | Hの前に数値で上から数えた行へ |
| [M]               | エディタの中央行へ移動                 |                               |
| [L]               | エディタの下端へ移動                   | Lの前に数値で上から数えた行へ |
| [^]+[o]           | 前回のジャンプ位置へ戻る               |                               |
| [^]+[i]           | 次回のジャンプ位置へ戻る               |                               |
| [z]+[↩︎]          | 現在の行の最初へ                       | テキストの最初                |
| [w]               | 次の単語に移動                         |                               |
| [b]               | 前の単語に移動                         |                               |
| [e]               | 単語の末尾に移動                       |                               |
| [W]               | 次の単語に移動                         | 記号は無視                    |
| [B]               | 前の単語に移動                         | 記号は無視                    |
| [E]               | 単語の末尾に移動                       | 記号は無視                    |
| [f]+[一文字]      | カーソルを指定した文字まで移動         | 3fiで3つ目のiまで移動         |
| [t]+[一文字]      | カーソルを指定した文字の左端まで移動   | 3tiで3つ目のiの左側まで移動   |

### スクロール操作(ノーマルモード)
| キー    | 動作              | 備考                                   |
| ------- | ----------------- | -------------------------------------- |
| [^]+[b] | 1画面上に移動     |                                        |
| [^]+[u] | 半画面上に移動    |                                        |
| [^]+[y] | 1行上に移動       |                                        |
| [^]+[f] | 1画面下に移動     |                                        |
| [^]+[d] | 半画面下に移動    |                                        |
| [^]+[e] | 1行下に移動       |                                        |

## Perfoceコマンド

使用頻度が高い順に並べてみました。

| コマンド    | 動作              | 備考                                   |
| ------- | ----------------- | -------------------------------------- |
|p4 add|指定した新規ファイルをチェンジリストに追加。|[参照URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_add.html)|
|p4 edit|指定したファイルを作業中にし、チェンジリストに追加。|[参照URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_edit.html)|
|p4 delete|指定したファイルを削除としてチェンジリストに追加。|[参照URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_delete.html)|
|p4 clean|チェンジリスト内の全てのファイルを復元。|[参照URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_clean.html)|
|p4 lock|作業中のファイルをロックしてサブミットされない様にする。|[参考URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_lock.html)|
|p4 unlock|ロックを解除する。|[参考URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_unlock.html)|
|p4 submit|チェンジリストに含まれている作業中のファイル群をディポにコミットする。|[参考URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_submit.html)|
|p4 sync|ディポの内容をクライアント側に反映させる。|[参考URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_sync.html)|
|p4 depot|新規ディポ作成。|[参照URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_depot.html)|
|p4 diff|ローカルファイルとディポファイルとで比較を行う。|[参照URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_diff.html)|
|p4 grep|パターンに一致する行を検索。|[参照URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_grep.html)|
|p4 help|Perforceのオンラインヘルプ情報表示。|[参考URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_help.html)|
|p4 info|現在のPerforceのバージョン情報などを表示します。|[参考URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_info.html)|
|p4 opened|チェンジリスト内にある作業状態のファイルをリスト表示する。|[参考URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_opened.html)|
|p4 rename|指定したファイルの名前変更。|[参考URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_rename.html)|
|p4 revert|作業中のファイルに加えられた変更を全て破棄する。|[参考URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_revert.html)|
|p4 switch|別のストリームに切り替える事ができる。|[参考URL](http://www.toyo.co.jp/files/user/img/product/ss/help/perforce/r15.1/manuals/cmdref/p4_switch.html)|