こんにちは。インフラエンジニアの射場です。
これは TECHSCORE Advent Calendar 2017 の16日目の記事です。
インフラエンジニアのお仕事ととても馴染み深い vim ですが快適に使えていますか?
vim は最低限使えれば作業自体はできるから無問題!とお思いのあなた!
ちまちまめんどくさい時間のかかる作業を圧倒的に効率アップさせ、イケてるエンジニア感を味わいたくはありませんか?
今からご紹介する4つのテクを身につけるだけであなたもイケイケエンジニア!
インフラエンジニアが vim を使う時にありがちなイライラ&ゲンナリなシーンを例にテクをご紹介していきます。
単語を消す
行全体を消したい時はとりあえず、dd と打っておけば楽!と知っている人でも
1単語消したい時は矢印キーを連打→ i を叩いて挿入モード→ BSキーを連打…… なんてしていませんか?
つらい方法
愚直に「矢印キーを連打→ i を叩いて挿入モード→ BSキーを連打!」
誰もがきっと通ってきた道
らくい方法
消したい単語の上にカーソルを置いて、daw と叩きましょう。
それだけです。めちゃめちゃ楽じゃないですか?
delete a word の頭文字!と覚えるとよいと教わったので、あなたもそう覚えるとよいと思います。
派生の技で caw があります。
これはカーソル上の単語を消した上で挿入モードに入ることができます。
そうそう、daw や caw だと記号を削除してくれません。
設定ファイルは記号が混ざりまくりですよね。このままだと何回も daw と叩き続けることになりそうですが、ご安心ください。
w の代わりに W にすると、記号もひとかたまりの単語として扱われるようになります。
繰り返し実行する
エンジニアの作業はくり返しが多いですよね。
何ヶ所も単語を消したり、書き換えたり……
つらい方法
先ほど覚えた daw や caw を活用して愚直に修正をおこなう。
いくぶんか楽になったけど単語を消す度に daw や caw を叩き続けるのはつらい……
らくい方法
ドットコマンドを使う。
. と打ってやると直前に行った操作をくり返すことができます。
「cawしてから hoge を入力」みたいなちょっとややこしい操作も . でくり返すことがでます。
同じコマンドばっかり叩いているなと感じたら . を連打しましょう。
文字列を置換する
ファイルの文字列を一括置換したい時、「:%s/before/after/g」のようにするのはそこそこ有名ですよね。
それでは、/ 混じりの文字列を置換したい時どうしていますか?
「/path/to/before」という文字列を「/after/path」という文字列に変えてみましょう。
つらい方法
/ は \ でエスケープしてやればいいから……
:%s/\/path\/to\/before/\/after\/path/g
はい、キー叩くのつらいですね。
エスケープをミスると「「E488: Trailing characters」と怒られたり、変に置換されたりとイライラですね。
らくい方法
区切り文字に ; を使うことができるんです!
:%s;/path/to/before;/after/path;g
コピー&ペースト
例えば長い単語を一括置換したい場合、SSH経由でサーバーにつないでいる時はコピペで楽勝です。
しかし、データセンターでサーバーにモニタとキーボードをつないで直接端末に入力となった時はどうすればいいのでしょう。
つらい方法
ガチる。
愚直に叩き続ける。タイポがあったら最初からもう一度……
らくい方法
ヤンクとレジスタを使う。
ヴィジュアルモードで選択した状態で y を叩くとヤンク(コピー)することができます。
ノーマルモードでp や P を叩くとヤンクした内容をペーストすることができますが、コマンドモードの時にはペーストすることができません。vim では別の方法でペーストする方法があります。その方法が Ctrl + r0 です。
ヤンクした内容はレジスタに保存されていて、挿入モードとコマンドモードの時に Ctrl + r0 を入力するとペーストすることができます。
ちなみにレジスタには何個も記録することができます。
レジスタ番号を確認するには、:reg とすればいいです。
ペーストしたい時は Ctrl + rレジスタの番号(0〜9、記号(直近は0) と入力してやればOKです。
さいごに
というわけで今回は個人的に「これを覚えてから作業が早くなった」と感じた機能をご紹介しました。
この記事をきっかけにあなたの作業効率が改善し、vim を好きになってくれればとてもうれしいです!