hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

vimの置換で改行、タブを挿入する

イントロ

度々vimの置換処理で改行やタブを追加して置換するケースがあるのですが、 挿入するためのキーバインドを忘れてしまうのでもう少し調べてみたという内容です。

やり方

改行に置換したいケースで 私がよく利用するのはjsのコードで;の後に改行を無作為に入れたいケースです。

:%s/;/;^M/g

というようなコマンドを入力します。 ^Mはそのまま文字列で入力するのではなく制御文字として挿入します。 ^Mの入力方法はCtr-vとCtr-mで入力可能です。

これで目的は達成できました。

忘れっぽい

^M を入力するための Ctr-vとCtr-m なのですが、
頻繁に利用するわけではないので 脳内で\nを使って改行を挿入しようとするのですが、これだと出来ないんだったわ。
なんだっけ?
のような感じでググることを何度か繰り返していました。

そもそもCtr-vがよくわかってなくCtr-vとCtr-mがセットになっていてこれが何を意味してるのか分からないなという感じでした。
これ別々のコマンドなのかな?とおもい調べてるとhelpに書いていました。

helpを確認してみると

CTRL-V
Insert next non-digit literally.
Up to three digits form the decimal value of a single byte.
The non-digit and the three digits are not considered for mapping.
This works the same way as in Insert mode (see above, |i_CTRL-V|).

Note: Under Windows CTRL-V is often mapped to paste text.
Use CTRL-Q instead then.

Ctr-vの後に入力された文字を非数字文字にして挿入されるようです。 ですのでその後に入力されるCtr-mはEnterでも代替できました。

改行以外でTABを入力する場合もCtr-vとCtr-i Ctr-vとTABキーでも入力可能でした。

ちなみにWindowsではCtr-vはペーストに割り当てられていることがよくあるのでCtr-qで代用できるそうです。

これで結構スッキリはしました。なんとか記憶に定着されそうです。

参考

https://vim-jp.org/vimdoc-ja/cmdline.html#c_CTRL-V https://ja.wikipedia.org/wiki/%E5%88%B6%E5%BE%A1%E6%96%87%E5%AD%97 https://ja.wikipedia.org/wiki/ASCII#ASCII.E5.88.B6.E5.BE.A1.E6.96.87.E5.AD.97