この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:16
ページ更新者:guest
更新日時:2026-06-11 07:12:00

タイトル: vi テキストディタの使用
SEOタイトル: vi / Vim テキストエディタ完全ガイド (モード / 移動 / 検索置換)

この記事の要点
  • vi は Unix 標準のテキストエディタ、現代では Vim (Vi IMproved) が事実標準
  • 4 つのモード: Normal (移動・操作) / Insert (入力) / Visual (選択) / Command (: 開始)
  • 基本: vi file 起動 → i Insert → 編集 → Esc:wq 保存終了
  • 移動: h j k l (左下上右) / w b (単語) / gg G (先頭末尾) / /word (検索)
  • Neovim (Lua / LSP / Tree-sitter) が現代の主流、IDE 機能も VS Code 並みに進化

vi / Vim とは

vi は 1976 年に Bill Joy が開発した Unix 標準のテキストエディタです。現在の Linux / macOS では vi コマンドは多くの場合 Vim (Vi IMproved) のシンボリックリンクとなっており、機能拡張された Vim が実体です。

Vim の特徴は モード制で、キーストロークを最小化し高速にテキストを編集できることです。CUI 環境 (SSH 接続先サーバ) でも動作するため、サーバ運用エンジニアには必須スキル。学習曲線は急ですが、習得後の編集効率は圧倒的です。

起動と終了

# ファイルを開く
vi file.txt

# 複数ファイル
vi file1.txt file2.txt
# :n で次、:N で前

# 行番号指定で開く
vi +42 file.txt        # 42 行目にカーソル
vi +/search file.txt   # search にマッチする行へ

# 読み取り専用
vi -R file.txt
view file.txt

4 つのモード

モード用途突入抜ける
Normal (起動時)移動・コピー・削除Esc各コマンドで他モードへ
Insert文字入力i / a / oEsc
Visual範囲選択v / V / Ctrl+vEsc
Command-line保存・終了・置換: / / / ?Enter / Esc

「困ったら Esc 連打で Normal に戻る」を覚えておけば事故は起きません。

保存と終了

:w              " 保存
:w newfile.txt  " 名前を付けて保存
:q              " 終了 (未保存なら拒否)
:q!             " 強制終了 (変更破棄)
:wq             " 保存して終了
:wq!            " 強制保存して終了 (読み取り専用上書き)
ZZ              " 保存して終了 (Normal モード)
ZQ              " 保存せず終了
:x              " 変更があれば保存して終了 (:wq とほぼ同じ)

カーソル移動

" 1 文字単位 (HJKL 配列、ホームポジション維持)
h    " 左
j    " 下
k    " 上
l    " 右

" 単語単位
w    " 次の単語先頭
b    " 前の単語先頭
e    " 単語末尾

" 行
0    " 行頭
^    " 行頭 (空白以外の最初)
$    " 行末

" 画面
H    " 画面先頭 (High)
M    " 画面中央 (Middle)
L    " 画面末尾 (Low)

" ファイル全体
gg   " ファイル先頭
G    " ファイル末尾
42G  " 42 行目
:42  " 42 行目 (Command-line から)

" 検索
/word  Enter   " 前方検索
?word  Enter   " 後方検索
n              " 次の一致
N              " 前の一致
*              " カーソル位置の単語を検索

Insert モードへの遷移パターン

キー動作
iカーソル位置の直前から入力
I行頭から入力
aカーソルの直後から入力
A行末から入力
o下に空行を作って入力
O上に空行を作って入力
s1 文字削除して入力
S行全体削除して入力
cw単語を削除して入力

削除・コピー・ペースト

" 削除
x       " 1 文字削除
dd      " 1 行削除 (クリップボードに保持)
3dd     " 3 行削除
dw      " 単語削除
d$      " 行末まで削除 (D も同じ)
d0      " 行頭まで削除

" コピー (yank)
yy      " 1 行コピー
3yy     " 3 行コピー
yw      " 単語コピー

" ペースト
p       " カーソルの後にペースト
P       " カーソルの前にペースト

" Undo / Redo
u       " Undo
Ctrl+r  " Redo
.       " 直前の操作を繰り返し

検索と置換

" 検索
/word        " 前方検索
?word        " 後方検索
n / N        " 次 / 前
*            " カーソル単語を検索

" 置換 (Command-line)
:s/old/new/         " カーソル行の最初の old を new に
:s/old/new/g        " カーソル行の全 old を new に
:%s/old/new/g       " ファイル全体
:%s/old/new/gc      " 全体、確認しながら
:5,20s/old/new/g    " 5-20 行目のみ

" 大文字小文字無視
:%s/old/new/gi

" 正規表現
:%s/\d\+/NUM/g      " 数字を NUM に置換
:%s/^/# /           " 各行の先頭に # 追加 (コメントアウト)
:%s/\s\+$//         " 行末の空白削除

Visual モード

v        " 文字単位の選択開始
V        " 行単位の選択開始
Ctrl+v   " 矩形選択開始

" 選択後の操作
d        " 削除
y        " コピー
c        " 削除して Insert モード
>        " インデント右
<        " インデント左
:s/old/new/g  " 選択範囲のみ置換

便利な機能

&quot; 行番号表示
:set number       &quot; 表示
:set nonumber     &quot; 非表示

&quot; 構文ハイライト
:syntax on

&quot; インデント
:set autoindent
:set smartindent
:set tabstop=4
:set shiftwidth=4
:set expandtab    &quot; Tab をスペースに

&quot; 検索ハイライト
:set hlsearch
:set incsearch    &quot; 入力中も検索

&quot; 行末の改行コード
:set fileformat=unix

&quot; 文字コード
:set encoding=utf-8
:e ++enc=cp932 file.txt   &quot; Shift_JIS で開き直し

&quot; ファイル間移動
:e other.txt      &quot; 別ファイルを開く
:bn               &quot; 次のバッファ
:bp               &quot; 前のバッファ
:ls               &quot; バッファ一覧

&quot; ウィンドウ分割
:sp               &quot; 水平分割
:vsp              &quot; 垂直分割
Ctrl+w h/j/k/l    &quot; ウィンドウ間移動

&quot; マクロ
qa                &quot; a レジスタに記録開始
[操作]
q                 &quot; 記録終了
@a                &quot; 再生
10@a              &quot; 10 回再生

~/.vimrc で設定永続化

" ~/.vimrc に書くと毎回適用される
set number
set relativenumber
syntax on
set autoindent
set tabstop=4
set shiftwidth=4
set expandtab
set hlsearch
set incsearch
set ignorecase
set smartcase
set encoding=utf-8
set fileformat=unix
set clipboard=unnamed   " システムクリップボードと連携 (macOS)
colorscheme desert

" キーマップ
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

Vim vs Neovim

観点VimNeovim
初リリース1991 年2015 年 (Vim fork)
設定言語Vim script (+ Lua 9.0+)Lua ファースト
LSP 統合vim-lsp プラグイン組み込み nvim-lspconfig
Tree-sitterプラグイン組み込み
非同期 API後発で追加最初から
2026 年の主流サーバ常駐開発機の主流

新規に学ぶなら Neovim + LazyVim / AstroNvim / LunarVim のディストリビューションが推奨です。VS Code に近い IDE 体験を Vim キーバインドで得られます。

vi / Vim の現代的な学習方法

  • vimtutor コマンド: 30 分の公式チュートリアル (vim 同梱)
  • VS Code に Vim 拡張を入れて慣らす
  • Vim Adventures」: ゲーム式学習
  • 「Practical Vim」(Drew Neil) / 「実践 Vim」: 古典良書
  • Neovim 環境構築は LazyVim ディストリ で 5 分

FAQ

Q: Esc が遠くて使いづらい
A: Ctrl+[ も Esc と同じ。または jj / jk を Esc にマッピングするのが定番:
inoremap jk <Esc>

Q: 終了の仕方が分からなくて困った
A: Esc:q! Enter。変更を捨てて強制終了。「Vim から抜け方」は世界で年間 100 万人が検索する問題です。

Q: Vim と Emacs どちらを学ぶべき?
A: SSH 先サーバでも使える Vim 優先。Emacs は独自の世界 (Org-mode 等) で深い。両刀使いも可。

Q: VS Code から Vim に乗り換えるべき?
A: 乗り換えではなく VS Code に Vim 拡張が最強。両方の良いとこ取り。