メインコンテンツまでスキップ

Vim

必須

操作 x 中身だけか全体か x 範囲

  • 操作
    • c: change
    • y: yank
    • d: delete
  • 中身だけか全体か
    • a: all object
    • i: inner object
  • 範囲
    • w: word
    • s: sentence
    • p: paragraph
    • gn: 直前に検索した単語やパターンの次の出現箇所(カーソルがすでに単語上にあればその単語全体)
    • 各種囲み記号
      • parenthesis
      • bracket
      • brace
      • tag(tの一文字で表される。React で多用しそう)
      • ほか多数

番外編(vim-surround)

  • ds <消したい囲み記号>
  • cs <消したい囲み記号> <新しい囲み記号>
  • ビジュアルモードでSを押して囲み記号の追加

ファイルを開く

  • :e {file name or directory}: ファイルを開く

移動

  • hjkl: 左、下、上、右 (gをつければスクリーン上)
  • w,b,e,ge: 単語の先頭、末尾、単語の先頭へ
  • $: 行末へ
  • 0: 行頭へ
  • ^: 行頭の非空白文字へ
  • %: 対応する括弧へ
  • Shift + {}: ブロック移動
  • G, gg: ファイルの最後、最初へ
  • Visual Mode + o: 選択範囲の先頭、末尾へ

ページ送り

  • Ctrl + fbudey: スクロール
  • zz, zt, zb: カーソル位置を中央、上、下に

挿入

  • aA: カーソルの後ろ、行末へ
  • iI: カーソルの前、行頭へ
  • oO: 下、上に行を挿入

検索置き換え

  • /? + nN: 検索
  • *# + nN: 単語検索
  • fFtT + ;,: 行内検索
  • :%s/old/new/g: 置換
    • %なしだと現在行または選択範囲のみを処理対象とする。ありだと文書全体を処理対象とする。
    • gなしだと行内の最初の一つだけ置き換える。つけると行内の全てを置き換える。
    • *したあとだと、置き換え前の文字をわざわざ入れなくていいので便利。

レジスタ

  • :di: レジスタの内容を見る
  • "": 無名レジスタ。デフォルトレジスタ。なにもしなければこれがデフォルトで使われる。
  • "0 ヤンクレジスタ。最後にヤンクしたものが入り、dcxしても上書きされない。
  • "1-9: 削除変更レジスタ。ccddなど行単位の削除変更履歴が順に入る。
  • "a-z: 名前付きレジスタ。ユーザーが自由に使えるレジスタ。

編集

  • (g)J: 行を結合
  • >>, <<: インデント
  • Ctrl + t, d: インデント

ジャンプ

  • g; g,: 変更履歴をたどる
  • Ctrl + o 戻る
  • m a-z: マーク
  • ' a-z: マークの行へ移動
  • backtick a-z: マークへ移動

支援

  • gd: goto definition
  • gh: goto help

画面分割

  • Ctrl-w s: 縦分割
  • Ctrl-w v: 横分割
  • Ctrl-w hjkl: 移動

マクロ

  • q a-z: マクロの記録
  • q: マクロの記録終了
  • @ a-z: マクロの実行

コマンド実行

  • :!{cmd}: シェルコマンドの実行
    • 範囲選択した状態で実行すると、範囲を標準入力としてコマンドに渡し、出力を受け取って範囲を書き換える。jqなどすると便利。
  • :r!{cmd}: コマンドの出力を現在位置に挿入する
  • :w!{cmd}: ファイルを標準入力としてコマンドに渡す

キーマップ

  • :nnoremap {押すボタン} {実行したいキー}: ノーマルモードのキーマップ
    • 先頭がnならノーマル、vならビジュアル、iならインサート、のモード設定
    • アドホックに使うこともできるし、.vimrcなどに設定すれば永続化して使うこともできる。

バッファ

  • :ls: バッファ一覧
  • :b {buffer number}: バッファ切り替え