Edited at

Vim備忘録


Vimの基本的なコマンド

主に、自分が普段使っていなかったが使えるようにしたいコマンド集

コマンドラインでvimtutorと打つと読めるvimtutorを通読するのが、他のどんな記事を読むよりも初級の知識をカバーするのにうってつけだと思います。

それぞれのコマンドの由来と関連付けると覚えやすく、そういう意味でこちらが非常に詳しいです。


移動



  • 表示上の行の移動 移動コマンドの前にg 


  • 行先頭へ移動 ^


  • 上下の行の先頭へ移動 +, -


  • 1行分画面上下 ctrl + e, y


  • 半画面上下 ctrl + u, d (up, down)


  • 1画面上下 ctrl + b, f (back, forward)

  • 段落毎上下 {, }


  • 前のカーソル位置へ移動 ctrl + O # older cursor positionでoらしい(参考リンク


  • 次のカーソル位置へ移動 ctrl + I


  • 対応する括弧へ移動 括弧の上で% #括弧の不一致によるデバッグ時に便利な操作



挿入



  • 複数行の文頭へ同じ文字列を挿入 0で文頭へ→ctrl-vで矩形選択→Iで挿入モード→編集後にEsc


  • 複数行の文末へ同じ文字列を挿入 ctrl-vで矩形選択→$で文末へ→Aで挿入モード→編集後にEsc


インデント操作



  • コマンドモードでのインデント追加 >>


  • コマンドモードでのインデント削除 <<


  • 挿入モードでのインデント追加 普通にtab # デフォルトではctrl-tでも可能だが、tmuxのプレフィックスキーに指定しているため不使用 tabおよびctrl-iで代替可能


  • 挿入モードでのインデント削除 ctrl-d # deleteキーを押す頻度が減ってめちゃ便利


  • 複数行へインデント追加 ctrl-vでの矩形選択後に>


  • 複数行のインデント削除 ctrl-vでの矩形選択後に< # インデントの前にカーソルを置く必要あり


置換



  • コマンドモードのまま文字を置換 変更箇所にカーソルを置いてrのあとに変更したい文字を入力

  • 複数文字 R→変更文字列→Esc


  • ある1行内の文字列の置換 :s/OLD/NEW/g (gがなければ行の最初の一つのみ、gがあれば全て 以下同様)


  • 指定行中の文字列置換 :#,# s/OLD/NEW/g


  • 文書全体の文字列置換 :%s/OLD/NEW/g


  • 一箇所ずつ確認 :s/OLD/NEW/gc



大文字小文字変換



  • カーソル上の1文字を変換 ~


  • まとめて変換 g~ # その後の操作で選択した範囲全てが対象。例えばg~jと打てばカーソルのある行とその下の行が全てに変換。g~3jと打てば3行まとめて置換。
    ~の代わりにu, Uを使うとそれぞれ小文字、大文字変換。gの使い方は上記同様。


削除



  • 単語の削除(次の単語まで) dw
    単語の削除(カーソル上の単語末まで) 


  • コマンドモードのまま de


  • 挿入モードに自動で変更 ce


  • 行末まで削除  d$


  • 削除後に挿入モードに変更 c$


コピー&ペースト

オペレーターとしてのヤンク



  • 一単語ヤンク yw


  • 一行ヤンク y$


  • ヤンクした内容を矩形選択で複数行にペースト ctrl+v → I でブロック挿入モード後、ctrl+r " # なかなか覚えられん


表示関連



  • 差分の表示 :diffsplit (ファイル名)


  • 文字列の前方検索 (検索対象にカーソルを置いて) # #後方検索の方が直感的で無難


  • 文字列の後方検索 (検索対象にカーソルを置いて) *


  • コードをPDF化 :hardcopy > filename.psでポストスクリプト形式でエクスポートし、コマンドラインでps2pdf filename.psでPDF形式に変換


  • 行数非表示 :set nonumber # スクリーン上でコピーするときなど


  • 大文字/小文字に一括変換 矩形選択後にU/u


  • 画面上でカーソルを一番上・中央・一番下へ移動 H M L


  • ファイルエクスプローラーの表示 :Vex :Sex (VとSはそれぞれ縦横分割) 


コマンドの実行



  • 外部コマンドを実行 :!(コマンド内容)


ファイルの入出力



  • 部分選択し保存 矩形選択の後に:w $FIlLENAME


  • 外部ファイルの挿入 :r $FILENAME


コマンド補完



  • コマンドモードで:文字入力後にctrl + d


前回の挿入モードでの挿入文字列の繰り返しコマンド


  • [ ] Ctrl-a


.vimrcでの設定

色々と設定はしていますがとりあえず1点だけ


マウススクロールによるカーソル移動

vimでのマウスの使い方については個人の好みの違いが大きいと思いますが、私はマウスのスクロールでカーソルを移動させる操作に慣れています。macのターミナルでは自然とそのような操作だったのですが、iTerm2へ切り替えた時にそのような挙動を示さなかったため、自分で設定する必要が生じました。

以下の通りに記載するとそれが可能になります(3行分ずつ上下するよう設定しています)。

noremap <ScrollWheelUp> 3k

noremap <ScrollWheelDown> 3j

参考文献

vimtutor(コマンドラインでvimtutorと打つと読める)