長い間 emacs 派だったため、あまりviのキーバインドになじめなかったのですが、少しずつ覚えてきたら便利になってきたので、備忘としてメモします。
Vim は macOS の Terminal から標準で搭載されている vim コマンドを利用しています。
ノーマルモードからの操作を中心に覚えていきます。
これだけ知っていても、軽微なファイルの修正ぐらいはなんとかなります。
(自分はこの程度からのスタートです。)
i: インサートモードになるEsc: インサートモードから抜ける:wq: 保存して終了j: 下に移動k: 上に移動h: 左に移動l: 右に移動しかし、これだけでは全く便利にViが使えません。。。
もう少しカーソルの移動やカットアンドペーストのような編集が楽になるためのキーバインドを覚えたいと思います。
そのままコマンドになっているものもあれば、オペレータと呼ばれる動作を指定するキーバインドの覚え方のヒントです。 基本的には対応する英単語で覚えると良さそうです。
コピーはyを利用して、ペーストはpを使うといったように、ざっくりとキーを覚えておくと便利そうです。
Vim では、同じキーを連続で入力するものや、大文字で入力するコマンドが多いです。
これを覚えておくと、すぐに使えそうです。
よく使いそうなキーを連続で入力するコマンドです。
dd: カーソルがある行を削除yy: カーソルがある行全体をコピーcc: カーソルがある行を削除してインサートモードgg: 最初の行の行頭に移動基本的には行全体を扱うものは、キーを連続してと覚えれば良さそうです。
大文字で入力するコマンドは、カーソル位置から行末まで扱うものが多いです。
D: カーソルのある位置から行末まで削除C: カーソルのある位置から行末まで削除してインサートモードG: 最終行へ移動数字を入力してからGを入力すると、その数字の行数へも移動できます。12Gだと12行目の先頭にカーソルが移動します。
Yはデフォルトでは行全体をコピー(ヤンク)する動きとなるので、DやCと同様にカーソル位置から行末までコピーする動きにするため、.vimrcに以下の設定を追加すると良さそうです。
" 行末まで Y でヤンクするnnoremap Y y$Y: カーソルのある位置から行末までコピー 【要カスタマイズ】インサートモードに入るときのコマンドも大文字を利用するものがあり、覚えておくと便利そうです。
O: カーソル行を空けてインサートモードA: 行末移動 + インサートモードI: 行頭移動 + インサートモードS: カーソルのある行を削除してインサートモード(ccと同じ)他にも、大文字のコマンドがありそうなので覚えていきたいです。
インサートモードから抜けるときにEscキーを入力しますが、これがviを使い始めのときは使いづらく、viを避ける要因の一つでもありました。
なんとかならないかと調べていたら、やはり同じように思っている人がいるのですね。
素晴らしいカスタマイズの方法がありました。実はベビーユーザほど、Escキーを使っていないようです。
.vimrcに以下の設定を追加します。
" Esc の代わりに jj を利用inoremap <silent> jj <ESC>jj: インサートモードを抜ける 【要カスタマイズ】このカスタマイズができたおかげで、viをいじる機会が増えました。
ビジュアルモードにすると、選択範囲を決めてから挿入や削除などの操作ができます。
v: ビジュアルモードに入り、文字単位で選択V: ビジュアルモードに入り、行単位で選択Ctrl-v: ビジュアルモードに入り、矩形で範囲選択ビジュアルモードを使うと、複数行をまとめて処理する操作が便利になります。
カーソル位置から最終行まで一気に削除
vでビジュアルモードにGで最終行まで選択dで選択部分を削除全体のインデント位置を修正
ggで最初の行の先頭にカーソル移動Vでビジュアルモードで行単位での選択開始Gで最終行の行末まで選択=でインデントを自動修正