vi と腕試し

INPUT · スライド

狙った場所へ動く

01 / 08

「50行目だけ直したい」

ここまでで、開いて書いて保存できるようになったね。でも、まだできないことが1つあるんだ。

設定ファイルの50行目だけを直したい

いまのあなたは、1行目から動けないでしょう。vi を開くとカーソルは必ず1行目に居るんだ。

o を50回押す、というわけにもいかないよね。

だから移動を覚えるんだ。この回で持って帰るのはこれだよ。

行のあいだを動く    h j k l行の中を飛ぶ        0 $ w bファイルの中を飛ぶ  gg G 3G

3つの大きさで動けるようになるよ。

矢印キーではないのか、と思うかもしれないね。使える vi もあるんだ。でも使えない vi もあるんだよ。

古い機械通信の具合が悪い矢印が別の文字として届く

こういうとき、矢印キーは効かないんだ。h j k l は必ず効くでしょう。だからこちらを覚えるんだよ。

そして、慣れるとこちらのほうが速いんだ。

矢印キー   手を右下へ動かすh j k l    手を置いたまま

指がホームポジションから離れないでしょう。1文字動くたびに手を動かさなくていいんだ。

この回が終わると、vi はやっと「使える道具」になるよ。狙った場所へ行けなければ、編集はできないからね。

02 / 08

h j k l — 手を置いたまま

基本の4つだよ。命令モードで押してね。

      k(上)h(左)  l(右)      j(下)

キーボードを見てみてね。h j k l右手が置かれる場所に横に並んでいるでしょう。

h j k l^ 左端が左、右端が右

覚え方はこうだよ。

キー向き覚え方
h4つの左端
l4つの右端
jj の字が下に伸びる
kk の字が上に伸びる

jk がまぎれやすいので、そこだけ気をつけてね。j は下に尻尾があると覚えるといいよ。

押してみると、こんなふうに動くよ。

ichini      ← ここに居るsan  ↓ j を押すichinisan     ← 1行下がった

大事なのは、移動では何も変わらないということだよ。

h j k l   動くだけ(ファイルは無事)

安心して押し回していいんだ。[Modified] も出ないでしょう。だから最初は、これで画面の中をぐるぐる動いて慣れるのがおすすめだよ。

入力モードでは使えないことに注意してね。入力モードの j は文字の j だからね。動きたいときは Esc だよ。

03 / 08

行の中を飛ぶ — 0 $ w b

1文字ずつでは遠いときがあるよ。80文字の行の末尾まで l を80回、というのは無理でしょう。

だから飛ぶ命令があるんだ。

0   行の頭へ(数字のゼロ)$   行の末尾へ

図にするとこうだよ。

aaa bbb ccc^         ^0         $

行の長さに関係なく1手でしょう。前の回の IA が、この2つに乗っているんだ。

I = 0 して iA = $ して a

同じ考え方が別のかたちで出てくるわけだね。

単語ごとに飛ぶものもあるよ。

w   次の単語の頭へb   前の単語の頭へ
aaa bbb ccc^   ^   ^    w   w      (順に進む)    b   b      (順に戻る)

w は word(単語)、b は back(戻る)だよ。

単語の区切りは空白や記号だよ。だから設定ファイルではこう効くんだ。

port 80^    ^w で値の頭へ

値だけを直したいときに便利でしょう。l を5回押すより速いね。

まとめておくよ。

押す行くところ
0行の頭
$行の末尾
w次の単語の頭
b前の単語の頭

近いところは h l、遠いところは 0 $ w b と使い分けるんだ。

04 / 08

ファイルの中を飛ぶ — gg G 3G

行のあいだも、j を50回では大変でしょう。だから飛ぶ命令があるよ。

gg   1行目へG    最後の行へ

G は大文字だよ(Shift を押しながら)。gg は小文字の g を2回だね。

ichi     ← gg でここnisanjuu      ← G でここ

ファイルの端へ1手で行けるんだ。

そして、行番号を指定して飛べるよ。

3G   3行目へ50G  50行目へ

数を前に付けるでしょう。これがこの回でいちばん使う形だよ。

同じことを : でもできるんだ。

:3 → ⏎    3行目へ

: は前の回で :wq に使ったものだね。番号だけを打つと、その行へ飛ぶんだよ。

3G     3打(速い):3 ⏎   3打(打ちやすい)

どちらでもいいよ。好きなほうを使ってね。

これで「50行目だけ直したい」が解けるでしょう。

vi settei.conf50G       50行目へ飛ぶA         行の末尾から打つ…         直すEsc :wq   保存して抜ける

エラーメッセージが「50行目が変だ」と言ってきたとき、そのまま50行目へ行けるんだ。設定ファイルやスクリプトのエラーは、たいてい行番号で教えてくれるでしょう。だから 3G は実務でいちばん出番が多い移動なんだよ。

05 / 08

数を付けると繰り返せる

3G で気づいたかな。数を前に付けると繰り返すというのは、vi の全体の決まりなんだ。

4j    下へ4行3l    右へ3文字2w    単語2つぶん進む5k    上へ5行

同じキーを何度も押さなくていいでしょう。

押した回数を数えてみてね。

j j j j    4打4j         2打

遠くなるほど差が出るよ。

j を20回    20打20j         3打

この決まりは移動だけではないんだ。次の回でやる編集にも効くよ。

3x    3文字消す2dd   2行消す

「数 + 命令」という形を覚えてしまえば、全部同じでしょう。これが vi の作りなんだ。

言葉のように読めることにも気づいてほしいな。

4j    「4つ下へ」3x    「3文字消せ」2dd   「2行消せ」

数 + 動詞という並びだね。英語の言い方に近いんだ。だから慣れると、打つ前に頭の中で文になるよ。

もちろん、数を付けなくても仕事はできるよ。

まず 数なしで正しく動けること慣れてきたら 数を付けて速く

急がなくていいんだ。j を5回押すのも、5j と打つのも、着く場所は同じでしょう。

06 / 08

画面の下で位置を読む

いま何行目に居るかは、画面のいちばん下に出ているよ。

- kazu.txt 3/10 30%

読み方はこうだね。

出るもの意味
kazu.txt開いているファイル
3/1010行のうち3行目に居る
30%だいたいの位置

3/10 が現在地だよ。動いたら、ここが変わるのを見てね。

これは移動を覚えるときの助けになるんだ。

4j を押した3/10 → 7/10 に変わった

ちゃんと4行下がったと確かめられるでしょう。目で行を数えなくていいんだ。

[Modified] も同じ場所に出るよ。

- kazu.txt [Modified] 3/10 30%

移動しただけなら [Modified] は出ないんだ。もし出ていたら、どこかで文字を打ってしまっているということだよ。

[Modified] が出たu を押して戻す(または :q! で捨てる)

気づいたらすぐ戻せるでしょう。だから下の行を見る癖をつけてほしいんだ。

スマホの画面は狭いので、この1行に情報が詰まっているよ。困ったときはまず下を見る。これは vi を使う人の共通の習慣だからね。

07 / 08

動く → 直す → Esc

ここまでのものを組み合わせると、こういう型になるよ。

1. 動く      3G や w で狙った場所へ2. 直す      i a I A o O で打つ3. Esc       命令モードに戻る

この3手の繰り返しvi の使い方なんだ。

実際の作業を書いてみるね。設定ファイルの3行目をコメントにする場面だよ。

vi settei.conf3G          3行目へI           行の頭から打つ# と空白    打つEsc         戻る:wq         保存して抜ける

7手で終わるでしょう。慣れると10秒かからないよ。

もう1つ、2行目の末尾に覚え書きを足す場面だね。

2G          2行目へA           末尾から打つ # main     打つEsc :wq

移動と入力が組み合わさっているのが分かるかな。片方だけでは仕事にならないんだ。

移動だけ   見るだけで直せない入力だけ   1行目しか直せない両方       どこでも直せる

だから前の回とこの回は、セットで1つの技だと思ってね。

迷ったときの逃げ道も変わらないよ。

Esc        命令モードへu          直前を戻す:q!        ぜんぶ捨てる

この3つがあるから、思いきって動けるんだ。動き方を間違えても、Esc を押せば必ず命令モードに戻れるでしょう。

08 / 08

この回で持って帰るもの

まとめだよ。移動が3つの大きさでできるようになったね。

1文字ずつ    h j k l行の中を飛ぶ  0 $ w b行を飛ぶ      gg G 3G :3数で繰り返す  4j 3l 2w

遠いほど大きい単位で動くのが速さの秘密だよ。

使い分けの目安を渡しておくね。

隣の文字      h l行の端        0 $単語いくつか  w b何行か下      4j離れた行      3G や :3端            gg G

距離で選ぶんだ。近いのに 3G を使う必要は無いし、遠いのに j を連打する必要も無いでしょう。

そして、いちばん大事なことをもう一度。

> 移動ではファイルは変わらない

[Modified] が出ないのだから、いくら押しても壊れないんだ。だから練習は移動から始めるのが安全なんだよ。

次の回は編集だよ。

x     1文字消すdw    単語を消すdd    行を消すyy p  写して貼るu     戻す

消す・写す・戻すをやるんだ。移動と組み合わせると、vi は本当に速い道具になるよ。

3G dd     3行目を消す$ x       行末の1文字を消すyy p      いまの行をもう1つ作る

動いてから消すでしょう。この回でやった移動が、そのまま効いてくるからね。楽しみにしていてね。