Vim で便利なTips集

最近書いてなかったけど、ちらほらVimでたどり着く人がいるっぽくてはてなスターもらったりしたからやる気出た!新しい生活に向けて、勉強したことをまたまとめることにする!



矩形選択

"Ctrl+v" で矩形選択ができる。
例えばどういうものかというと、
通常モードで "v" とか押すとマウスで選択したときのようになる。
"Shift+v" だと行全体だ。これはヴィジュアルモードとか呼ばれてるらしい。

ヴィジュアルモード

                                                                            • -

public function test():void
{
trace("Hello, World!");
trace("ababababab!");
}

                                                                            • -

行選択

                                                                            • -

public function test():void
{
trace("Hello, World!");
trace("ababababab!");
}

                                                                            • -

これが、矩形選択はこんな感じで選択できる。

                                                                            • -

public function test():void
{
trace("Hello, World!");
trace("ababababab!");
trace("testete!");
trace("ehehhehehe!");
trace("wer!");
trace("wwwwwww!");
}

                                                                            • -

選択したあとは、yとかでヤンクしたり、dで削除したりできる。便利。
んで、矩形選択の場合は "Shift+i" を押すと、そのまま矩形に挿入ができる。編集した後、[esc] をおせば、矩形選択したとこすべてに編集した文字が挿入される。超便利。
似たような編集をせにゃいかんけど、普通のエディタだと矩形じゃできんから泣く泣くひとつずつ・・・っていう作業せにゃいかんときとかにおすすめ。



マクロ

通常モードで "q, 任意のキー" を押すとマクロを記録することができる。
"@, 任意のキー" で同じ操作を自動的に行ってくれる。


例えば、ログ見るときなんかに、みる必要がないログを削除したいとする。ローカルからのアクセスは削除したい。
そんなときに

/192.168. ← いったん検索をしておく
q, a (aキーにマクロを保存)
=================こっからマクロ操作
n (次の "192.168." を検索)
dd (この行削除)
q (マクロ終了)
=================マクロここまで
1000, @, a (1000回 a に記憶したマクロを繰り返す)

で、1000行いらないログを消すことが出来る。
ちなみに、別の行を消すときは再度 /172.16. とかってやって、1000, @, a とかやると 172.16 がある行を消す操作を繰り返してくれる。超便利。




コマンド操作の履歴

ターミナルで "Ctrl+p" とか "Ctrl+n" とかやると、打ったコマンドの履歴や次を遡れる。実は、Vim でもできる。
:set enc=utf8
とか
:%s/unko/hoge/g
とか
:set nu
とか
:set hlsearch
とか
こんなのを打った後、別のファイルにいっていちいちこんなの打つのめんどくせーって人向け。別バッファに移っても履歴は残ってるっぽいから、":" を打ったあとに "Ctrl+p" してみると幸せになれる。


その他にも
"Ctrl+a" -> コマンドの先頭にカーソルを移動
"Ctrl+e" -> コマンドの末尾にカーソルを移動
とかも便利。




削除の発展形

行削除とか、削除とか、"Shift+d" とか "d, w" とかよく使うと思うけど、"d, i, 任意のキー" も便利。
どういうものかというと、
trace("hello, world, unko-buriburi!!");
こういう文章があったとして、ダブルクオーテーション内の文字を削除するには、hello の "h" にカーソルを当てて、d, f, ! とかやったり、dw 連打とかやるとおもうんだけど、ダブルクオーテーション内のどこにでもいいからカーソルを当てて、'd, i, " ' ってやると、ダブルクオーテーションで囲まれた文字列をすべて削除してくれる。超便利。