vi と腕試し

INPUT · スライド

入力を始める

01 / 08

i だけでも困らないけれど

前の回で i を覚えたね。これで入力は始められるでしょう。

i   いまの場所から打ち始める

でも、これだけだと困る場面があるんだ。

ohayo

この行のうしろに gozaimasu を足したいとするよ。i で始めると、こうなってしまうんだ。

i を押して gozaimasu と打つgozaimasuohayo

前に入ってしまったでしょう。i は insert(挿し込む)で、カーソルの前から始まるからね。

では、うしろに足すにはどうするかというと — 打ち始める場所を選べる命令が、他にもあるんだ。

i   カーソルの前からa   カーソルの後ろからI   行の頭からA   行の末尾からo   下に行を作ってO   上に行を作って

6つだよ。これで「どこから打ち始めるか」を選べるようになるんだ。

多いと感じるかもしれないけれど、覚え方は簡単だよ。

小文字   その場で大文字   行のはしっこで

この回で、この6つを全部手に入れよう。1文字直すのがぐっと速くなるからね。

02 / 08

ia — 前と後ろ

まず小文字の2つだよ。カーソルのどちら側から打ち始めるかが違うんだ。

abc^ カーソルはここ(a の上)

この状態で、それぞれ Z と打つとこうなるよ。

押す結果
iZZabc
aZaZbc

1文字ぶんずれるでしょう。この違いだけだよ。

名前で覚えるといいよ。

i   insert   挿し込む(前へ)a   append   継ぎ足す(後ろへ)

どちらを使うかは、こう決めるんだ。

いま見ている文字の前に足す   → iいま見ている文字の後ろに足す → a

行の終わりに足したいときは a が要ることに注意してね。カーソルが最後の文字の上に居るとき、i ではその前にしか入れないでしょう。

abc  ^ c の上に居るi → Z   abZca → Z   abcZ

末尾に足せるのは a だけなんだ。だから a は思っているよりよく使うよ。

どちらも入力モードに入るので、打ち終わったら Esc だよ。ここは前の回と同じだね。

03 / 08

IA — 行のはしっこへ

大文字にすると、行のはしっこまで飛んでから打ち始めるよ。

port 80

カーソルがどこに居ても、こうなるんだ。

押す打ち始める場所
I行の
A行の末尾

カーソルを動かさなくていいのが値打ちだよ。行のどこに居ても、1手で端へ行けるでしょう。

これは実務でとてもよく使うんだ。

port 80  ↓ I を押して # と空白を打つ# port 80

設定を無効にするときの定番だよ。行の頭に # を付けると、その行は読まれなくなるでしょう(章11でやったね)。

A はこう使うよ。

port 80  ↓ A を押して  # kari と打つport 80 # kari

行の終わりに覚え書きを足すわけだね。

覚え方はこうだよ。

i の大文字 I   i を行の頭でやるa の大文字 A   a を行の末尾でやる

大文字は「行のはしっこ版」だと思っておけばいいんだ。小文字が分かっていれば、迷わないでしょう。

04 / 08

oO — 行を足す

最後の2つは、行そのものを増やすものだよ。

ichini      ← いまここに居るsan

この状態で押すと、こうなるんだ。

押す起きること
oに空行を作って入力モードへ
Oに空行を作って入力モードへ

o を押した直後はこうだよ。

ichini        ← 新しい空行。ここに打てるsan

行を作るのと入力を始めるのを、1手でやるでしょう。これが o の便利さだよ。

i でやろうとすると、こうしなければならないんだ。

行の末尾へ行く⏎ を押して改行を入れる打つ

3手が1手になるわけだね。だから行を足したいときは、いつも o を使うよ。

名前は open(開ける)だよ。行のあいだを開けて場所を作る、という意味だね。

大文字の O の使いどころも見ておこうね。

port 80  ↓ O を押して # setting と打つ# settingport 80

1行目の上に足したいときO しかないんだ。o だと下に付いてしまうでしょう。ファイルの先頭に見出しやコメントを足すときに要るよ。

05 / 08

6つの使い分け

一覧にしておくね。この表だけ覚えれば足りるよ。

押す打ち始める場所行は増える?
iカーソルの前増えない
aカーソルの後ろ増えない
I行の頭増えない
A行の末尾増えない
o下に作った新しい行増える
O上に作った新しい行増える

上の4つは直す、下の2つは足すという分け方だよ。

実際の場面で選ぶとこうなるね。

打ち間違いを直す         i か a行の頭に # を付ける      I行の終わりに書き足す     A設定を1行足す            oファイルの先頭に足す     O

やりたいことから逆に引くのが速いよ。

どれを押しても、入ったら入力モードというのは同じだよ。

6つのどれか   →  入力モードEsc           →  命令モード

画面のいちばん下に I-- Insert -- が出ているあいだは入力モードだから、迷ったら下を見てね。

全部忘れてしまっても、iEsc だけで仕事はできるよ。この6つは速さのためのものだからね。少しずつ指に入れていけばいいんだ。

06 / 08

入力モードの中でできること

入力モードに入ったら、ふつうの文字入力と同じだよ。

文字を打つ     そのまま入る⏎ を押す       改行が入るBackspace      打った文字が消える

が改行になるのは大事だよ。これで何行でも一気に書けるでしょう。

i を押す#!/bin/sh   と打つecho hi     と打つEsc

2行のファイルができるんだ。章11で echo を2回打っていたのと同じことだね。

echo '#!/bin/sh' > hi.shecho 'echo hi' >> hi.sh

書きたいものを、そのまま書けるようになったでしょう。クォートの心配も無くなるよ。

ここで、命令モードとの違いを見ておいてね。

キー命令モード入力モード
下の行へ動く改行を入れる
x1文字消えるx が入る
Esc何も起きない命令モードへ戻る

同じキーが別の意味になるわけだね。これがモードという考え方の中身だよ。

もう1つ知っておいてほしいことがあるよ。

> 入力モードでは矢印キーを使わない

使える vi もあるけれど、使えない vi もあるんだ。動かしたいときは Esc を押してから動く、と覚えておくのが安全だよ。移動の仕方は次の回でやるからね。

07 / 08

Esc を忘れると何が入るか

いちばん多い事故を先に見ておこうね。Esc を押さずに :wq と打つというものだよ。

i を押して打ち終わった(Esc を押していない):wq と打つ

どうなるかというと、こうなるんだ。

打った文字:wq

:wq が文字として入るでしょう。入力モードなのだから当然だね。命令として働かないので、保存もされないんだ。

気づき方はこうだよ。

画面のいちばん下に : が出ない打った文字が本文に出ている

: が下の行に出ていなければ、命令になっていないということだよ。

直し方は簡単だよ。

Esc を押すu を押す(入ってしまった文字が戻る)

u は undo(戻す)だね。前の回でやったでしょう。

もっと確実な直し方もあるよ。

Esc → :q! → ⏎

捨ててやり直すんだ。何が入ってしまったか分からないときは、こちらが速いよ。

予防はこれだけだよ。

> 打ち終わったら、まず Esc

打つ・Esc・打つ・Esc という呼吸にしてしまうんだ。Esc は何回押しても害が無いから、多めに押しておけばいいでしょう。慣れた人はみんな、無意識に押しているよ。

08 / 08

この回で持って帰るもの

まとめだよ。入力の始め方が6つになったね。

i  前から      a  後ろからI  行の頭      A  行の末尾o  下に行を    O  上に行を

小文字はその場、大文字は行のはしっこという覚え方だったね。

前の回のものと合わせると、もうこれだけできるよ。

vi ファイル   開くi a I A o O   打ち始めるEsc           命令モードへ:w :wq ZZ     保存する:q :q!        抜けるu             戻す

開いて、好きな場所に書いて、保存して抜ける。ここまで来たでしょう。

実務でよくやる作業も、もうできるようになっているよ。

設定を1行足す        o設定を無効にする     I で # を付ける覚え書きを足す       Aスクリプトを書く     i と ⏎

この4つで、サーバーの仕事はだいぶ回るんだ。

足りないものは1つだけだよ。

50行目だけを直したい

いまのままだと、そこまで行けないでしょう。カーソルを動かす方法をまだ持っていないんだ。

次の回はそれをやるよ。h j k l で1文字ずつ、w で単語ごと、G で行番号へ — 狙った場所へ一息で行けるようになるからね。そこまで来れば、vi はもうあなたの道具だよ。