vim入門
前提:3-1が完了し、~/practiceの中にmemo.txtが1つ存在する状態から始めます。vimはサーバー管理者なら誰もが一度は触ることになる強力なテキストエディタですが、nanoと違って「モード」という考え方があるせいで、初めて触ると身動きが取れなくなりがちです。このページではvimtest.txtというファイルを使って、ノーマルモードと挿入モードの行き来、保存・終了、行の削除やコピペ、検索までを、閉じ込められないやり方で一つずつ体験します。
このページではSET 1〜3、合計30行のコマンドを上から順に叩きます。手打ち推奨(コピーは確認用)です。vimの中でのキー操作は、コマンド行ではなく出力行として「(この操作をします)」の形で示します。
SET 1 ― モードの概念と抜け出し方
- $cd ~/practice
- $ls
- memo.txt
- $which vim
- /usr/bin/vim
- $vim vimtest.txt
- (vimが起動。まだノーマルモード。文字は打てない)
- $i
- (画面下部に -- INSERT -- と表示される)
- vimの練習を始めます。
- $Esc
- (-- INSERT -- の表示が消え、ノーマルモードに戻る)
- $:wq
- (保存して終了、プロンプトに戻る)
- $cat vimtest.txt
- vimの練習を始めます。
- $wc -l vimtest.txt
- 1 vimtest.txt
- $ls -l vimtest.txt
1行目で練習用ディレクトリへ移動し、2行目のlsで、3-1までに作ったmemo.txtだけが存在することを確認しておきます。3行目のwhich vim(第1章で学んだコマンドの場所を調べるコマンド)で、これから使うvimが/usr/bin/vimにインストール済みであることも確認しておきましょう。
4行目のvim vimtest.txtでvimを起動すると、nanoとは違い、いきなり文字を入力できる状態にはなりません。これがvim最大の特徴である「モード」です。起動直後はノーマルモード※1と呼ばれる状態で、キーボードの文字はすべて「移動」や「削除」などの命令として扱われ、文章の入力はできません。ここでいきなりアルファベットを打ち始めて「壊れた!」と焦るのが、vim挫折者のほぼ全員が通る道です。
文字を入力するには、5行目のようにi(insertの頭文字)を押して挿入モード※2へ切り替える必要があります。画面下部に-- INSERT --と表示されたら、ここで初めてnanoと同じ感覚で文字が打てるようになり、続く出力例の文章を入力します。
入力が終わったら6行目のEscキーでノーマルモードに戻ります。vimでは「何か操作をする前に必ずEscでノーマルモードに戻る」が鉄則です。7行目の:wqを打ちます。:(コロン)から始まるのはコマンドラインモード※3への切り替えで、wはwrite(保存)、qはquit(終了)を意味し、続けて書くと「保存して終了」になります。
ターミナルに戻ったら、8行目のcatで保存できたことを確認し、9行目のwc -lで行数が1であることも数値で確認します。10行目のls -lでファイルサイズも確認しておきましょう。nanoと同じく、vimで保存したファイルも普通のテキストファイルとして扱われます。
vimには「ノーマルモード(命令用)」「挿入モード(入力用)」「コマンドラインモード(:で保存や終了などを指示)」の3つがあります。今どのモードにいるかを画面下部で常に確認する癖をつけると、迷わなくなります。

あたし初めてvim開いたとき、文字打っても入力されないし変な動きするしで「詰んだ!」って真顔になって、結局ターミナルごと閉じて逃げたことあるよ(笑)。合言葉は「まずEscを押す」。わけがわからなくなったら、とりあえずEscを連打すれば大体ノーマルモードに戻れるから、それだけ覚えておいて!
SET 2 ― 保存・終了のバリエーション
- $cat vimtest.txt
- vimの練習を始めます。
- $wc -l vimtest.txt
- 1 vimtest.txt
- $vim vimtest.txt
- $i
- この行はあとで取り消します。
- $Esc
- $:q!
- (保存せずに終了、変更は破棄される)
- $cat vimtest.txt
- vimの練習を始めます。
- $wc -l vimtest.txt
- 1 vimtest.txt
- $head -n1 vimtest.txt
- vimの練習を始めます。
- $ls -l vimtest.txt
1行目で前ページ相当のSET 1で保存した中身を確認し、2行目のwc -lで行数がまだ1であることも数値で確認しておきます。3〜5行目でSET 1と同じ手順(iで挿入モード→入力→Escでノーマルモード)を踏み、余計な1行を書き足します。
ここで6行目の:q!を使います。:wqが「保存して終了」だったのに対し、:q!は「保存せずに強制終了」です。!(感嘆符)は「変更を破棄してもいいから終了する」という強い意思表示で、これがあることで「間違えて変な操作をしてしまった」ときに、慌てず何もなかったことにできます。
7行目のcatで確認すると、出力例のとおり先ほど追加したはずの行が消えており、SET 1の状態のまま残っていることがわかります。「保存しなければファイルは変わらない」という、エディタとして当たり前の安全装置です。8行目のwc -lでも行数が1のままであることを再確認し、9行目のhead -n1で1行目の内容も変わっていないことを念押しし、10行目のls -lでファイルサイズも変化していないことを確認しておきましょう。
:wq=保存して終了、:q=変更がなければ終了(変更があると怒られる)、:q!=変更を破棄して強制終了。この3つのうち、迷ったときの緊急脱出ボタンは:q!です。
SET 3 ― 行の削除・コピペ・検索
- $vim vimtest.txt
- $o
- 1行目です。
- 2行目です。
- 3行目です。
- $Esc
- $/2行目
- (「2行目です。」にジャンプしてハイライトされる)
- $dd
- (カーソル行「2行目です。」が削除される)
- $yy
- (カーソル行をコピー)
- $p
- (コピーした行を次の行に貼り付け)
- $:wq
- $cat vimtest.txt
- $wc -l vimtest.txt
- 3 vimtest.txt
2行目のoは、iと同じく挿入モードへ入るキーですが、現在行の下に新しい行を作ってから挿入モードに入る点が異なります。ここでは続く出力例の3行を続けて入力し、3行目のEscでノーマルモードに戻ります。
4行目の/2行目は、/に続けてキーワードを入力する検索※4コマンドです。文章が長くなってスクロールが大変なとき、目的の行まで一瞬でジャンプできます。同じキーワードが複数あるときは、続けてnを押すと次の一致箇所へ移動できます。
カーソルが目的の行に乗った状態で5行目のdd(deleteを2回)を押すと、カーソルがある行がまるごと1行削除されます。続く6行目のyy(yankを2回。yankは「引っ張ってくる」の意味でコピーにあたる)はカーソル行をコピーし、7行目のp(put)でカーソルの次の行に貼り付けます。このdd→pの組み合わせは実は「行の移動」にも使え、覚えておくと編集速度がぐっと上がります。8行目の:wqで保存して終了します。
ターミナルに戻ったら、9行目のcatで編集結果を確認しましょう。元は「1行目です。2行目です。3行目です。」の3行でしたが、ddで「2行目です。」を消し、yy→pで残りの行を複製しているため、内容が変化しています。10行目のwc -lで、削除と複製を経てもトータルの行数は3のまま変わっていないことも数値で確認しておきましょう。

ddは取り消し操作もあるから安心して! ノーマルモードでuを押すと直前の操作を1つ元に戻せるよ。うっかり大事な行を消しちゃっても、u連打で慌てず復活できるから、これもセットで覚えておくと心強いよ!
まとめ
3-2では、vimのモードという新しい概念と、保存・終了・削除・コピペ・検索という基本操作を一通り体験しました。このページで叩けるようになったコマンド(キー操作)を一覧にまとめます。
| コマンド / キー | 何をするか | 覚え方 |
|---|---|---|
vim ファイル名 | vimを起動する(なければ新規作成) | 起動直後はノーマルモード |
i | カーソル位置から挿入モードに入る | insert |
o | 下に新しい行を作って挿入モードに入る | open a new line |
Esc | ノーマルモードに戻る | 迷ったらまずEsc |
:wq | 保存して終了する | write + quit |
:q! | 保存せず強制終了する | ! = 強制・緊急脱出 |
dd | カーソル行を削除する | delete delete |
yy | カーソル行をコピーする | yank yank(引っ張ってくる) |
p | コピー・削除した行を貼り付ける | put |
/キーワード | 文章内をキーワード検索する | / = 検索の合図 |
u | 直前の操作を取り消す | undo |
次のページ「3-3. リダイレクトとパイプ」では、コマンドの出力をファイルに流し込んだり、別のコマンドへつないだりする、Linuxならではの強力な仕組みを体験します。