Infra Engineer

viエディタの基本操作
2022.01.06
Lv1

viエディタの基本操作

本記事の対象者

LPIC level1習得を目指す初学者の方
コマンドの基本的な用途について、要点を絞って解説します。


今回の内容

今回は、viエディタについて解説します。

viエディタとは
vimエディタとは
viエディタの基本操作
まとめ
確認問題

viエディタとは

viエディタは、Linux及びUNIXに標準でインストールされているテキストエディタです。
Windowsにおける「メモ帳」にあたるものです。
Linuxでは設定ファイルの書き換えなどをする場面が度々ありますが、その際にもviエディタを使用します。

最大の特徴は「キーボード操作のみで完結するように設計されている」ということです。
「コマンドモード」と「挿入モード」という2つのモードを切り替えながら操作を行います。
マウスで直感的な操作が可能なWindowsのメモ帳などとは異なり、viエディタは基本的にマウスによる操作はできず、キーボードでしか操作できません。
そう聞くと不便に感じるかもしれませんが、コマンド操作が基本であるLinuxにおいて、なるべくホームポジションを崩さずに、どの規格のキーボードにも存在するボタンのみで効率よく操作できるように設計された結果です。
また、LPIC Level1 の試験においても操作方法が度々出題されますので、実務的にも試験的も抑えておくべき範囲となります。


vimエディタとは

vimエディタは、viエディタの拡張版です。
「コマンドモード」「挿入モード」に加えて「ビジュアルモード」が存在するほか、可読性の向上のために色分けがされています。
基本的な操作はviエディタと共通しています。
この記事で紹介するviエディタの操作は、そのままvimの操作でも使用可能です。

また昨今は、ほとんどのLinuxにおいてviコマンドでvimが起動するようになっています。


viエディタの操作

vi
意味 viエディタを起動する。
書式 vi [オプション] ファイル名

viコマンドで指定したファイルをviエディタで開くことができます。
またそのファイルが存在しない場合は、指定ファイル名で一時的にファイルを新規作成しますが、編集後に保存しなければ作成されません。
viコマンドのオプションの紹介は割愛します。

この後、実際の操作コマンドを紹介していきます。
よろしければ、ご自身でも操作してみてください。

例①)
「sample.txt」をviエディタで開く。
[root@localhost ~]# ls
sample.txt
[root@localhost ~]# vi sample.txt

 

ファイルが開きましたが、まだ何も書き込んでいません。
また、この状態で何かを書き込もうとしてもできません。
viコマンドでエディタを起動すると、「コマンドモード」からスタートします。
ファイルを編集するには、「挿入モード」に切り替える必要があります。

コマンドモードから挿入モードへの切り替えコマンド一覧

コマンド 説明
i カーソル位置の前にテキストを挿入する。(insert)
I(アイ) カーソル位置の行の行頭にテキストを挿入する。
a カーソル位置の後にテキストを挿入する。(append)
A カーソル位置の行の行末にテキストを挿入する。
o カーソル位置の行の下に空白行を挿入し、その行にテキストを挿入する。(open line)
O カーソル位置の行の上に空白行を挿入し、その行にテキストを挿入する。

※挿入モードからコマンドモードに戻るには「Escキー」を押下します。

例②)
「i」を押下して、挿入モードに移行。

 

「i」を押下すると、挿入モードに切り替わります。下部に「INSERT」と表示されていれば切り替わっています。
それではここに
「# This is Sample」
「One」
の2行を追記してみましょう。改行は通常通りEnterで行えます。

例③)
「sample.txt」に2行追記。

次に「One」の前に「Zero」を追記したいと思います。
もちろん今回の場合なら、一度コマンドモードに戻った後「I」押下で可能ですが、細かい挿入位置はそれでは指定できません。
よって、カーソル移動を使用しましょう。

主な移動コマンド一覧

コマンド 説明
h 一文字左へ移動する。(←)
l(エル) 一文字右へ移動する。(→)
k 一文字上へ移動する。(↑)
j 一文字下へ移動する。(↓)
0(ゼロ) 行頭に移動する。
$ 行末に移動する。(正規表現に由来)
w 次の単語に移動する。(word)
b 前の単語に移動する。(backward)
gg ファイルの最上行に移動する。(goto)
G ファイルの最下行に移動する。
:n ファイルのn行目に移動する。

viエディタ初心者が最初に戸惑うのが上下左右移動です。
なぜ「k」「j」「h」「l」が上下左右移動なのかというのはキーボード配列を見ると何となく分かるかもしれません。
右手のホームポジションから最小の動きでカーソル移動ができるように設計されているのです。
(vimなら矢印キーでもカーソル移動は可能です)

 

それでは「One」の前に「Zero」を追記してみましょう。
一度「Escキー」でコマンドモードに戻り、「h」か「0」を使用して行頭に戻りましょう。
そして、「i」で挿入モードに切り替え、追記してください。

例④)
カーソルを移動させて、「Zero」を追記。

追記できましたでしょうか。
次に、この行と同じ内容を下に3行分追記したいと思います。
ここで使用するのはコピー、ペーストのコマンドです。

コピー・ペーストのコマンド一覧

コマンド 説明
yy 現在の行をコピーする。(yank)
yw カーソル位置の単語をコピーする。
p カーソル位置の後に貼り付ける。
P カーソル位置の前に貼り付ける。

では、2行目をコピーし、3~5行目に貼り付けます。
その前に、「〇行目」と言われても、少し分かりにくいですよね。
行番号を表示しましょう。

setコマンド一覧

コマンド 説明
:set number 行番号を表示する。(:set nu でも可)
:set nonumber 行番号を表示しない。(:set nonu でも可)
:set autoindent インデント処理を自動で行う。
:set ts=[タブ幅] タブ幅を数値で指定。
:set 現在設定されているsetオプションを表示する。
:set all 指定できるすべてのsetオプションを表示する。
例⑤)
行番号を表示。

 

では、「yy」で2行目をコピーし、「p」を3回押下してください。

例⑥)
2行目全体をコピーして3~5行目に貼り付け。

 

コピーと貼り付けができましたでしょうか。
コピーしたばかりですが、次に4行目と5行目を削除したいと思います。
削除に関するコマンドは以下です。

削除のコマンド一覧

コマンド 説明
x カーソル位置の文字を削除する。
X カーソル位置の手前の文字を削除する。
dd 現在の行を削除する。(delete)
d^ 行頭からカーソル位置の文字まで削除する。
d$ カーソル位置から行末の文字まで削除する。
dw カーソル位置から次の単語までを削除する。
df [文字] カーソル位置から指定した[文字]までを削除する。
u ひとつ前の動作状態に戻す。(undo)
※削除のコマンドではありませんが、ここで紹介します。

それでは、4行目と5行目を削除してみましょう。
それぞれの行にカーソルを合わせて「dd」でもよいのですが、もしこの時、削除対象の行が1000行あったらどうでしょうか。
「dd」を1000回押下することもできるかと思いますが、面倒ですよね。
ここでひとつ覚えておいて欲しい操作があります。コマンドの頭に数字をつける操作です。
4行目にカーソルを合わせた状態で「2dd」と打ってみてください。

例⑦)
4行目、5行目を削除。

 

すると、一回の操作で2行分削除されました。
カーソル移動、削除のコマンド(u含む)は、先頭に数字をつけることで繰り返し実行することができます。
こちらも試験で聞かれますので、抑えておいてください。

次に、3行目の「Zero」を「Two」に置換してみましょう。
検索・置換に関するコマンドは以下です。

検索・置換のコマンド一覧

コマンド 説明
/[パターン] [パターン]で指定した文字列を、カーソル位置から後方に向かって検索する。
?[パターン] [パターン]で指定した文字列を、カーソル位置から前方に向かって検索する。
n 次を検索する。
N 次を検索する。(逆方向)
:s/[A]/[B] 現在の行で最初に出てくる文字列[A]を、文字列[B]に置換する。
:%s/A/B/g ファイル中のすべての文字列[A]を、文字列[B]に置換する。

それでは、3行目にカーソルを合わせた状態で、コマンドモードから「:s/Zero/Two」と打ってみましょう。

例⑧)
3行目の「Zero」を「Two」に置換する。

置換できたでしょうか。
それでは、いよいよこのファイルを保存したいと思います。
終了・保存に関するコマンドは以下です。

終了・保存のコマンド一覧

コマンド 説明
:w 編集中の内容で、ファイルを上書き保存する。(write)
:q ファイルを保存せずに終了する。編集した場合は、保存するかどうか聞かれる。(quit)
:q! 編集中の内容を保存せずに終了する。
:wq 編集中の内容を保存して終了する。
ZZ 「:wq」と同じ。
:x 「:wq」と同じ。
:e! 最後に保存した内容に復帰する。
:r [ファイル名] 指定したファイルの内容を、現在の行以降に書き込む。
:![シェルコマンド] viを起動したままの状態で、[シェルコマンド]を実行する。

では、コマンドモードで「:wq」を押下し、編集内容を保存してviエディタを終了しましょう。
※setオプションの内容は保存されません。setオプションの設定を常に有効にするには、ホームディレクトリ内の「.vimrc」ファイルに設定を記述します。(「.vimrc」がない場合は「.exrc」)

例⑨)
編集内容を保存して終了。

「cat」コマンドで「sample.txt」の中身を確認してみてください。


まとめ

今回は、viエディタについて解説しました。
操作方法に慣れが必要ですが、使いこなせるようになれば、マウスで操るテキストエディタを使用するよりもはるかに生産性は高まるでしょう。

最後に確認問題で今回学習した内容を確かめてください。


確認問題

問題1

viエディタのコマンドモードにおいて、現在の行と次の行を削除するコマンドはどれですか。

A) d2
B) 2d
C) 2dd
D) dd2

解答・解説
答え:C
問題2

viエディタにおいて、現在のファイルを「test.txt」として保存するためのコマンドはどれか。

A) :q test.txt
B) :w test.txt
C) :s test.txt
D) :rename test.txt

解答・解説
答え:B