今の会社に入社した直後、半年くらいVimハラスメントを受け続け重い腰を上げてVimバインドを使い始めたらもう元の体には戻れなくなりました。
IdeaVimを使い始めて早2年、Vimを普及するために僕が普段使っているVimバインドを紹介します。
ただコマンドを紹介するだけだと覚えにくいので心に語りかけながら書きます。
ご自身のIDEにvimを入れて打ちながら読むことをお勧めします。
モード
Vimには4つのモードがあります。
ノーマルモード
起動したらこの状態です。移動しかできません。
iやaを打つと入力モードに入ります。
入力モード
文字が打てます。escでノーマルモードに戻ります。
ビジュアルモード
範囲選択する時に使います。
ノーマルモードでv, V, Ctrl+vを押すと入ります。
- v
- 文字選択。一文字づつって感じ。
- V
- 行選択
- Ctrl+v
- 矩形選択
- 割と便利なので一回押してみてください
- 矩形選択
コマンドモード
これはこの記事では割愛します
ノーマルモードのコマンド
この記事ではここを説明します
一気に覚えると大変なので、ランク分けしておきます。
まずは基本的なコマンドを覚えましょう
太字は特に便利なコマンドです。
Lv. 1
超基本的な移動とか
| 入力 | 結果 |
|---|---|
| j | 下 |
| k | 上 |
| h | 左 |
| l | 右 |
| w | 次の単語の先頭に移動 |
| b | 前の単語の先頭に移動 |
| a | カーソルの右から入力モード |
| i | カーソルの左から入力モード |
使い初めの頃はaだけを使って入力モードに移動してましたが、iも知っておくとたまに気持ちよくなれます
移動プラス入力
| 入力 | 結果 |
|---|---|
| o | カーソルの下の行に1行追加して入力モード |
| O | カーソルの上の行に1行追加して入力モード |
ここまででかなり使えるようになってると思います
Lv. 2
組み合わせとか、削除系を紹介します。
| 入力 | 結果 |
|---|---|
| dd, D | カーソルのいる1行削除 |
| dw | 今いるカーソルから単語の終わりまで削除。 dはdelete, wは単語移動なのでその組み合わせです。 |
| u | ctrl+zと同じで、操作を取り消す |
| x | カーソルの文字を1つ削除 |
大文字系は、ダイナミックな感じになります。
例えばAとかは行末で入力モード、といった具合でとりあえず押してみて、挙動を楽しむのもvimの面白いところです。
Lv. 3
いかにして最小の手数で入力モードに入れるか、が気になってきませんか?
| 入力 | 結果 |
|---|---|
| cc, C | 1行削除して入力モード。 dd→Oみたいな動きになります |
| cw | 今いるカーソルから単語の終わりまで削除して入力モード。 dw→i的な |
cはdeleteの後、入力に移動してくれるやつ、つまりはchangeです。
Lv. 4
iとaを紹介します。
入力モードに移行するコマンドとは異なり、dとかcとかと組み合わせる時のi,aです。
iはinner、内側。
aはaround、周りも。
という感覚をまず持ってください。
def shinjiro(shinjiro_|a|rg: bool) -> bool:
if shinjiro_arg is True:
return True
return False
ノーマルモードで|a|にカーソルがあるとします。
その時、dwをするとshinjiro_|a|rg: → shinjiro_|:|になりますよね。
この時、delete + inner + wordしたくなるので、diwと打つと、
def shinjiro(|:| bool) -> bool:
if shinjiro_arg is True:
return True
return False
となります。
wordの時は、dawでも同じです。
diとか、daの後ろには、(とか[とか{も入力できます。
もうお分かりですね。
def shinjiro(shinjiro_|a|rg: bool) -> bool:
if shinjiro_arg is True:
return True
return False
この時di(とするとdelete + inner + ()なので
def shinjiro(shinjiro_|a|rg: bool) -> bool:
↓
def shinjiro|(|) -> bool:
da(とするとdelete + around + ()なので
def shinjiro(shinjiro_|a|rg: bool) -> bool:
↓
def shinjiro| |-> bool
となるわけです
非常にセクシーですね
おわり
自分がエディターでよく使うのはこの辺りまでです
たまにtとかfを使いますが、気が向いたら第二弾を書くのでその時にでも
Vimgolfという変態向けのサービスもありますので、もっと最小の手数でやりたい・・・!
という方はぜひvimgolfをやってみてはいかがでしょうか
自分はあまりやっていませんが、こんな感じです
割と楽な問題を選んでいるのでトライしてみてはいかがでしょうか
https://www.vimgolf.com/37639/maruryota
ようこそ、vimの世界へ
よきvimライフを👋🏻