実践vimを読んで仕事が楽しくなる話

一歩出遅れた感あるが実践vimを読んだ

実践Vim 思考のスピードで編集しよう!

自分とvim

自分はエディタとしてvimを使っている
なぜvimなのかというと正直ロマンだ。最近はsublimeが気になって仕方ない
去年はインフラの仕事してたのもあってviからの流れというのもあるかも

自分は情報系の大学の出なので初めてvimを使ったのは実は結構前だ
「挿入モードってなんだよ?使いずら!」というのが正直な感想だった
そんな僕も今ではvimでさくさくと(ほんとか?)コードを書いている
使っているプラグイン等の記事は別途書きたいと思うが、今回はそんなレベルのvimerの自分が読んだ感想をお伝えしたい

読んでみてどうだったか

正直vimmer名乗るの恥ずかしくなったw
知らないことが多すぎた。vimというツールの強力さをまったく生かせていなかった
最低限のエディタ機能しか知らなかったと反省
とりあえず使っているレベルの人なら一読の価値はあると思います

参考になったところ

ドットコマンド

.(ドット)キー打つと前回編集した内容を繰り返してくれるんですよ
いやもうね。そんなことも知らなかったんです。ほんとに恥ずかしい ちなみに本書では編集内容とかコマンド構成を"ドットコマンドで再利用可能な形"にして、出来る限りドットコマンドを繰り返し使うことを推奨してる
確かに似たような編集をいかに最少タイプ数で編集するかは重要だよね

テキストオブジェクト

テキストをオブジェクトとして見る、簡単に言えばタグとかカッコとかを認識してその単位でオブジェクトとして見てくれる機能があるんですね
これもまったく知らなかった
例えば、

function(hoge,huga){

こんなテキストがあって関数の引数を変えたい時にカッコの中で"di("とすると、

function(){

こうなる
消してそのまま挿入モードに入りたければ、最初のコマンドをdじゃなくてcにすればよい
最後のカッコのところは色々対応していて、<、{、[、tとか色々できる。tはタグを意味している。

また、真ん中の"i"を"a"にするとカッコごと消してくれる 例えば、

<div><a href="hoge">huga</a></div> 

こんなテキストがあって、aタグの中で"dat"とすると、

<div></div> 

こうなる。HTMLのタグごと消したい時とかはこっちのほうがいいね

fコマンド

これもまた知らなかったので恥ずかしいんだけど、fコマンドはfの後に続けた文字をその行の中で検索してカーソルを移動してくれるコマンド
例えば、

This is a apple

という行があったとする
このときappleをbananaにしようと思ったら、僕は"w"を連打してた(この例だと"$b"とかもするかも)
こういうときに"fp"とすると、この行で最初にでてくる"p"、つまり"apple"の"p"にカーソルが移動するのだ
ちなみに編集対象がappleだからって"fa"としてしまうと途中にある"a"に移動してしまうので注意(その場合は";"とすると次の候補に飛んでくれる)
fコマンドは考えるまでに候補をちょっと考えなきゃいけない時はあるものの、"w"を連打するよりは遥かに効率がいい

表示行の移動

vimのデフォルトでは1行の長さがウィンドウを超える場合、行番号なしの新しい行をつくって、いわゆる折り返しをしてくれる
この折り返しの行に移動したいとき"j"とか"↓"を押したら行番号的にいっこ下の行に移動してイラッとした経験ないすか?
そんなときは"gj"とか"gk"とすると表示通りの移動をしてくれる
これは凄く助かる。こういう場合自分は目的のところに辿り着くまで"w"を延々と連打していた。fを使うのもありだけどすぐ下かすぐ上に見えてる所ならこれが凄く助かる

ヤンクレジスタ

例えば"yy"で行をコピーして下の方のある行を上書きしようと思う

1: first line  #ここでyy
2: second line
3: third line

対象の行まで移動してその行を"dd"で削除、"P"で貼付け…と思ったら直前で削除した行でレジスタが上書きされていて"yy"した行がでてこない!!

1: first line
2: second line
3: third line #ここでddP…orz

なんてことありませんかと。僕はしょっちゅうあっていつも苛ついていた
削除に見える動作が実際は切り取りであるために、最初にヤンクしたレジスタを上書きしてしまっているから起きる現象
でも我々にはヤンクレジスタがあります。ヤンクレジスタはヤンクした結果のみ格納しているレジスタ
ヤンクレジスタは"0で指定できるので、"P"の代わりに" "0P" とやってやれば問題は解決

1: first line
2: second line
1: first line #ddで3行目を消した後"0P

その他

ファイル間のジャンプ、レジスタ、マクロなど使いこなせれば恐ろしく捗るであろう機能について詳しくのっている
この辺はいままでスルーしてきていたので正直自分はうまく使えていないのだが、今後も挑戦は続く 特にファイル間のジャンプは関数の参照とかで重宝するので早くマスターしたい所

まとめ

この本を読んで作業が物凄く捗るようになった。というか楽しくなった
編集する前に編集を組み立てる時間みたいのができた。それがうまくいったときの爽快感がなんとも言えない
それは一見時間の無駄に感じるかもしれないが、クラスやメソッドを新規で書いてる時に処理の重複とか実行時の効率とか考えないでコーディングしますか?と
編集の効率化を考えることは、結局は生産性の向上に繋がるという点、普段から"同じことを二度しない"、”余分なことをしない”思考を作るトレーニングを兼ねるという点でいいと思った

最低限のコマンドの説明とかは一切ないのでvim使いはじめの人にはきついかもしれないが、ひと通り使える人なら是非読んでほしい

実践Vim 思考のスピードで編集しよう!

実践Vim 思考のスピードで編集しよう!