Blog株式会社CINCのエンジニアチームが日々習得した技術やTipsを公開するブログです2018-05-10知っていると少し自慢できるVimの便利コマンドCore開発部の加藤です。元々がデフォルトで入っているエディタという部分からVimを使い始めたため、プラグインを入れてガチガチにカスタマイズするのではなく、Vimのみで出来る範囲で使っています。普段さり気なく使っているコマンドでも、Vimを使わない人からは「こんなこと出来るんだ」と驚かれた事があります。今回は他のエディタでは馴染みの少ないと思われる、Vimの便利なコマンドをまとめてみました。指定文字数の入力テスト用の入力で256文字とかの文字列が欲しいというようなケースがあります。そんな時にVimのインサートコマンドを回数指定で利用すると簡単に入力ができます。[範囲指定]の順番で指定をします。ddとすれば1行削除ですが10ddとすると10回1行を削除するので10行削除となります。従って256ix[esc]のように回数を指定(例の場合には256)してiコマンドで一文字分挿入することで、指定回数の入力を行う事が可能です。iコマンドは挿入モードで入力した文字列をカーソルの位置に入力するコマンドというような捉え方をして頂くと利用の幅が広がります。10itest[esc]と入力して頂くと、"test"という入力が10回行われます。itmp_[esc]のようなコマンドを実行すれば.を実行する毎に"tmp_"という入力がされる形となります。他にもI(行頭に挿入)やA(行末に挿入)コマンドと併用すると、例えばA,[esc]とコマンドを打つと行末に","が追加されますが、その後1行下がって(j)から.を打つとその行の末尾にも","が追加されます。ブロック単位での処理ノーマルモードでのコマンド実行時にテキストオブジェクトという範囲を指定できるコマンドがあります。通常の使用ではddの様に2回入力するようなコマンドで、d,y,c,>,<辺りがそれにあたります。これらのコマンドは後ろに範囲を指定するオプションを付ける事で使い勝手がぐんとあがります。ような指定方法になります。言葉だと判りにくいかと思いますが、下記の様にコマンドを打って頂くとdipカーソルのある段落について一度に削除する事が可能です。paragraph)あるいはdib(もしくはdi()と言うコマンドを()の内部で実行して頂くと()の中身について一度に削除する事が可能です。dabの場合には()も含めての削除となります。インデントを変更したいような場合には>ipとコマンドを打つことで対象の段落を、まとめてインデントを下げる事が可能です。<iBや>iBなら{}で囲まれた範囲について丸ごとインデントを下げる形になります。複数コマンドの再実行(マクロ機能)qコマンドを利用する事で、複数のコマンドをまとめたマクロを登録して再利用する事ができます。登録したマクロは@コマンドで呼び出す事が可能です。言葉だといまいち伝わりにくいかと思いますので、行の先頭に"add"という文字を追加して、行のお尻の単語を消すという処理をマクロとして登録して利用するという例を説明します。(マクロ登録を完了)これで該当の処理がaレジスタに登録出来ました。この処理を再度呼び出す時には@aとコマンドを入力します。次の行に移動するため、わざわざ手動で移動させずに@aの繰り返しでどんどん単語に"を付けていけます。@aコマンドはコマンドですので回数指定ができます。5@aとすれば@aを5回実行出来ますので、下記の様に一度に処理することが可能です。@コマンドだけで処理が流れる様に作るのがコツです。