覚えとくと便利かもしれないVimのTips

適当に思い付いたものを書いてみる。

CTRL-X CTRL-L

行単位での補完。まぁ該当の行でyyしてpして貼り付けでもいいかもしれないけど、移動するの面倒な場合もあるし。

以下、自分のvimrcで「n CTRL-X CTRL-L」した例。

ちなみに俺がこれを一番使うときはRSpecのdescribeの行を補完する時かな。こんな感じ。

describe "hogehoge" do
end

desCTRL-X CTRL-L
↓
describe "hogehoge" do

んで、hでちょこちょこっと”の中に移動してdi”で”の中を削除する感じ。

di”

こっそり上で登場してるけど”で囲まれた文字列をd(削除)する。da”だと”も含めて削除。ちなみにこれはテキストオブジェクトっていうVim7からの機能で他にも色々パターンがあって、個人的にVimの機能の中でも特別気に入っている。ちゃんと説明すると長いのでいくつか例だけ示す。

di"
"の中を削除
da"
"も含めて削除
yi"
"の中をコピー
ya"
"も含めてコピー
di(
()の中を削除
da(
()も含めて削除
di{
{}の中を削除
da{
{}も含めて削除

gf

カーソル以下のファイル名を開いてくれる。requireやinclude、ファイルをオープンしたりする処理のところで便利。

require "hoge"

hogeのところでgfするとhoge.rbを開く。

CTRL-AとCTRL-X

VimM#3でamachangが感動してた気がする。カーソル以下の数字をインクリメントとデクリメントしてくれる。ちゃんと1000とかも1001や999にしてくれるよ。マクロで多用するかも。

guuとgUUと~

guuはカーソル行の文字を全部小文字に、gUUは全部大文字に。~はカーソル以下の文字を小文字なら大文字に、大文字なら小文字に。

書いといてなんだけどあまり使った記憶ないな、これ。

:!

:!を使うと外部コマンドを叩くことができる。単体だと結果を返すだけなので頭に.(ドット)を付けて結果を挿入したりする。単体で使うときはlsの結果を見るときが多いかも。一々screenのウィンドウを移動しなくて済む。なんか段々書くのが面倒になってきたので例で示す。

追記: kanaさんより指摘がありました。挿入はr!〜ですね。

> 単体だと結果を返すだけなので頭に.(ドット)を付けて結果を挿入したりする。 嘘。:{range}!{cmd}はフィルタリング。結果的にそうなるケースはあるけれど意味は違う。本当に挿入するなら:r!{cmd} (:read !{cmd})。
:!ls ~
ls ~の結果が表示される
:.!date
date結果が挿入される
:%!sort
今開いてるファイルをsortした結果に書き変わる
:%!grep hoge
hogeが含む行だけに書き変わる
:!ruby -c %
今開いてるファイルをrubyの構文チェックに通す。PHPとかでも似たようなことができる