Linuxに触れているとファイル編集する場面は必ず出てきます。
そうなると必ず出てくるのが
「どうやって編集したらいいの?」
という話。
viというエディターを利用する事で編集する事がほとんどなのですが、viエディターの利用方法は少し癖があり苦戦する人も多いようです。
そこで今回は
これだけ覚えておけば大丈夫!!
というviのコマンドをお教えしたいと思います。
viエディターの開き方
viエディターをLinux OS上で利用するには、以下のようにコマンド実行する必要があります。
例)hostsファイルを修正する場合
vi /etc/hosts
viエディターの開き方は簡単で、viの後ろにスペースを空けてファイル名を指定するだけです。
viと同じようなコマンドにviewというコマンドがありますが、こちらは開いた時に読み取り専用で開きます。
不意な誤操作を避ける為にviewで開くエンジニアも結構多いですね。
viエディターの基本操作
viエディターを操作する上でまず覚えたいのが、以下2つのモードが存在すること。
その2つというのが、
コマンドモード
入力モード
それぞれのモードは以下の役割を持ちます。
コマンドモード
viエディター上でコマンドを受け付けるモード。
viを開いた時点ではこのモードに遷移します。
行をコピー、削除したり、文字置換したり、ファイルを保存、終了したりできます。
入力モード
ファイルの中身を書き換え編集するモード。
コマンドモードで入力するコマンドによって、入力モードに遷移します。
主にファイルの中身に追記したい場合に利用します。
入力モードに遷移する際によく利用するのは
コマンドモードで i (小文字のアイ)を入力
コマンドモードで o (小文字のオー)を入力
のこの2つです。
逆に入力モードからコマンドモードへ戻りたい時は
Escキー
を入力します。
基本的にはコマンドモードと入力モードを行ったり来たりしてファイルの編集を行い、最後にコマンドモードで保存して終了します。
viエディター基本編!最低限覚えておきたいコマンド
ここからは具体的にviエディターで使えるコマンドの中でも最低限これだけ覚えておけばはファイルの編集が完了するコマンドをお教えしたいと思います。
カーソルの移動
viで開いた時のカーソルの移動は以下のようにテンキーではなくキーボードで行うことができます。
最近はテンキーでも可能ですのであまり使う事がない人も多いですが、ホームポジションから手を動かす必要がないので慣れると楽です。
→へ移動:l (小文字エル)
↓へ移動:j (小文字ジェイ)
↑へ移動:k (小文字ケー)
入力モードへの移行
コマンドモードから入力モードへ移行し、文字入力を実施する方法です。下記で紹介するキー入力を一度行うとEscキーを入力するまで入力モードが続きます。
a (小文字のエー):カーソルのある位置の後ろから文字を挿入する。
o (小文字のオー):カーソルのある位置の下に一行挿入し、文字入力を行う。
O (大文字のオー):カーソルのある位置の上に一行挿入し、文字入力を行う。
Escキー :入力モードからコマンドモードへ戻る。
文字の編集
コマンドモードで文字の修正を行う事もできます。
削除についてはよく使う事があると思いますので覚えておくと良いでしょう。
x (小文字のエックス):カーソルの位置にある文字を削除
cw (小文字のシー ダブリュー):1語を変更
dw (小文字のディー ダブリュー):1語削除
viの終了と保存方法
ファイルを開いて編集したら当然viエディターを終了する必要があります。
viエディターを終了するには
:(コロン)を押した後にqを押す事になるのですが、この際にwqと入力すると上書き保存、!をつけると強制終了といった動作になります。
ちなみにwはwrite、qはquitの頭文字です。
上書き保存して強制終了⇒ :wq! (コロン ダブリュー キュー ビックリマーク)
上書き保存せずに終了⇒ :q! (コロン ビックリマーク)
上書き保存して継続編集⇒ :w (コロン ダブリュー)
viを終了できないときはどうする?
viを使っていると終了できない時があります。
viが終了できない時というのはファイルの中身を変更した時になります。
viはファイルの中身を1文字でも書き換えるとその状態を保持し通常終了ができなくなります。
終了できない時は!(ビックリマーク)を付ける事で強制終了し終了する事ができるので、必ず!を付けるようにしましょう。
viを使いこなすために覚えておきたい便利なコマンド(応用編)
ここからは覚えておくと便利なコマンドをまとめていきます。
基本編を覚えたら以下のコマンドを覚えておくと更に編集をしやすくなります。
コピペ、カット
コピーアンドペーストやカットアンドペーストは編集する上では欠かせませんよね。
viでももちろん行う事ができます。
1行カット: dd (ディーディー)
ペースト: p (ピー)
10行コピー:10yy (10ワイワイ)
10行カット:10dd (10ディーディー)
※yyやddの前にコピーやカットしたい行数の数字をあわせる事で入力した数字の行数分がコピーもしくはカットされます
特定文字列の検索
ファイルの中身の特定文字列を検索し、カーソル移動します。
編集したい文字列がわかっている際に便利です。
例)abcという文字列を検索したい場合
/abc
上記の検索はファイルを上から順に検索した際に
一番上のabcへカーソルが移動しますので、
二番目以降の文字列に移動したいときは
n
を入力すると次々とカーソル移動できます。
逆に下から上に検索を続けたいときは
shift + n
で上に検索を続けます。
行数の付与や任意の行へ移動
ファイルのサイズが大きいとそれに伴って編集する行数や個所が増えます。
そのような時に覚えておくと便利なコマンドです。
1番下の行へ移動⇒ G (大文字ジー)
先頭の行へ移動⇒ 1G (1 大文字ジー)
任意の行へ移動⇒ nG (移動したい行n 大文字ジー)
行の先頭へ移動⇒ 0 (ゼロ)
行の最後尾へ移動⇒ $ (ダラー)
特定文字の置換
置換したい文字列が決まっている時には一括置換したいですよね。
viでは一括置換や特定の行にある文字列の置換を行う事もできます。
特定の行数内の文字列を置換⇒ : n,nn/[置換対象文字列]/[置換後文字列]/g (n行からnn行までの文字列を置換)
特定ファイルやコマンド結果を読み込んで挿入
特定のコマンド結果や別ファイルの内容を読み込んで反映したい時に使えるコマンドです。
:r! [実行コマンド] (コロン アール 実行コマンド)
操作の取消
操作を誤った際に直前の操作を取消したい時に使えるコマンドです。
Windowsで言うところの[ctrl + z]ですね。
viでは.とuで動作が違います。
u : 直前の変更操作の取消を遡って実行(uを押す事で何度でも戻れる)
まとめ
LinuxをはじめとしたUNIX系OSではファイル編集にviを利用するのがスタンダードとなっています。
使い慣れるまでは癖があるので何度もファイル編集を行ってみて覚えていくと良いです。
基本編で紹介したコマンドさえ覚えておけばファイル編集自体は時間がかかってもできるので少しずつトライしてみてくださいね。