Wednesday, May 10, 2006

【便乗】はてな vim 勉強会勝手にリファクタリング [memo]

はてなの技術勉強会で vim のことをやったようで,
これだけは知っておけ! vim 勉強会

takayama さんがトラバをつけている.
はてな vim 勉強会勝手にリファクタリング

私は takayama さん作の TareRSS (vim 上の RSS リーダー) を愛用していたし,私も vim を「ヴィム」ではなく「ブイアイエム」と読むこともあってちょっと共感.やっぱりここは vim を広めていこうということで,1つ便乗して私も tip を紹介してみることに.


勉強会の中で, :s/foo/bar/g みたいな置換の話が出てくる (この例では foo を bar に起き換える) けど,実はこの foo というのを省略して :s//bar/g みたいに書くこともできる.そして省略した場合には最後に検索した文字が置換対象となる.

だから例えば

I live in Massachusetts.
My apartment is located just 5 minutes from University of Massachusetts.
I am originally from New York.
The weather is getting really nice and warm in Massachusetts these days.

みたいな文章があって,Massachusetts を Ohio に置換したい時に「『まさちゅうせっつ』なんて打つのめんどくさいな」と思ったら,上記文章の Massachusetts という文字列のどこかで * でも押して (* はカーソル位置の単語の前方検索),

:%s//Ohio/g
みたいな.

# とか * でサクっと対象文字列を拾うのがミソ.

ちなみに同じワザは global コマンド (:g) でも使えるので,例えば
:%g//d
すれば Massachusetts を含む行を削除できるし,
:%v//d
すれば Massachusetts を含む行だけ残すことができる.

:let @a=''
:%g//y A
して "a レジスタ に Massachusetts が含まれる行を入れてみたりとか (その後どこかで "ap ).


結構コードを書いてる時に FuncReallyReallyLongFunctionName みたいな関数名を置き換える時は重宝します.ヘッダファイルと split 表示している時は,
:windo %s//FuncNewName
とするとか.


ところで勉強会は非常に分かりやすかったけど,まわりには「Vim って覚えることが多すぎて良く分からない」って声が多い.だから丸暗記させようとするんじゃなくて,なんとなくコマンドのフレームワークというか体系を最初に説明してあげると,とっつきやすいかも.

例えば,まずコマンドは覚えやすいように
y は yank の y
d は delete の d
p は paste の p
x は文字削除だけど,これは昔のタイプライターで間違えた時に x を上から打って取り消し線のようにしていたから
みたいに説明してあげて,
- コマンドは大文字のものと対になっているものが多い
- コマンドの前に数字を入れるとその分繰り返しになる
- g を最初に打つと,そのコマンドに「ひねり」を加えた感じになるものがある
(勉強会でも絶賛されていた gj gk や,同じく勉強会に出てきた gJ,前述の * # に対して g* g# とか)
などなど…
といった具合に大筋のパターンを理解した上で,少しずついろいろなコマンドを覚えていって,なんとか使える → 便利に使える → すごく便利に使えるとなってきたらマクロやレジスタみたいな概念を覚えていくといいんじゃないかな.


5 comments:

takayama said...

こんにちは。 tarerss を使って頂いていた…人が居たなんて…!?! ありがとうございます

// 省略も知りませんでした。意外と細かいtipsが眠って居ますねえ。

toshi said...

TareRSS すごく便利に使わせて頂いてましたよ.さすがに今では購読 RSS が増え過ぎたのと,どの環境からでも読みたいので Web型リーダー使ってますが…

Vim は便利な機能がたくさんあるのに,それほど情報が流通してないんですよねぇ.

secondlife said...

どもども。

そういえば大事な * と # の説明するの忘れてました、とほほ。

vim って初心者向けのコマンドリファレンスはあってもそこから次の一歩の情報があまりなくて、独学で勉強するのなかなか難しいんですよね。

@aka said...

Vim には、色々と便利な機能があるのですねぇ。勉強になります。Emacs 派で vi の使えない私としては、vi をガリガリっと動かしてる方々はスゴイなぁと思う次第で... でも使おうとはしないんですけどね :P

> 情報が流通してないんですよねぇ.
ブログで少しずつ情報を開陳してみては?

toshi said...

secondlife さん,
> vim って初心者向けのコマンドリファレンスはあってもそこから次の一歩の情報があまりなくて

@aka さん
> ブログで少しずつ情報を開陳してみては?

確かにそうですよね.
勉強会にトラバつけたような人達で,「Vim tips」のバトンをまわしたりとかもおもしろいかもですね.
ねぇ secondlife さん?