vimはLinux環境で広く使われているテキストエディタです。最初は戸惑いやすいですが、基本操作を覚えると非常に効率よくファイルを編集できます。サーバー上での設定ファイル編集など、実務でも欠かせないツールです。
vimの起動と終了
まずは vim を起動してみましょう。
vim myfile.txt
ファイルが存在しない場合は新規作成されます。
終了コマンド(最初に覚えるべきこと)
vimを終了する方法を先に覚えておくと安心です。Esc キーを押してノーマルモードに戻ってから、以下のコマンドを入力します。
| コマンド | 動作 |
|---|---|
:q | 終了(変更がない場合) |
:q! | 変更を破棄して強制終了 |
:w | 保存(終了しない) |
:wq | 保存して終了 |
ZZ | 保存して終了(:wq と同じ) |
vimの「モード」という概念
vimが初心者に難しく感じられる最大の理由はモードの存在です。vimには主に以下のモードがあります。
ノーマルモード ──→ インサートモード
(移動・コマンド) (文字入力)
↑ │
└──────── Esc ─────┘
ノーマルモード(Normal Mode)
vimを起動すると最初にこのモードになります。文字を入力するのではなく、カーソルの移動やコマンドを実行するためのモードです。
インサートモード(Insert Mode)
実際に文字を打ち込めるモードです。ノーマルモードから以下のキーで切り替えます。
| キー | 動作 |
|---|---|
i | カーソルの前から入力 |
a | カーソルの後ろから入力 |
I | 行の先頭から入力 |
A | 行の末尾から入力 |
o | 現在行の下に新しい行を開いて入力 |
O | 現在行の上に新しい行を開いて入力 |
インサートモードから抜けるには Esc キーを押します。
カーソルの移動(ノーマルモード)
ノーマルモードでは矢印キーも使えますが、以下のキーを覚えると手をホームポジションから動かさずに素早く移動できます。
k
↑
h ← → l
↓
j
| キー | 移動先 |
|---|---|
h | 左へ1文字 |
l | 右へ1文字 |
j | 下へ1行 |
k | 上へ1行 |
w | 次の単語の先頭へ |
b | 前の単語の先頭へ |
0 | 行の先頭へ |
$ | 行の末尾へ |
gg | ファイルの先頭へ |
G | ファイルの末尾へ |
5G | 5行目へジャンプ |
基本的な編集操作(ノーマルモード)
削除
| キー | 動作 |
|---|---|
x | カーソル位置の1文字を削除 |
dd | 現在の行を丸ごと削除 |
dw | カーソル位置から次の単語まで削除 |
d$ | カーソル位置から行末まで削除 |
3dd | 現在行から3行削除 |
コピーと貼り付け
vimではコピーを「ヤンク(yank)」と呼びます。
| キー | 動作 |
|---|---|
yy | 現在行をコピー(ヤンク) |
3yy | 現在行から3行コピー |
p | カーソルの後ろに貼り付け |
P | カーソルの前に貼り付け |
取り消しとやり直し
| キー | 動作 |
|---|---|
u | 直前の操作を取り消す(Undo) |
Ctrl+r | 取り消した操作をやり直す(Redo) |
検索と置換
検索
ノーマルモードで / に続けて検索文字列を入力します。
/検索したい文字列 ← Enterで検索開始
| キー | 動作 |
|---|---|
/word | 「word」を前方(下方向)検索 |
?word | 「word」を後方(上方向)検索 |
n | 次の検索結果へ |
N | 前の検索結果へ |
置換(コマンドモード)
: を入力するとコマンドモードになります。置換は以下の形式で行います。
:s/古い文字/新しい文字/ ← 現在行の最初の1個を置換
:s/古い文字/新しい文字/g ← 現在行のすべてを置換
:%s/古い文字/新しい文字/g ← ファイル全体のすべてを置換
:%s/古い文字/新しい文字/gc ← ファイル全体を確認しながら置換
例:ファイル全体の error を warning に置換する場合:
:%s/error/warning/g
実用的なテクニック
行番号の表示
:set number
シンタックスハイライトの有効化
:syntax on
複数ファイルの同時編集
vim file1.txt file2.txt
ファイル間の切り替えは :next(次のファイル)と :prev(前のファイル)で行います。
実際に操作してみよう
以下の手順で基本操作を練習してみてください。
# 練習用ファイルを作成して開く
vim practice.txt
iを押してインサートモードに入る- 以下のテキストを入力する:
Hello, vim! This is the second line. Let's practice editing. Escを押してノーマルモードに戻るggで先頭行に移動しddで1行削除するuで削除を取り消す/secondで「second」を検索する:wqで保存して終了する
練習問題
問題1
/etc/hostname ファイルの内容を vim で開き、確認した後、変更せずに終了してください。
問題2
新しいファイル hello.sh を作成し、以下の内容を入力して保存してください。
#!/bin/bash
echo "Hello, World!"
問題3
次の内容が書かれたファイル sample.txt があるとします。
apple
banana
cherry
banana
apple
このファイルを vim で開き、コマンドモードを使ってすべての banana を grape に置換し、保存してください。
練習問題の答え
問題1の答え
vim /etc/hostname
内容を確認した後、Esc を押してノーマルモードに戻り、:q と入力して Enter を押します。変更がないため :q! でなく :q で終了できます。
問題2の答え
vim hello.sh
iでインサートモードに入る- 上記の内容を入力する
Escでノーマルモードに戻る:wqで保存して終了する
問題3の答え
vim sample.txt
ファイルを開いた後、コマンドモードで以下を入力します。
:%s/banana/grape/g
確認後、:wq で保存して終了します。結果は以下のようになります。
apple
grape
cherry
grape
apple