> [!code]- Markdown原文 (こちらをVimに貼り付けて進めましょう) > ~~~ > テキストを選択して操作するモードを[[ビジュアルモード]]と言います。 > > ## 思想の違い > > [[ノーマルモード]]とは思想が違います。 > > | モード | 思想 | > | -------------------- | ------------------------------- | > | [[ノーマルモード]] | [[オペレータ]] + [[モーション]] | > | [[ビジュアルモード]] | 範囲指定 + [[オペレータ]] | > > [[Vim]]に慣れていない場合は[[ビジュアルモード]]の方が直感的かもしれません。 > > ### 2行削除してWelcomeを入力する例 > > [[ノーマルモード]]の場合は`cjWelcome`ですね。 > > ```txt > ▼ > moyasu > tagayasu > okoshiyasu > ``` > > [[ビジュアルモード]]の場合は以下のフローです。 > > 1. `Vj`で範囲選択 > 2. `c`で選択範囲を編集(削除して文字を入力) > 3. `Welcome` > > `VjcWelcome`と入力してみましょう。 > > ```txt > ▼ > moyasu > tagayasu > okoshiyasu > ``` > > ## サブモード > > [[ビジュアルモード]]には選択範囲の種類によって3つのサブモードがあります。 > > * 文字 > * 行 > * 矩形 > > ### 文字 > > 文字単位で範囲を指定します。`v`でスタート。 > > `vwwhhgU`と入力してみましょう。 > > ```txt > ▼ > moyasu tagayasu okoshiyasu > ``` > > ### 行 > > 行単位で範囲を指定します。`V`でスタート。 > > 冒頭の例はこのサブモードです。 もう少し高度な例を試してみましょう。 > > [[Markdown]]の見出しを挿入する例です。 `yypVr-`と入力してみてください。 > > ```txt > ▼ > Header2 > * aaa > * bbb > ``` > > [[ビジュアルモード]]と置換[[オペレータ]]の相性は抜群ですね😄 > > ### 矩形 > > 矩形で範囲を選択します。`<C-v>`でスタート。 > > 選択することより、その後の一斉編集で使うことが多いです。 特にテーブルの編集と相性がいいです。 > > `ww<C-v>4jI<space>|<space><ESC>` > > ```txt > ▼ > | name age | > | -------- | > | Tom 18 | > | Merry23 | > | Yasu 33 | > ``` > > 2行目以降が遅れて反映されるのは仕様です。 > > ## [[ノーマルモード]]との使い分け > > 得意分野が違うため、以下のケースに合致する場合だけ[[ビジュアルモード]]を使います。 > > * 視覚的フィードバックが欲しいとき > * 特定の範囲を[[ヤンク]]されたデータで置換したいとき > * 矩形で編集したいとき > > 特に2つ目は大事なので例を示します。 > > 箇条書きの`Yasu`を`Tagayasu`に変更したいケースです。 > > ```txt > ▼ > Students > > * Tom > * Merry > * Yasu > -- > Todo: Yasu -> Tagayasu > ``` > > 以下のコマンドを実行してみましょう。 > > * `/Ta<CR>yw`でテキストをyank > * `4kh`で移動 > * `viwp`で貼り付け > > ```txt > ▼ > Students > > * Tom > * Merry > * Yasu > -- > Todo: Yasu -> Tagayasu > ``` > > [[ノーマルモード]]で同じことをやる場合は最後のコマンドを`diwp`にすれば良いと思うでしょうか。是非やってみてください。 > > ```txt > ▼ > Students > > * Tom > * Merry > * Yasu > -- > Todo: Yasu -> Tagayasu > ``` > > 実は`diw"0p`とやらなければダメなんですね😈 興味がある方は[[レジスタ (Vim)|レジスタ]]について調べてみてください。 > > ## おまけ > > 覚えておくと便利な範囲選択ショートカットです。 > > | キー | 意味 | 覚え方 | > | --------------------------- | ---------------------------- | ---------- | > | [[ビジュアルモード]]中に`o` | 範囲の反対側を拡張する | Opposite | > | [[ノーマルモード]]中に`gv` | 最後に選択した範囲を指定する | God Visual | > > 以下の順にコマンドを打って試してみましょう。 > > 1. `vwobgUG` > 2. `gvgu` > > ```txt > "ari" "ori" "haberi" "imasugari" > ▼ > "moyasu" "tagayasu" "yatagarasu" > "hoge" "hoga" "hogu" "hoho" "homi" > ``` > ~~~ テキストを選択して操作するモードを[[ビジュアルモード]]と言います。 ## 思想の違い [[ノーマルモード]]とは思想が違います。 | モード | 思想 | | -------------------- | ------------------------------- | | [[ノーマルモード]] | [[オペレータ]] + [[モーション]] | | [[ビジュアルモード]] | 範囲指定 + [[オペレータ]] | [[Vim]]に慣れていない場合は[[ビジュアルモード]]の方が直感的かもしれません。 ### 2行削除してWelcomeを入力する例 [[ノーマルモード]]の場合は`cjWelcome`ですね。 ```txt ▼ moyasu tagayasu okoshiyasu ``` [[ビジュアルモード]]の場合は以下のフローです。 1. `Vj`で範囲選択 2. `c`で選択範囲を編集(削除して文字を入力) 3. `Welcome` `VjcWelcome`と入力してみましょう。 ```txt ▼ moyasu tagayasu okoshiyasu ``` ## サブモード [[ビジュアルモード]]には選択範囲の種類によって3つのサブモードがあります。 * 文字 * 行 * 矩形 ### 文字 文字単位で範囲を指定します。`v`でスタート。 `vwwhhgU`と入力してみましょう。 ```txt ▼ moyasu tagayasu okoshiyasu ``` ### 行 行単位で範囲を指定します。`V`でスタート。 冒頭の例はこのサブモードです。 もう少し高度な例を試してみましょう。 [[Markdown]]の見出しを挿入する例です。 `yypVr-`と入力してみてください。 ```txt ▼ Header2 * aaa * bbb ``` [[ビジュアルモード]]と置換[[オペレータ]]の相性は抜群ですね😄 ### 矩形 矩形で範囲を選択します。`<C-v>`でスタート。 選択することより、その後の一斉編集で使うことが多いです。 特にテーブルの編集と相性がいいです。 `ww<C-v>4jI<space>|<space><ESC>` ```txt ▼ | name age | | -------- | | Tom 18 | | Merry23 | | Yasu 33 | ``` 2行目以降が遅れて反映されるのは仕様です。 ## [[ノーマルモード]]との使い分け 得意分野が違うため、以下のケースに合致する場合だけ[[ビジュアルモード]]を使います。 * 視覚的フィードバックが欲しいとき * 特定の範囲を[[ヤンク]]されたデータで置換したいとき * 矩形で編集したいとき 特に2つ目は大事なので例を示します。 箇条書きの`Yasu`を`Tagayasu`に変更したいケースです。 ```txt ▼ Students * Tom * Merry * Yasu -- Todo: Yasu -> Tagayasu ``` 以下のコマンドを実行してみましょう。 * `/Ta<CR>yw`でテキストをyank * `2kh`で移動 * `viwp`で貼り付け ```txt ▼ Students * Tom * Merry * Yasu -- Todo: Yasu -> Tagayasu ``` [[ノーマルモード]]で同じことをやる場合は最後のコマンドを`diwp`にすれば良いと思うでしょうか。是非やってみてください。 ```txt ▼ Students * Tom * Merry * Yasu -- Todo: Yasu -> Tagayasu ``` 実は`diw"0p`とやらなければダメなんですね😈 興味がある方は[[レジスタ (Vim)|レジスタ]]について調べてみてください。 ## おまけ 覚えておくと便利な範囲選択ショートカットです。 | キー | 意味 | 覚え方 | | --------------------------- | ---------------------------- | ---------- | | [[ビジュアルモード]]中に`o` | 範囲の反対側を拡張する | Opposite | | [[ノーマルモード]]中に`gv` | 最後に選択した範囲を指定する | God Visual | 以下の順にコマンドを打って試してみましょう。 1. `vwobgUG` 2. `gvgu` ```txt "ari" "ori" "haberi" "imasugari" ▼ "moyasu" "tagayasu" "yatagarasu" "hoge" "hoga" "hogu" "hoho" "homi" ```