概要
この記事はVim Advent Calendar 2017の6日目の記事です。
vimの操作は覚えたけれど、上手く編集できない人に向けて、単発繰り返しを使っての置換について書きます。
「単発繰り返し」について
直前の動作を繰り返すことができるので便利です。※詳しくは、ヘルプ参照 :h .
サンプル
説明で使用するテキストになります。
<form>
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">
<small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
</div>
<div class="form-check">
<label class="form-check-label">
<input type="checkbox" class="form-check-input">
Check me out
</label>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
https://getbootstrap.com/docs/4.0/components/forms/ より
置換の手順
-
/ex
検索 -
ciw
入力へ -
sample<esc>
置換 -
n.
繰り返し
n.
は、よく使うのでmapにすると便利です。
私は、次で登録しています。
nnoremap <c-k> n.
検索について
単語検索は、*
を使います。*
を使うとカーソル下の単語を単語で検索することができます。カーソル下に単語がない場合は、移動して*
を実行します。*
で入力ミスを確認できるので便利です。また、単語以外の場合は、vi"y/<c-r>"
などカッコを利用して検索もできます。
exampleInputEmail1
の検索
手順
-
/ex
短い単語で、exampleInputEmail1を探します。 -
n
到達するまで繰り返します。 -
*
で単語検索を開始します。
入力について
単語を入れ替える場合
exampleInputEmail1 → sample
ciwsample<esc>n.
c
を使って削除後に入力モードにし、入力しています。
ciw<c-r>0<esc>n.
ソース上に単語が存在する場合は、あらかじめヤンクしておけばペーストするだけで修正できます。入力モードでは、<c-r>0
でペーストできます。
単語以外を入れ替える場合
form-control → sample
ci"sample<esc>n.
""で括られている場合は、ci"
を使って置換します。
12ssample<esc>n.
""などで指定できない場合は、文字数を使います。
ct"sample<esc>n.
検索を使う方法もあります。数がわからない場合に使います。
先頭に追加する場合
exampleInputEmail1 → sample-exampleInputEmail1
isample-<esc>n.
末尾に追加する場合
exampleInputEmail1 → exampleInputEmail1-sample
ciw<c-r>"-sample<esc>n.
削除してから入力します。
先頭を修正する場合
exampleInputEmail1 → form-InputEmail1
7sform-<esc>n.
途中に文字を入れたい場合
exampleInputEmail1 → example-InputEmail1
7sexample-<esc>n.
先頭部分は、打ち直します。打った方が早いことは、よくあります。
最後に
vimは色々なコマンドがあるので、色々探してみるのも面白いです。ドットでは難しいことは、マクロや正規表現を使うことで解決できるのでまたの機会に。
ありがとうございました。