cafegale(LeafCage備忘録)

LeafCage備忘録(はてなダイアリー)と統一しました。

実践Vimを読んだ

第1部 モード

ほとんど復習だった。普段あまり使っていないコマンドラインモードについて以外は。

第2部 ファイル

バッファリストを利用するというのはよい着想だ。

第3部 スピードアップ

マークはほとんど利用していないのは何とかしたい。

第4部 レジスタ

マクロはエラーが起きるとそこで機能停止する性質をうまく利用する。
マクロをビジュアル選択して実行すれば並列に実行できる。ただしこれは1つのバッファでの話。
複数バッファに適用する場合バッファリストを逐次:nextするようにする(直列)か、:argdo normal @a する(並列)

また、マクロを修正するときには:put a を使い、修正後は"aYする。

qaq でマクロをリセットする。

第5部 パターン

第14章 置換

「\v」パターンスイッチを利用するのはデフォ。
置き換えするときには先に検索でマッチを作成した後、置き換え文字を指定せず:s//を利用する。
置き換え側で\=で式評価になることを利用して、:%s/\v\<\/?h\zs\d/\=submatch(0)-1/gのように、各<h2>タグなどを一段小さくするなんてことが出来る。
また、:%s/\v(|)/\={"dog":"man","man":"dog"}[submatch(1)]/g で2単語を入れかえることが出来る。

複数バッファに対して置き換えコマンドを実行させたいときには:argdo %s//Practical/ge (eフラグはエラーメッセージ抑止)
さらに、vimgrepをかけた後に:Quickfixdoなるコマンドを作ってquickfixに含まれているファイルについてのみ置き換えを行うようにすればさらに効率化できる。

第15章 グローバルコマンド

qaqでマクロをリセットした後、
:g/TODO/yank A でTODOコメントをレジスタaに収集する。

:g/{/sil .+1,/}/-1 sort で全てのCSSルールブロックの中身をソートできる。

第6部 ツール

nnoremap :!ctags -R
:autocmd BufWritePost * call system("ctags -R")
Gitのpost-commit post-merge post-checkoutの各イベントフックでctagsを更新させる。(tagsファイルはgitignoreリストに加える)
※ctagsがtagsファイルを作るのはカレントディレクトリらしいので、これを利用すれば好きな場所にctagsを作らせられるかも。

makeやcompileコマンドは自由に設定できる。(Vimにとってcompilerはドキュメントに何らかの処理を施してエラーリストを生成する外部プログラムのこと)

スペルミスをノーマルモードで修正するときには[sでミスしたところにジャンプしてからz=で修正する。
インサートモードではでミスした部分に順番にジャンプし自動補完で修正できる。