Vimのキーバインドはやっぱり便利
インフラ系だと手元にViしかなく触らなければならないことがあるのはもちろんのこと、その他の機会でもやっぱりVimのキーバインドは便利なのでVimっぽく操作できたらいいのに。。みたいな機会は多いと思います。実際筆者もVScodeを使いつつ、キーバインドはVimのものを利用しています。
しかしながら、その種類が多くて覚えにくかったり体系的にまとまっているものが少なかったので、自分用にまとめました。
これは最初に覚える
-
!は強制の意味。強制的に保存とか、強制的に終了とか。 -
ZZ保存して閉じる。 -
wは書き込み、qは終了、eはファイルを開く。 -
.は直前の操作を繰り返す。 -
Ctrl+gでファイル情報の閲覧 -
uはUndo。 -
Ctrl+rはReDo。 -
Ctrl+nは後方補完。(前方補完はCtrl+p)
選択系コマンド
効率的にビジュアルモードを使いこなしましょう。なおViにはこの概念はありません。
-
vは領域選択スタート -
Vは行選択スタート -
Ctrl+vは矩形選択スタート -
yを押せばヤンク、dを押せば消せるけど、1行しか処理しない時には、ダブルコマンドするとよい。
移動系コマンド
テキスト編集の肝は「移動」して「選択」だから、以下のコマンドもかなり重要。
-
^は行頭に移動(本当の行頭はO、これは非空白文字までの移動) -
$は行末に移動 -
ggはページ最初に移動(ページ最後に移動はG) -
Hはその画面の最初に移動(Lは画面の最後に) -
{は空白行を目印に移動(小かっこ・中かっこならなんでもOK) -
%は対応するかっこまで飛ぶ。 -
3gjは3行下に移動。 -
wは単語ごとに前に移動(うしろへ移動はb) -
(は現在の文の先頭へ。
「選択」して「処理」まで一括系コマンド
文字や文章の削除をしたいときにわざわざ選択してから、処理のコマンドを更に打ち込むのは大変なので、よく使うものに対しては割り当てられています。
-
Dはカーソル位置から行末まで削除 -
ddはカーソルのある行を切り取り。 -
~は小文字と大文字を相互に変換 -
*はカーソルのある単語を検索 -
/は下方検索(上方検索なら?) -
Ctrl+aはインクリメント(xならデクリメント) -
xは1文字だけ消すことができる(Shiftを押しながらはBackspaceと同等) -
3ddは3行消す。 -
yyでカーソルのある行をヤンク。 -
pは貼り付け。 -
>>はインデント。 -
=は範囲を自分で選んで自動インデント。 -
Jはカーソル行のある行を次の行と結合。
マーク機能
- 簡単に言うと現在地の登録と登録したポイントへのジャンプ機能。
-
:marksでマーク箇所一覧。 -
m[a-zA-Z]でマーキング。 -
:b [1-99]で番号指定してバッファを開くことができる。 -
:bw [1-99]でバッファを完全に削除 -
:bd [1-99]は:ls!では残っているがバッファに関連する変数やマーカーを消すだけ。 -
:delmarks!はマークの一括削除。 -
Ctrl+oで古いマークへ移動 -
Ctrl+iで新しいマークへ移動。 -
\ [a-zA-Z]で移動できるの忘れがち。 - こういうファイルの編集情報はviminfoに入っているよ。
アウトライン機能
- 領域選択して
zfでたためる。スペースで開ける。 -
zoで開く、zOですべて開く、zcで閉じる、zCですべて閉じる。
コマンド
ちょっと込み入った操作や、Vim全体の設定に関わる(=つまりテキストの操作以外の部分)はコマンドを実行して行います。
-
:split(spも可)は水平画面分割。 -
:vsplit(vstも可)は垂直画面分割。 -
:closeは今開いている画面分割を閉じることができる。 -
:bnや:bfでバッファをいったりきたり、いま開いているバッファは:lsで閲覧することが可能。 -
:pwdでカレントディレクトリ表示 -
:regでレジスタに入っているもの一覧、呼び出しは"2pみたいな感じで -
:%s/置換前/置換後/gは定型文として覚えよう。%はファイル全体に適用の意。本来の:sは一部にのみ適用される置換コマンド。gは1個だけ置換ではなくすべて置換の意味。最後のオプション値はgcにすると置換をいちいち確認してくれる。 - ウィンドウ分割状態で
:qは消える。:hideはウィンドウを閉じるけどバッファにはのこる。 - ファイルをエンコーディングも可能。
:e ++enc=cp932。 -
:waは開いているファイルをすべて保存。 -
:Exはvim標準のエクスローラを開く。
Vimを使い倒すための中級編
ここから先は上の基本コマンドを使いこなせるようになってから進めてみてください。
奥が深いね、挿入モード
Vimには挿入モードというモードがあり、いわゆる普通のテキストエディタのカーソルを移動して書き込む画面がVimでは挿入モードに相当します。つまりVimのニュートラルな画面はカーソルが画面上をスケートのように滑って選択ができる画面です。なんでしょうPhotoshopでエフェクトをかける範囲をまず選択して、編集コマンドを差し込むのと同じ感覚です。
-
iはカーソル位置から入力開始。 -
aはカーソルの次の位置から入力開始。 -
oはカーソルの次の行の先頭から入力開始。 -
Iは行の先頭から入力開始。 -
Aは行の終わりから入力開始。 -
Oはカーソルの前の行の先頭から入力開始。
ちなみに、挿入モードではCtrl+tやCtrl+dでインデントができます。
テキストオブジェクトとオペレータ
Vim特有のテキストオブジェクトのイメージは、チャンクとか単語単位でメソッドを適用すれば作業効率あがるよねって感じです。
- オペレータは
c(切り取って挿入モード)とかd(切り取り)とかy(コピー)とか。 -
di"とすると"~"の中身だけ切り取り。da"だと括弧ごと切り取り。 - テキストオブジェクトの
iはinnnerで中身の、aはa wordで全体という意味。