みなさんこんにちは masa です。今回はエディタネタの中でも Vim テクニックを取り上げてみたいと思います。普段、コンパイラ系の言語を書く場合は IDE を使いますが、それ以外の言語やシェルスクリプトを書く場合は Vim でちゃっちゃっとやることが多かったりします。
今回はノーマルの Vim で使えるもので、個人的によく使うテクニックをご紹介。
ここからここまでコピー or 切り取りしたい
なんといっても一番使う行コピーと行切り取りです。いえいえ 5yy とか 10dd とかじゃないですよ!
5行など行数が少なければ目測で 5yy とかできますが、コピーしたい行数が 127行だったりしたら大変ですね。
あまり Vim に慣れていない方は :set nu で行数を表示して、コピーしたい行を引き算してヤンクするというのを見掛けます。
これは効率が悪いですし、計算違いで関係ない行までコピー or 切り取りしてしまう可能性もあります。
そんなときは以下を使いましょう。
ここは1行目ですよ。 //この行でmsと打つ ここは2行目ですよ。 ここは3行目ですよ。 ここは4行目ですよ。 (中略) ここは126行目ですよ。 ここは127行目ですよ。 //この行でy'sもしくはd'sと打つ
上の例ではコピーをしたい始めの行でmsと打ち、コピー終わりの行でy’sと打つと、1~127行がヤンクされます。(d’sだとヤンクではなく切り取りになります)
これだと始点と終点でコマンドを打つだけなので間違いもないし簡単ですね。知らなかった方はレッツトライ!
大文字と小文字を切り替える or どちらかに統一する
シェルスクリプトの変数や PHP の定数などは大文字で書くのが慣習ですが、そうなっていないものを直したりするときに使えます。
選択した文字を大文字⇔小文字にトグルさせる場合は~(チルダ)で、選択した文字をすべて小文字に統一したい場合はu(小文字)、大文字に統一したい場合はU(大文字)でできます。
//まずは ctrl+v で対象文字を選択します this is komoji //左の文字すべてを選択した状態でUと打つと大文字へ変換されます THIS IS OMOJI //左の文字すべてを選択した状態でuと打つと大文字へ変換されます ThIs Is KoNGoU //左の文字すべてを選択した状態で~を打つとすべての大文字と小文字が反転します
一文字づつもしくは複数文字をリプレイスする
わざわざ挿入モードに入らずに1文字だけ修正したいとか、この単語だけ修正したいとかあると思いますが、その際はコマンドモードで以下を実施してください。
understanf //fの上にカーソルを移動してr、そのまま変換したい文字(d)を入力 disk //dの上にカーソルを移動してR、そのまま変換したい文字を打ち、最後にESC
マクロを組んで同じ操作をワンキーで繰り返す
なにやら難しい感じですが、めちゃくちゃ簡単です。 Vim では操作を記録して実行するマクロ機能がありますが、それを.(ドット)で繰り返すだけです。
//qaと打ち記録を開始 qの後ろは任意の覚えやすい文字で結構です This is Macro Test! //左のように記録したい操作をやりきります 1234567 //今回は簡単ですが3行の文字入力をしました Test is End //qと打ち記録を停止します //@aと打つと1回マクロを実施しますが、.(ドット)だけでも実施できます。 This is Macro Test! 1234567 Test is End //回数指定でマクロを実行したい場合は7@aと押すと7回実行できます
上の例だとコピーしたほうが早いですが、複雑な操作を再実行したい場合はマクロのほうが良いですね。
大文字小文字に関係なく検索
地味ですが検索時は必須ですね。わざわざ大文字で検索して、次に小文字で検索してとやっている人を見掛けました。検索文字列の後ろに\cとつけるだけでOKですw
banana BaNANA Apple Grape Banana ORANGE orange PEAR peAR GRAPE //(スラッシュ)を押して検索文字列banana\cと打つとすべてのバナナが引っ掛かります
いかがでしたか?今回はノーマルの Vim で使えるテクニックをご紹介しました。みなさんの作業効率を高める一助にしていただければ幸いです。