Powershellの入力をvi風にする

## 概要
Powershellの入力をvi風にする手順です、

### 使用バージョン

```powershell
> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.22000.2538
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.22000.2538
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
```

```powershell
> get-module -Name PSReadLine

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     2.0.0      PSReadline                          {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PS...
```

### デフォルトの入力モード

デフォルトは[Windows]となっています。
```powershell
> Get-PSReadLineOption
EditMode                               : Windows
...
```

## 手順

### 入力モードをviに変更

```powershell
> Set-PSReadlineOption -EditMode Vi
> Get-PSReadLineOption
EditMode                               : Vi
...
```

### 変更後の操作方法
vi同様escでコマンドモードへ変更、<i>や<a>で入力モードに変更が出来ます。

```powershell
> Get-PSReadLineKeyHandler


基本的な編集機能
========

Key              Function                         Description
---              --------                         -----------
Enter            AcceptLine                       入力を受け入れるか、入力に終了トークンがない場合は次の行に移動します
                                                  。
Shift+Enter      AddLine                          入力を実行せずにカーソルを次の行に移動します
<Shift+Enter>    AddLine                          入力を実行せずにカーソルを次の行に移動します
Backspace        BackwardDeleteChar               カーソルの前にある文字を削除します
<X>              BackwardDeleteChar               カーソルの前にある文字を削除します
<d,h>            BackwardDeleteChar               カーソルの前にある文字を削除します
Ctrl+u           BackwardDeleteLine               カーソル位置から行頭までのテキストを削除します
Ctrl+Home        BackwardDeleteLine               カーソル位置から行頭までのテキストを削除します
<Ctrl+u>         BackwardDeleteLine               カーソル位置から行頭までのテキストを削除します
<Ctrl+Home>      BackwardDeleteLine               カーソル位置から行頭までのテキストを削除します
<d,0>            BackwardDeleteLine               カーソル位置から行頭までのテキストを削除します
<Ctrl+w>         BackwardDeleteWord               行の前の単語を削除します。
<d,b>            BackwardDeleteWord               行の前の単語を削除します。
Ctrl+Backspace   BackwardKillWord                 現在の単語または前の単語の先頭からカーソル位置までのテキストをキル リ
                                                  ングに移動します
<Ctrl+Backspace> BackwardKillWord                 現在の単語または前の単語の先頭からカーソル位置までのテキストをキル リ
                                                  ングに移動します
<c,h>            BackwardReplaceChar              カーソルの前の文字を置き換えます。
Ctrl+c           CancelLine                       現在の行の編集を中止し、プロンプトを再評価します
<Ctrl+c>         CancelLine                       現在の行の編集を中止し、プロンプトを再評価します
Delete           DeleteChar                       カーソルの下にある文字を削除します
<Delete>         DeleteChar                       カーソルの下にある文字を削除します
<x>              DeleteChar                       カーソルの下にある文字を削除します
<d,l>            DeleteChar                       カーソルの下にある文字を削除します
<d,Spacebar>     DeleteChar                       カーソルの下にある文字を削除します
<d,e>            DeleteEndOfWord                  空白と一般的な区切り文字で区切られた現在の単語の末尾まで削除します。
<d,d>            DeleteLine                       現在の行を削除します。
<d,^>            DeleteLineToFirstChar            先頭の空白を除いて行全体を削除します。
<D>              DeleteToEnd                      カーソル位置から行末まで削除します。
<d,$>            DeleteToEnd                      カーソル位置から行末まで削除します。
<d,w>            DeleteWord                       現在の単語を削除します
Ctrl+End         ForwardDeleteLine                カーソル位置から行末までのテキストを削除します
<Ctrl+End>       ForwardDeleteLine                カーソル位置から行末までのテキストを削除します
<~>              InvertCase                       現在の文字の大文字と小文字を反転し、カーソルを進めます。
Ctrl+Delete      KillWord                         カーソル位置から現在の単語または次の単語の末尾までのテキストをキル リ
                                                  ングに移動します
<Ctrl+Delete>    KillWord                         カーソル位置から現在の単語または次の単語の末尾までのテキストをキル リ
                                                  ングに移動します
Ctrl+v           Paste                            システムのクリップボードからテキストを貼り付けます
<Ctrl+v>         Paste                            システムのクリップボードからテキストを貼り付けます
<p>              PasteAfter                       カーソルの後ろにローカル クリップボードの内容を書き込みます。
<P>              PasteBefore                      カーソルの前にローカル クリップボードの内容を書き込みます。
<#>              PrependAndAccept                 入力された文字を先頭に挿入し、行を受け入れます。
Ctrl+y           Redo                             元に戻した操作をやり直します
<Ctrl+y>         Redo                             元に戻した操作をやり直します
<.>              RepeatLastCommand                最後の変更コマンドを繰り返します。
<c,l>            ReplaceChar                      現在の文字を入力された次の文字セットに置き換えます。
<c,Spacebar>     ReplaceChar                      現在の文字を入力された次の文字セットに置き換えます。
<r>              ReplaceCharInPlace               現在の文字を 1 文字だけと置き換えます。
Ctrl+t           SwapCharacters                   現在の文字と現在の文字の前にある文字を入れ替えます。
<Ctrl+t>         SwapCharacters                   現在の文字と現在の文字の前にある文字を入れ替えます。
Ctrl+z           Undo                             前の編集を元に戻します
<Ctrl+z>         Undo                             前の編集を元に戻します
<u>              Undo                             前の編集を元に戻します
<U>              UndoAll                          この行のすべてのコマンドを元に戻します。
<Enter>          ViAcceptLine                     行を受け入れ、Vi の挿入モードに切り替えます。
Ctrl+d           ViAcceptLineOrExit               行が空の場合は終了し、それ以外の場合は行を入力として受け入れます。
<Ctrl+d>         ViAcceptLineOrExit               行が空の場合は終了し、それ以外の場合は行を入力として受け入れます。
<o>              ViAppendLine                     現在の行に新しい複数行の編集モード行を追加します。
<d,B>            ViBackwardDeleteGlob             空白で区切られた前の単語の先頭まで逆方向に削除します。
<B>              ViBackwardGlob                   空白で区切られた前の単語の先頭にカーソルを移動します。
<c,B>            ViBackwardReplaceGlob            空白で区切られた前の単語の先頭まで逆方向に削除し、挿入モードに移行し
                                                  ます。
<c,0>            ViBackwardReplaceLine            カーソルの左の行と先頭までのすべてを置き換えます。
<c,^>            ViBackwardReplaceLineToFirstChar カーソルの左の行と、1 文字を除いて行の先頭まで置き換えます。
<c,b>            ViBackwardReplaceWord            前の単語を置き換えます。
<d,%>            ViDeleteBrace                    カーソルと対応するかっこの間にあるすべての文字を削除します。
<d,E>            ViDeleteEndOfGlob                空白で区切られたこの単語の末尾まで削除します。
<d,W>            ViDeleteGlob                     空白で区切られた現在の単語を削除します。
<d,t>            ViDeleteToBeforeChar             指定した文字まで削除します。
<d,T>            ViDeleteToBeforeCharBackward     指定した文字まで削除します。
<d,f>            ViDeleteToChar                   指定した文字まで削除します。
<d,F>            ViDeleteToCharBackward           指定した文字まで後方に削除します。
<I>              ViInsertAtBegining               行の先頭にカーソルを移動し、挿入モードに切り替えます。
<A>              ViInsertAtEnd                    行の末尾にカーソルを移動し、挿入モードに切り替えます。
<O>              ViInsertLine                     現在の行の前に新しい複数行の編集モード行を挿入します。
<a>              ViInsertWithAppend               挿入モードに切り替え、現在の行の位置に追加します。

              ViInsertWithDelete               現在の文字を削除し、挿入モードに切り替えます。
<J>              ViJoinLines                      現在の複数行の編集モード行を次の行と結合します。
<c,%>            ViReplaceBrace                   現在のかっこ文字と対応する文字の間にあるすべての文字を置き換えます。
<c,E>            ViReplaceEndOfGlob               空白で区切られた単語の末尾まで削除し、挿入モードに移行します。
<c,e>            ViReplaceEndOfWord               空白と一般的な区切り記号で区切られた単語の末尾まで削除し、挿入モード
                                                  に移行します。
<c,W>            ViReplaceGlob                    空白で区切られた次の単語の先頭まで削除し、挿入モードに移行します。
<S>              ViReplaceLine                    現在の行を、入力された次の文字セットで置き換えます。
<c,c>            ViReplaceLine                    現在の行を、入力された次の文字セットで置き換えます。
<c,t>            ViReplaceToBeforeChar            指定した文字まで置換します。
<c,T>            ViReplaceToBeforeCharBackward    指定した文字まで置換します。
<c,f>            ViReplaceToChar                  指定した文字まで削除します。
<c,F>            ViReplaceToCharBackward          指定した文字まで置換します。
<C>              ViReplaceToEnd                   カーソル位置から行の末尾までの文字を置き換えます。
<c,$>            ViReplaceToEnd                   カーソル位置から行の末尾までの文字を置き換えます。
<R>              ViReplaceUntilEsc                エスケープが入力されるか行が受け入れられるまで、現在の文字を置き換え
                                                  ます。
<c,w>            ViReplaceWord                    現在の単語を置き換えます。
<y,0>            ViYankBeginningOfLine            カーソルの前の文字をローカル クリップボードに配置します。
<y,E>            ViYankEndOfGlob                  カーソル位置から空白で区切られた次の単語の末尾までの文字をローカル ク
                                                  リップボードに配置します。
<y,e>            ViYankEndOfWord                  カーソル位置から、空白と一般的な区切り文字で区切られた次の単語の末尾
                                                  までの文字をローカル クリップボードに配置します。
<y,h>            ViYankLeft                       カーソルの左側の文字をローカル クリップボードに配置します。
<y,y>            ViYankLine                       現在の行のすべての文字をローカル クリップボードに配置します。
<y,W>            ViYankNextGlob                   カーソル位置から空白で区切られた単語の末尾までのすべての文字をローカ
                                                  ル クリップボードに配置します。
<y,w>            ViYankNextWord                   カーソル位置から、空白と一般的な区切り文字で区切られた単語の末尾まで
                                                  のすべての文字をローカル クリップボードに配置します。
<y,%>            ViYankPercent                    対応するかっことカーソルの間のすべての文字をローカル クリップボードに
                                                  配置します。
<y,B>            ViYankPreviousGlob               カーソル位置の前から空白で区切られた前の単語の先頭までのすべての文字
                                                  をローカル クリップボードに配置します。
<y,b>            ViYankPreviousWord               カーソル位置の前から、空白と一般的な区切り文字で区切られた前の単語の
                                                  先頭までのすべての文字をローカル クリップボードに配置します。
<y,l>            ViYankRight                      カーソル位置にある文字をローカル クリップボードに配置します。
<y,Spacebar>     ViYankRight                      カーソル位置にある文字をローカル クリップボードに配置します。
<y,$>            ViYankToEndOfLine                カーソル位置とその後にあるすべての文字をローカル クリップボードに配置
                                                  します。
<y,^>            ViYankToFirstChar                カーソルの前にある空白でない最初の文字までのすべての文字をローカル ク
                                                  リップボードに配置します。


カーソル移動の機能
=========

Key               Function                Description
---               --------                -----------
Ctrl+LeftArrow    BackwardWord            カーソルを現在の単語または前の単語の先頭に移動します
<Ctrl+LeftArrow>  BackwardWord            カーソルを現在の単語または前の単語の先頭に移動します
Home              BeginningOfLine         カーソルを行頭に移動します
<Home>            BeginningOfLine         カーソルを行頭に移動します
End               EndOfLine               カーソルを行末に移動します
Ctrl+]            GotoBrace               対応するかっこに移動します
<Ctrl+]>          GotoBrace               対応するかっこに移動します
<|>               GotoColumn              カーソルを所定の列に移動します。
<^>               GotoFirstNonBlankOfLine 最初の空白以外の文字にカーソルを移動します。
<_>               GotoFirstNonBlankOfLine 最初の空白以外の文字にカーソルを移動します。
<End>             MoveToEndOfLine         行末に移動します。
<$>               MoveToEndOfLine         行末に移動します。
<g,g>             MoveToFirstLine         MoveToFirstLine
<G>               MoveToLastLine          MoveToLastLine
Ctrl+RightArrow   NextWord                カーソルを次の単語の先頭に移動します
<Ctrl+RightArrow> NextWord                カーソルを次の単語の先頭に移動します
<e>               NextWordEnd             カーソルを次の単語の末尾まで移動します。
<b>               ViBackwardWord          空白と一般的な区切り文字で区切られた前の単語の先頭まで逆方向に削除し、挿入モ
                                          ードに移行します。
<E>               ViEndOfGlob             空白で区切られたこの単語の末尾にカーソルを移動します。
<%>               ViGotoBrace             対応するかっこにカーソルを移動します。
<W>               ViNextGlob              空白で区切られた次の単語の先頭にカーソルを移動します。
<w>               ViNextWord              空白と一般的な区切り文字で区切られた次の単語の先頭にカーソルを移動します。


履歴機能
====

Key         Function                Description
---         --------                -----------
DownArrow   NextHistory             履歴の次の項目で入力を置き換えます
<DownArrow> NextHistory             履歴の次の項目で入力を置き換えます
<j>         NextHistory             履歴の次の項目で入力を置き換えます
<+>         NextHistory             履歴の次の項目で入力を置き換えます
UpArrow     PreviousHistory         履歴の前の項目で入力を置き換えます
<UpArrow>   PreviousHistory         履歴の前の項目で入力を置き換えます
<k>         PreviousHistory         履歴の前の項目で入力を置き換えます
<->         PreviousHistory         履歴の前の項目で入力を置き換えます
Ctrl+r      ViSearchHistoryBackward 履歴を逆方向に検索する新しい検索を開始します。
</>         ViSearchHistoryBackward 履歴を逆方向に検索する新しい検索を開始します。
<Ctrl+r>    ViSearchHistoryBackward 履歴を逆方向に検索する新しい検索を開始します。


コンプリート機能
========

Key             Function              Description
---             --------              -----------
Ctrl+Spacebar   PossibleCompletions   入力を変更せずに入力候補を表示します
<Ctrl+Spacebar> PossibleCompletions   入力を変更せずに入力候補を表示します
<Tab>           TabCompleteNext       次の入力候補を使用して入力を補完します
<Shift+Tab>     TabCompletePrevious   前の入力候補を使用して入力を補完します
Tab             ViTabCompleteNext     vi に固有のクリーンアップを実行後に TabCompleteNext を呼び出します。
Shift+Tab       ViTabCompletePrevious vi に固有のクリーンアップを実行後に TabCompletePrevious を呼び出します。


その他の機能
======

Key        Function        Description
---        --------        -----------
Ctrl+l     ClearScreen     画面をクリアし、画面の先頭に現在の行を再描画します
<Ctrl+l>   ClearScreen     画面をクリアし、画面の先頭に現在の行を再描画します
<0>        DigitArgument   他の関数への数値引数を開始または累算します
<1>        DigitArgument   他の関数への数値引数を開始または累算します
<2>        DigitArgument   他の関数への数値引数を開始または累算します
<3>        DigitArgument   他の関数への数値引数を開始または累算します
<4>        DigitArgument   他の関数への数値引数を開始または累算します
<5>        DigitArgument   他の関数への数値引数を開始または累算します
<6>        DigitArgument   他の関数への数値引数を開始または累算します
<7>        DigitArgument   他の関数への数値引数を開始または累算します
<8>        DigitArgument   他の関数への数値引数を開始または累算します
<9>        DigitArgument   他の関数への数値引数を開始または累算します
Ctrl+Alt+? ShowKeyBindings すべてのキー バインドを表示します
Escape     ViCommandMode   VI のコマンド モードに切り替えます。
<v>        ViEditVisually  現在のコマンド行で $env:VISUAL または $env:$EDITOR によって指定された、コンソールと互換性の
                           あるエディターを起動します。
<i>        ViInsertMode    挿入モードに切り替えます。


検索機能
====

Key        Function                      Description
---        --------                      -----------
F3         CharacterSearch               1 文字を読み取り、その文字が次に出現する位置にカーソルを移動します
<F3>       CharacterSearch               1 文字を読み取り、その文字が次に出現する位置にカーソルを移動します
Shift+F3   CharacterSearchBackward       1 文字を読み取り、その文字が前に出現する位置にカーソルを移動します
<Shift+F3> CharacterSearchBackward       1 文字を読み取り、その文字が前に出現する位置にカーソルを移動します
<;>        RepeatLastCharSearch          最後に記録された文字の検索を繰り返します。
<,>        RepeatLastCharSearchBackwards 最後に記録された文字の検索を逆方向に繰り返します。
<n>        RepeatSearch                  直前の検索を繰り返します。
<N>        RepeatSearchBackward          直前の検索を逆方向に繰り返します。
<f>        SearchChar                    指定した文字が次に出現する位置に移動します。
<F>        SearchCharBackward            指定した文字が 1  つ前に出現した位置に移動します。
<T>        SearchCharBackwardWithBackoff 指定した文字の前の出現箇所に移動し、1 文字進みます。
<t>        SearchCharWithBackoff         指定した文字が次に出現する位置の 1 文字前に移動します。
Ctrl+s     SearchForward                 検索文字列の入力を求め、AcceptLine と同時に検索を開始します。
<?>        SearchForward                 検索文字列の入力を求め、AcceptLine と同時に検索を開始します。
<Ctrl+s>   SearchForward                 検索文字列の入力を求め、AcceptLine と同時に検索を開始します。


ユーザー定義の機能
=========

Key          Function       Description
---          --------       -----------
LeftArrow    ViBackwardChar ViBackwardChar
<LeftArrow>  ViBackwardChar ViBackwardChar
<Backspace>  ViBackwardChar ViBackwardChar
<h>          ViBackwardChar ViBackwardChar
RightArrow   ViForwardChar  ViForwardChar
<RightArrow> ViForwardChar  ViForwardChar
<Spacebar>   ViForwardChar  ViForwardChar
<l>          ViForwardChar  ViForwardChar

```