第3章 3-2 / テキスト処理

vim入門

このページで叩くコマンドと到達点

前提:3-1が完了し、~/practiceの中にmemo.txtが1つ存在する状態から始めます。vimはサーバー管理者なら誰もが一度は触ることになる強力なテキストエディタですが、nanoと違って「モード」という考え方があるせいで、初めて触ると身動きが取れなくなりがちです。このページではvimtest.txtというファイルを使って、ノーマルモードと挿入モードの行き来、保存・終了、行の削除やコピペ、検索までを、閉じ込められないやり方で一つずつ体験します。

このページではSET 1〜3、合計30行のコマンドを上から順に叩きます。手打ち推奨(コピーは確認用)です。vimの中でのキー操作は、コマンド行ではなく出力行として「(この操作をします)」の形で示します。

SET 1 ― モードの概念と抜け出し方

ubuntu@lightsail: ~/practice
  1. $cd ~/practice
  2. $ls
  3. memo.txt
  4. $which vim
  5. /usr/bin/vim
  6. $vim vimtest.txt
  7. (vimが起動。まだノーマルモード。文字は打てない)
  8. $i
  9. (画面下部に -- INSERT -- と表示される)
  10. vimの練習を始めます。
  11. $Esc
  12. (-- INSERT -- の表示が消え、ノーマルモードに戻る)
  13. $:wq
  14. (保存して終了、プロンプトに戻る)
  15. $cat vimtest.txt
  16. vimの練習を始めます。
  17. $wc -l vimtest.txt
  18. 1 vimtest.txt
  19. $ls -l vimtest.txt
解説 ― SET 1 で何をしたか

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で保存したファイルも普通のテキストファイルとして扱われます。

POINT

vimには「ノーマルモード(命令用)」「挿入モード(入力用)」「コマンドラインモード(:で保存や終了などを指示)」の3つがあります。今どのモードにいるかを画面下部で常に確認する癖をつけると、迷わなくなります。

ゆみちゃん
ゆみ

あたし初めてvim開いたとき、文字打っても入力されないし変な動きするしで「詰んだ!」って真顔になって、結局ターミナルごと閉じて逃げたことあるよ(笑)。合言葉は「まずEscを押す」。わけがわからなくなったら、とりあえずEscを連打すれば大体ノーマルモードに戻れるから、それだけ覚えておいて!

SET 2 ― 保存・終了のバリエーション

ubuntu@lightsail: ~/practice
  1. $cat vimtest.txt
  2. vimの練習を始めます。
  3. $wc -l vimtest.txt
  4. 1 vimtest.txt
  5. $vim vimtest.txt
  6. $i
  7. この行はあとで取り消します。
  8. $Esc
  9. $:q!
  10. (保存せずに終了、変更は破棄される)
  11. $cat vimtest.txt
  12. vimの練習を始めます。
  13. $wc -l vimtest.txt
  14. 1 vimtest.txt
  15. $head -n1 vimtest.txt
  16. vimの練習を始めます。
  17. $ls -l vimtest.txt
解説 ― SET 2 で何をしたか

1行目で前ページ相当のSET 1で保存した中身を確認し、2行目のwc -lで行数がまだ1であることも数値で確認しておきます。35行目でSET 1と同じ手順(iで挿入モード→入力→Escでノーマルモード)を踏み、余計な1行を書き足します。

ここで6行目の:q!を使います。:wqが「保存して終了」だったのに対し、:q!は「保存せずに強制終了」です。!(感嘆符)は「変更を破棄してもいいから終了する」という強い意思表示で、これがあることで「間違えて変な操作をしてしまった」ときに、慌てず何もなかったことにできます。

7行目のcatで確認すると、出力例のとおり先ほど追加したはずの行が消えており、SET 1の状態のまま残っていることがわかります。「保存しなければファイルは変わらない」という、エディタとして当たり前の安全装置です。8行目のwc -lでも行数が1のままであることを再確認し、9行目のhead -n1で1行目の内容も変わっていないことを念押しし、10行目のls -lでファイルサイズも変化していないことを確認しておきましょう。

POINT

:wq=保存して終了、:q=変更がなければ終了(変更があると怒られる)、:q!=変更を破棄して強制終了。この3つのうち、迷ったときの緊急脱出ボタンは:q!です。

SET 3 ― 行の削除・コピペ・検索

ubuntu@lightsail: ~/practice
  1. $vim vimtest.txt
  2. $o
  3. 1行目です。
  4. 2行目です。
  5. 3行目です。
  6. $Esc
  7. $/2行目
  8. (「2行目です。」にジャンプしてハイライトされる)
  9. $dd
  10. (カーソル行「2行目です。」が削除される)
  11. $yy
  12. (カーソル行をコピー)
  13. $p
  14. (コピーした行を次の行に貼り付け)
  15. $:wq
  16. $cat vimtest.txt
  17. $wc -l vimtest.txt
  18. 3 vimtest.txt
解説 ― SET 3 で何をしたか

2行目のoは、iと同じく挿入モードへ入るキーですが、現在行の下に新しい行を作ってから挿入モードに入る点が異なります。ここでは続く出力例の3行を続けて入力し、3行目のEscでノーマルモードに戻ります。

4行目の/2行目は、/に続けてキーワードを入力する検索※4コマンドです。文章が長くなってスクロールが大変なとき、目的の行まで一瞬でジャンプできます。同じキーワードが複数あるときは、続けてnを押すと次の一致箇所へ移動できます。

カーソルが目的の行に乗った状態で5行目のdd(deleteを2回)を押すと、カーソルがある行がまるごと1行削除されます。続く6行目のyy(yankを2回。yankは「引っ張ってくる」の意味でコピーにあたる)はカーソル行をコピーし、7行目のp(put)でカーソルの次の行に貼り付けます。このddpの組み合わせは実は「行の移動」にも使え、覚えておくと編集速度がぐっと上がります。8行目の:wqで保存して終了します。

ターミナルに戻ったら、9行目のcatで編集結果を確認しましょう。元は「1行目です。2行目です。3行目です。」の3行でしたが、ddで「2行目です。」を消し、yypで残りの行を複製しているため、内容が変化しています。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ならではの強力な仕組みを体験します。

脚注 ─ 用語解説
  1. ノーマルモード … vim起動直後の初期モード。キー入力が移動・削除・コピーなどの命令として扱われ、文字の直接入力はできない。
  2. 挿入モードioなどで切り替える、文字をそのまま入力できるモード。画面下部に-- INSERT --と表示される。
  3. コマンドラインモード … ノーマルモードで:を押すと入る、保存・終了・検索置換などを指示するためのモード。
  4. 検索/に続けてキーワードを入力しEnterを押すと、文章中のその文字列へカーソルがジャンプする機能。nで次の一致箇所へ進める。