目次
こんにちは、エリックです。去年9月入社してから初のブログでどうしようかと悩んでて、text editorの話はどうかなと。 もう██年も使ってたvimって、基礎過ぎない?って思ったけど、同僚の入力とか、ウェブの動画やセミナー見ると、「やっぱこの技あまり知られてないな〜」って思っちゃったことは少なくない。 では、5つのvim技をお伝えさせて頂きます。
1. :x
最初に習うコマンドの中には、保存と終了する時に:wq
だね?vimtutor
にもそう書いてあるけど、怠け者のプログラマーは「2文字が多すぎ、1つで良い」だね? だからその時にwrite + quitよりexitが速い。変更がなければ保存しない(する理由もない)から更に速い!
2. vimdiff
diff
で比べるファイルがあまりにも変更が多いと、diff
の出力が長くて、見づらくなる。その時にvimdiff
で! 左右に表示され、変更のあるところがハイライトされて明らかに見える。 後、全く同じところは自動的に非表示にされます(ここには時間ないけど、折畳という魔法の技の詳しくは:h folding
で調べるべし!)
3. motion keys
ノーマルモードでhjkl
でのカーソル移動は基礎だけど、vimtutorでw
やe
でwordとendも言葉一つ一つ移行出来ることが教わる(まあ、普段スペースで分けてる’word’だから日本語がちょっと違う:ひらがな・カタカナ・漢字の間が「ワード」の区切れになる)。
b
/w
言葉(word)で後方・前方に移動(keywordみたいに区切られる)B
/W
言葉(WORD)で後方・前方に移動(非空白文字で区切られる)(
/)
文で後方・前方に移動(/[.!?]\s+/
で区切られるから「。」が残念ながら対象外){
/}
段落で後方・前方に移動(空行で区切られる)0
/^
/$
その行の最初の文字・最初の非空白文字・最後の文字にgg
/G
ファイルの最初・最後に移動
たまにまだlllllll
とか打ってる方を見かけてるから、[count]カウントって知らない?と思っちゃう。lllll
→5l
、jjjjjjjj
→8j
で打ち続けなくて済むし、50%
とかでファイルの真ん中へ飛ぶことも可能。 もっと知りたい方は:h motion
でどうぞ!
4. :set paste
Webからコピペすると、たまにインデントされたコードが自動的にインデントされ過ぎて段々右へ行き続く。
if (foo) {
bar();
} else {
baz();
hoge(moge);
# this is getting out of hand
}
その時にu
でundoと:set paste
を設定して再びペースト:
if (foo) {
bar();
} else {
baz();
hoge(moge);
# much better
}
終わったら:set nopaste
で、自動インデントが元に戻す。
5. statusline
ず〜っと前に作った~/.vimrc
で、以下を入れた:
set laststatus=2 " always show filename/status bar
set statusline=%<%f%h%m%r%=%b\ 0x%B\ \ %l,%c%V\ %P
それで、今編集してるファイルでこんなの見える: eric/2020-04-15-vim_tricks.md[+] 20197 0x4EE5 70,44-33 96%
ファイル名はもちろん、[+]で変更ありって分かる、最後に行と列、ファイルのポジションも書いてあり便利です。 列の44-33っていうのは、日本語があるマルチバイト列の44バイト目と画面上の33列目。 でも、20197 0x4EE5
のとこって何なんだろうね?
そう、「以」の文字コード。カーソル下の文字コードがいつも表示されると、スペースとタブどれか分かりやすくなり、例えばoption-spaceでノーブレークスペースを打ち間違えたら、すぐに分かるように。“Smart Quotes”という、ASCII以外の引用符もプログラムに入れるとエラーになっちゃうから、それも見えて助かる。ターミナルでかいなら、他の入れるものが一杯あるんで:h statusline
で検討しよう。
ではでは、vimの技一杯あるけど、今回はこれで。いつでも:h
でdoc読みまくって、新しい技を習うのお勧めしますよ〜(vim 4?の時ぐらいにマニュアルを印刷してソファでも読んだりしたw)。 次回まで、みんなのvim力をLEVEL UPしようぜ!
〜終〜
株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。
grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud (GCP)、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。
お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。