長い間 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
で最終行の行末まで選択=
でインデントを自動修正