変更の範囲をコントロールできる
I love
i ESC I love
i で挿入モードに入って、「I love」と入力して ESC でノーマルモードに戻る
→
Slide 11
Slide 11 text
変更の範囲をコントロールできる
I love
i ESC
i code. ESC
I love
I love code.
→
→
Slide 12
Slide 12 text
変更の範囲をコントロールできる
I love
i ESC
i code. ESC
I love
I love code.
u
→
→
I love
→
直前の変更を
取り消す事ができる
モードの切り替えをする事で、変更の範囲をコントロールできる。
これは他のエディタにはない特徴。
Vim は繰り返しを自動化するのも得意で、自動化の範囲をコントロールする事
で効率的に編集ができる(繰り返しについては後で説明)
I love code.
I love vim. I love emacs.
love を like に変更してください
問題
w 4x i like ESC
* n
4x i like ESC n
4x i like ESC
改善版1
cw like ESC
オペレータ
変更 change の c
モーション
単語指定 word の w
cw でカーソル位置の
単語を削除して挿入
モードになる
Slide 49
Slide 49 text
I love code.
I love vim. I love emacs.
love を like に変更してください
問題
w * n
n
改善版1
cw like ESC
cw like ESC
cw like ESC
Slide 50
Slide 50 text
I love code.
I love vim. I love emacs.
love を like に変更してください
問題
w * n
n
改善版1
繰り返しをもっと楽に
cw like ESC
cw like ESC
cw like ESC
Slide 51
Slide 51 text
. で繰り返し
Slide 52
Slide 52 text
. は最後の変更を繰り返す
この場合は、最後の変更はカーソル位置の単語 (
love ) を削除した。これを繰り返すと、次のカーソ
ル位置の単語は code なので、これが消える
d w I␣love␣code. I␣code.
→
. I␣code. I␣.
→
Slide 53
Slide 53 text
I love code.
I love vim. I love emacs.
love を like に変更してください
問題
w * n
n
改善版2
cw like ESC
cw like ESC
cw like ESC
.
. でカーソル位置の単
語を like に変更するの
を繰り返している
Slide 54
Slide 54 text
I love code.
I love vim. I love emacs.
love を like に変更してください
問題
w * n
n
改善版2
cw like ESC
.
n
.
Slide 55
Slide 55 text
スッキリした
けど一斉置換
を使えば?
Slide 56
Slide 56 text
I love code.
I love vim. I love emacs.
love を like に変更してください
問題
:%s/love/like/g
改善版3
Vim にも一斉置換のコマンド :%s/対象/置換/ コマンドがある
. とどちらを使うかはシーンによって使い分けるのが良い。
一斉に置換をしても絶対に問題がない時は一斉置換で、1つずつ
確認しながら進めたい時は . の繰り返しが便利
文字のかたまりが
テキストオブジェクト
hoge 'piyo fuga'
v a' ' ' で囲まれた文字を選択する ( ' ' を含む )
c i' ' ' で囲まれた文字を消して挿入モード
a( a{ a[ at
a"
aw
単語 " " ( ) { } [ ] タグ
その他のテキストオブジェクト( a か i が付く)
Slide 60
Slide 60 text
const user = 'zaru tofu';
if (user == 'zaru') {
console.log('user name:'
+ user);
}
'' や () {} で囲まれた文字を編集したい
問題
c i'
c i(
c i{
Slide 61
Slide 61 text
i と a はノーマルモードと
テキストオブジェクトでは
意味が違う
ノーマルモードの i と、c オペレータが入力された後の i は違う。
モードによって同じキーでも役割が変わる。
c オペレータ入力後にモーション入力を待っている状態は、iw とすることで
カーソル位置の単語を選択するテキスオブジェクトになる
ノーマルモードの i は insert、テキストオブジェクトの i は inner 的な感じ
c iw
小ネタ
i
Slide 62
Slide 62 text
テキストオブジェクトの i と a の違い
d w
小ネタ
d iw
d aw
w はカーソル位置以降のみ(空白を含むかどうかはオペレータによって違う)
iw はカーソル前も含んだ単語で、空白を含まない
aw はカーソル前も含んだ単語で、空白を含む
iw は c などの編集に向き、aw は d の削除に向いている
I␣love␣code. I␣lcode.
I␣love␣code. I␣␣code.
I␣love␣code. I␣code.
→
→
→
どれもカーソル位置の単語を削除するが、単語の選択範囲が違う