Vimを使っているとき、「この部分だけ選択してコピーしたい」「複数の行を一気に整えたい」と思ったことはありませんか?
そんなときに便利なのが「ビジュアルモード」という機能です。
マウスを使わずに、キーボードだけで自由にテキストを選択したり編集したりできます。
この機能を覚えると、Vimでの作業がとても快適になりますよ。
この記事でわかること
- ビジュアルモードの基本的な使い方
- 3つのモードの違いと使い分け
- 実際のプログラミングでの活用例
- 作業効率を上げるコツとテクニック
ビジュアルモードってなに?

ビジュアルモードとは
ビジュアルモードとは、Vimでテキストを選択するための特別なモードです。
まるでマウスでドラッグして選択するように、キーボードだけで文字や行を選択できます。
Vimの基本的なモード
Vimには主に3つのモードがあります:
ノーマルモード
- 普段いるモード
- カーソル移動やコマンド実行をする
Esc
キーで他のモードから戻れる
インサートモード
- 文字を入力するモード
i
キーで開始、Esc
で終了
ビジュアルモード
- テキストを選択するモード
- 今回の記事で詳しく説明するモード
ビジュアルモードでできること
基本的な操作
- 文字や行の選択
- 選択した部分のコピー・切り取り・貼り付け
- 選択した部分の削除
- 選択した部分の整形や変換
便利な使い方
- 複数行を一度に編集
- プログラムコードの整理
- 文章の構造を整える
- データの加工や変換
これらの操作をマウスなしで、すべてキーボードで行えるのがビジュアルモードの魅力です。
3つのビジュアルモードを理解しよう[

Vimには3種類のビジュアルモードがあり、それぞれ選択方法が異なります。
用途に応じて使い分けることで、効率的な編集ができます。
文字ビジュアルモード(v)
説明:文字単位でテキストを選択するモード
起動方法:
v
基本的な使い方:
- 選択したい文字の開始位置にカーソルを移動
v
キーを押してビジュアルモードに入る- カーソルキー(h/j/k/l)で選択範囲を調整
- 必要な操作(コピー、削除など)を実行
カーソル移動のキー:
h : 左に移動
j : 下に移動
k : 上に移動
l : 右に移動
実例: 単語「Hello」を選択する場合
元のテキスト: Hello World
カーソル位置: H|ello World(|はカーソル)
1. vキーを押す
2. 右に4回移動(llll)
3. 「Hello」が選択される
行ビジュアルモード(V)
説明:行全体を選択するモード
起動方法:
V
基本的な使い方:
- 選択したい行にカーソルを移動
V
キー(Shift + v)を押す- 上下のカーソルキー(j/k)で選択行数を調整
- 必要な操作を実行
実例: 複数行を選択する場合
元のテキスト:
1. 最初の行
2. 二番目の行
3. 三番目の行
1. 最初の行でVキーを押す
2. jキーを2回押す
3. 1〜3行目が行全体で選択される
ブロックビジュアルモード(Ctrl+v)
説明:矩形(四角形)の範囲を選択するモード
起動方法:
Ctrl + v
基本的な使い方:
- 選択したい範囲の左上角にカーソルを移動
Ctrl + v
キーを押す- カーソルキーで矩形範囲を調整
- 必要な操作を実行
実例: 縦の列を選択する場合
元のテキスト:
name = "Alice"
age = 25
city = "Tokyo"
1. "Alice"の"A"にカーソルを置く
2. Ctrl+vキーを押す
3. 下に2回、右に数回移動
4. 各行の値の部分が矩形で選択される
どのモードを使うべき?
文字ビジュアルモード(v)がおすすめの場面
- 単語や文の一部を選択したいとき
- プログラムの変数名や関数名を選択するとき
- 細かい部分の編集をするとき
行ビジュアルモード(V)がおすすめの場面
- 複数行を一度に操作したいとき
- プログラムの関数全体を選択するとき
- 文章の段落を移動・削除したいとき
ブロックビジュアルモード(Ctrl+v)がおすすめの場面
- 表やデータの列を編集するとき
- 複数行の同じ位置に文字を追加したいとき
- プログラムのインデントを揃えるとき
次の章では、実際にプログラミングでよく使う操作例を見ていきましょう。
実践的な活用例とコマンド

基本的な操作コマンド
ビジュアルモードで選択した後に使える基本的なコマンドを覚えましょう。
コピーと貼り付け
y : 選択範囲をコピー(yank)
p : カーソル位置に貼り付け(put)
削除
d : 選択範囲を削除(delete)
x : 選択範囲を切り取り
文字の変換
gU : 選択範囲を大文字に変換
gu : 選択範囲を小文字に変換
~ : 大文字と小文字を切り替え
整形
= : 選択範囲をインデント整形
> : 選択範囲を右にインデント
< : 選択範囲を左にインデント
実践例1:複数行のコメントアウト
説明:プログラムコードの複数行を一度にコメントアウトする
手順:
- コメントアウトしたい最初の行にカーソルを移動
- 行ビジュアルモード(V)で複数行を選択
- 置換コマンドで行頭に#を追加
コマンド例:
# 元のコード
def hello():
print("Hello")
print("World")
# 手順
1. def hello():の行でVキーを押す
2. jjで3行選択
3. :s/^/#/と入力してEnter
# 結果
#def hello():
# print("Hello")
# print("World")
コマンドの意味:
:
: コマンドラインモードに入るs/^/#/
: 行頭(^)を#に置換する- 選択範囲にのみ適用される
実践例2:列の先頭に文字を一括挿入
説明:複数行の同じ位置に文字を一度に追加する
手順:
- 挿入したい位置の最初の行にカーソルを移動
- ブロックビジュアルモード(Ctrl+v)で縦に選択
- Iキーで挿入モードに入り、文字を入力
- Escキーで全ての行に適用
コマンド例:
# 元のコード
console.log("test1");
console.log("test2");
console.log("test3");
# 手順
1. 最初のcの位置でCtrl+vキーを押す
2. jjで3行の縦列を選択
3. Iキーを押す
4. //を入力
5. Escキーを押す
# 結果
//console.log("test1");
//console.log("test2");
//console.log("test3");
実践例3:インデントの調整
説明:プログラムのインデント(字下げ)を整える
手順:
- 整形したい範囲を選択
- =キーで自動整形、または>/<キーで手動調整
コマンド例:
# 元のコード(インデントがばらばら)
if True:
print("Hello")
if False:
print("World")
# 手順
1. Vで全体を選択
2. =キーで自動整形
# 結果
if True:
print("Hello")
if False:
print("World")
実践例4:データの列操作
説明:表やCSVデータの特定の列を操作する
手順:
- ブロックビジュアルモードで列を選択
- 必要に応じてコピー、削除、置換を実行
コマンド例:
# 元のデータ
名前,年齢,都市
田中,25,東京
佐藤,30,大阪
鈴木,22,名古屋
# 年齢の列だけ選択する場合
1. 25の2にカーソルを置く
2. Ctrl+vでブロック選択開始
3. jjで下に移動、lで右に移動して列全体を選択
4. yでコピー、または必要な操作を実行
実践例5:複数行の一括編集
説明:複数行の同じ部分を一度に変更する
手順:
- 変更したい部分をブロック選択
- cキーで変更モードに入る
- 新しい文字を入力
- Escキーで全ての行に適用
コマンド例:
# 元のコード
let name1 = "Alice";
let name2 = "Bob";
let name3 = "Carol";
# letをconstに変更したい場合
1. 最初のletのlにカーソルを置く
2. Ctrl+vでブロック選択
3. jjlで3行のletを選択
4. cキーを押す
5. constと入力
6. Escキーを押す
# 結果
const name1 = "Alice";
const name2 = "Bob";
const name3 = "Carol";
これらの例を参考に、実際のプログラミング作業で活用してみてください。
便利なテクニックとコツ

選択範囲の調整テクニック
選択の開始点と終了点を切り替える
説明:選択中に開始点と終了点を入れ替えて、選択範囲を調整しやすくする
コマンド:
o
使用例:
# 選択を開始した後、反対側から調整したいとき
1. vで選択開始
2. 右に移動して選択
3. oキーを押す
4. 開始点が現在のカーソル位置に移動
5. 反対方向に選択を調整可能
直前の選択範囲を再選択
説明:最後に選択した範囲をもう一度選択する
コマンド:
gv
使用例:
# 操作を間違えた場合や、同じ範囲に別の操作をしたいとき
1. 範囲を選択して何か操作を実行
2. gvキーで同じ範囲を再選択
3. 別の操作を実行
文字変換のテクニック
大文字・小文字の変換
説明:選択した文字の大文字・小文字を変換する
コマンド:
gU : 大文字に変換
gu : 小文字に変換
~ : 大文字と小文字を切り替え
使用例:
# 元のテキスト: Hello World
1. vで"Hello"を選択
2. gUキーを押す
# 結果: HELLO World
# 元のテキスト: HELLO World
1. vで"HELLO"を選択
2. guキーを押す
# 結果: hello World
検索と組み合わせたテクニック
検索結果を選択に活用
説明:検索機能と組み合わせて効率的に選択する
コマンド例:
# 検索して選択
/pattern : patternを検索
n : 次の検索結果へ
N : 前の検索結果へ
使用例:
# 特定の単語から次の単語まで選択したい場合
1. /functionで"function"を検索
2. vで選択開始
3. nで次の"function"に移動
4. 範囲が選択される
マーク機能との組み合わせ
マークを使った範囲選択
説明:マーク機能と組み合わせて離れた位置への選択を効率化
コマンド:
ma : 現在位置をマーク'a'として記録
`a : マーク'a'の位置に移動
'a : マーク'a'のある行の先頭に移動
使用例:
# 離れた位置までの選択
1. 選択開始位置でmaキーを押す(マーク設定)
2. 別の場所に移動
3. v`aで選択開始位置から現在位置まで選択
効率的な編集のためのワークフロー
1. 計画を立てる
- どの範囲を選択したいか明確にする
- どのビジュアルモードが適切か判断する
- 実行したい操作を決める
2. 適切なモードを選択
- 文字単位:v
- 行単位:V
- ブロック単位:Ctrl+v
3. 効率的な移動方法を使う
- w/b:単語単位の移動
- f/F:文字検索での移動
- /:パターン検索での移動
4. 選択後の操作を覚える
- よく使うコマンドを体で覚える
- 複数のコマンドを組み合わせる
初心者が陥りやすい注意点
選択モードの間違い
- 行全体を操作したいのに文字モード(v)を使う
- ブロック操作が必要なのに行モード(V)を使う
解決方法:目的に応じてモードを使い分ける習慣をつける
選択範囲の見失い
- 長い選択をしているうちに範囲がわからなくなる
解決方法:oキーでの開始点切り替えやgvでの再選択を活用
コマンドの実行タイミング
- 選択中でないのにコマンドを実行する
- ビジュアルモードから抜けてしまう
解決方法:画面下部のモード表示を確認する習慣をつける
これらのテクニックを覚えることで、Vimでの編集作業が格段に効率的になります。
応用編:より高度な活用方法

正規表現と組み合わせた選択
説明:検索パターンを使って複雑な条件でテキストを選択・置換する
基本的な正規表現パターン:
^ : 行の開始
$ : 行の終了
. : 任意の一文字
* : 直前の文字が0回以上
\+ : 直前の文字が1回以上
[abc] : a、b、cのいずれか一文字
\d : 数字
\w : 英数字とアンダースコア
実践例:コメント行の一括削除:
# 元のコード
# これはコメントです
def hello():
# ここもコメント
print("Hello")
# 最後のコメント
# 手順
1. :g/^#/dと入力
2. 行頭が#で始まる行をすべて削除
# 結果
def hello():
print("Hello")
マクロとビジュアルモードの組み合わせ
説明:繰り返し操作をマクロに記録して、ビジュアル選択と組み合わせる
基本的なマクロコマンド:
qa : マクロの記録開始(レジスタa)
q : マクロの記録終了
@a : マクロaを実行
@@ : 最後のマクロを再実行
実践例:複数行の書式統一:
# 元のコード(書式がバラバラ)
function test1(){
function test2() {
function test3() {
# マクロで書式を統一
1. qaで記録開始
2. 最初の行で書式を修正する操作を記録
3. qで記録終了
4. 残りの行をVで選択
5. :normal @aで選択範囲に適用
# 結果(書式が統一される)
function test1() {
function test2() {
function test3() {
外部コマンドとの連携
説明:選択した範囲を外部のコマンドやプログラムで処理する
基本的なコマンド:
!command : 選択範囲を外部コマンドで処理
実践例:JSONの整形:
# 元のJSON(一行にまとまっている)
{"name":"Alice","age":25,"city":"Tokyo"}
# 手順
1. vで全体を選択
2. !python -m json.toolと入力
# 結果(整形されたJSON)
{
"name": "Alice",
"age": 25,
"city": "Tokyo"
}
実践例:行のソート:
# 元のリスト
banana
apple
cherry
# 手順
1. Vで全体を選択
2. !sortと入力
# 結果
apple
banana
cherry
プラグインでの機能拡張
説明:ビジュアルモードを強化するプラグインの活用
おすすめプラグイン:
vim-surround:選択範囲を括弧や引用符で囲む
# 選択した"Hello"を括弧で囲む
1. vで"Hello"を選択
2. S(を入力
# 結果: (Hello)
vim-commentary:コメントアウトの切り替え
# 選択した範囲のコメントを切り替え
1. Vで複数行選択
2. gcを入力
# コメントの追加/削除が切り替わる
vim-multiple-cursors:複数箇所の同時編集
# 同じ単語を複数箇所で同時編集
1. 単語の上でCtrl+nを押す
2. 次の同じ単語に移動してCtrl+n
3. 同時に編集可能
ファイル間での操作
説明:複数のファイル間でビジュアル選択を活用する
基本的なファイル操作:
:e filename : ファイルを開く
:split : 画面を水平分割
:vsplit : 画面を垂直分割
Ctrl+w w : ウィンドウ間の移動
実践例:ファイル間でのコピー&ペースト:
# 手順
1. ファイル1でvで範囲選択
2. yでコピー
3. :e file2.txtで別ファイルを開く
4. pで貼り付け
# または分割画面で
1. :vsplitで画面分割
2. :e file2.txtで右側に別ファイル
3. 左側で選択・コピー
4. Ctrl+w wで右側に移動
5. 貼り付け
設定のカスタマイズ
説明:vimrcファイルでビジュアルモードの動作をカスタマイズ
便利な設定例:
" ビジュアルモードでの検索を強化
vnoremap // y/<C-R>"<CR>
" 選択範囲の文字数を表示
set showcmd
" ビジュアルモードでのインデントを維持
vnoremap < <gv
vnoremap > >gv
" ペーストで選択範囲を置換(元の内容は保持)
vnoremap p "_dP
設定の説明:
//
:選択した文字で検索実行showcmd
:選択中の文字数表示< >gv
:インデント後も選択を維持p "_dP
:ペースト時に元の内容を保持
これらの応用技術を覚えることで、Vimのビジュアルモードをさらに効果的に活用できるようになります。
まとめ:ビジュアルモードでVimを使いこなそう
重要なポイントをおさらい
3つのビジュアルモード
- 文字モード(v):単語や文の一部を選択
- 行モード(V):行全体を選択、複数行の一括操作
- ブロックモード(Ctrl+v):矩形選択、縦の列操作
基本的な操作コマンド
- コピー:
y
(yank) - 切り取り:
d
(delete)またはx
- 貼り付け:
p
(put) - 大文字変換:
gU
- 小文字変換:
gu
- インデント:
>
(右)、<
(左)、=
(自動整形)
便利なテクニック
- 選択調整:
o
で開始点と終了点を切り替え - 再選択:
gv
で直前の選択範囲を復元 - 検索連携:
/
で検索してから選択範囲を調整
実践でよく使う操作パターン
プログラミングでの活用
- 複数行コメントアウト:
V
で選択 →:s/^/#/
- インデント整理:
V
で選択 →=
- 変数名の一括変更:
Ctrl+v
で列選択 →c
で変更 - import文の整理:
V
で選択 →!sort
文書編集での活用
- 段落の移動:
V
で段落選択 →d
で切り取り →p
で貼り付け - リストの整理:複数行選択 →
>
でインデント調整 - 大文字小文字の統一:選択 →
gU
またはgu
よくある間違いと解決方法
問題:選択モードを間違える
- 症状:思ったように選択できない
- 解決:目的に応じてv/V/Ctrl+vを使い分ける
問題:選択範囲がわからなくなる
- 症状:長い選択で現在の範囲が不明
- 解決:oキーで開始点を切り替えて確認
問題:操作を間違える
- 症状:意図しない変更をしてしまう
- 解決:uキーでアンドゥ、gvで再選択
問題:コマンドが効かない
- 症状:選択後にコマンドが実行されない
- 解決:ビジュアルモード中であることを確認
コメント