Skip to content

Instantly share code, notes, and snippets.

@fohte
Created September 5, 2024 03:59
Show Gist options
  • Select an option

  • Save fohte/f99aab472119acd736dfc688bfdf383c to your computer and use it in GitHub Desktop.

Select an option

Save fohte/f99aab472119acd736dfc688bfdf383c to your computer and use it in GitHub Desktop.
なれる! Vimmer

なれる! Vimmer

Tech Lunch 2024-08-29 @fohte


Vim とは?

  • normal mode, insert mode, ... というモードを切り替えて操作することが特徴のテキストエディター
    • VSCode などは Vim でいうと常に insert mode ともいえる

今回持ち帰ってほしいこと

  • Vim は怖くない
  • 知っているショートカットをひとつでも増やして QoL を上げよう

  • Vim を使ってない人

    • 安心してください、使いたくなります
  • Vim を使ってる人

    • 安心してください、もっと早く操作できます
  • この資料をすでに全部わかっていた人

    • 僕に Vim を教えてください

注意書き

  • 今回のスライドでは Vim そのものは紹介しません
  • Vim をシミュレートした環境 (VSCode の Vim プラグインなど) でも使えるように話をします

Vim に入門するときの心構え

  • 急に全部覚える必要はない
  • まずは矢印キーやマウスを使ってカーソル操作するだけでもよい
    • 徐々に便利なものだけ覚えて使っていこう
    • macOS で使える ctrl+a, ctrl+e みたいなカジュアルなショートカットとして利用しよう

モードという概念

  • Vim にはよく利用するモードが 4 つあります
  • normal mode
  • insert mode
  • visual mode
  • command-line mode

normal mode

  • 入力はしない。移動や削除などの操作をするモード。
    • この操作のショートカットが非常に多い
  • Vim 開いたときは normal mode から始まる
  • 文字を入力したいときは i で insert mode にする

insert mode

  • 文字を入力するモード。通常のテキストエディタと同じ。
  • normal mode に戻りたくなったら Escape を押す

visual mode

  • このモードは最初は覚えなくてよい
  • テキストの特定の範囲を選択して、その選択範囲に編集や操作するモード
  • 他のエディタで、ダブルクリックしたときに選択するのと同じ

command-line mode

  • normal mode で : を打つとコマンド入力できる
    • VSCode の Command + p に似ているかも
  • たとえば
    • :w => ファイルを保存する
    • :q => Vim を終了する
    • :wq => ファイルを保存して Vim を終了する

これだけ覚えればとりあえず Vim を操作できる

  • 文字入力したい!
    • i 押す
  • insert mode から抜けたい!
    • Escape 押す
  • ファイル保存したい!
    • Escape -> :w
  • Vim 終了したい!
    • Escape -> :q

normal mode で基本的な操作をする

  • Vim はもっと便利になる
    • がまずは基本操作を知ろう
  • normal mode の基本的な操作
    • h, j, k, l
      • ← ↓ ↑ → に相当
    • i
      • normal mode -> insert mode に移行
    • :
      • command-line mode に移行

もうちょっと便利にする

編集系

  • dd: カーソル行を削除する
  • p: ペーストする
  • yy: コピーする
  • >>, <<: インデント

移動系

  • gg, G: ファイル先頭に移動 / ファイル最終行に移動
  • w, W / b, B: word ごと移動
    • w: 後ろに移動
    • b: 前に移動
    • W, B: 記号も word とみなして移動
  • $: カーソル行の一番右側に移動
  • ^: 一番左側に移動 (インデントよりは左にいかない)
  • zz: カーソル行を画面の中心にする (スクロールさせる)

ファイル内検索

  • / で検索開始
    • /def と入力すると def で内検索
  • n: 検索したキーワードの次の場所に飛ぶ
  • N: n の逆版 (前の場所に飛ぶ)

もっと便利にする

insert mode に移行

  • a: 現在のカーソルの後ろで insert mode 開始
    • 📝 便利な場面: $ -> i しても末尾から入力できないので $ -> a
  • A: 現在のカーソル行の末尾から insert mode 開始
    • I: カーソル行の最初から insert mode 開始
  • o: 改行して insert mode 開始
    • 📝 i -> 改行 とほぼ同じ
    • O だとカーソル行の前に改行
  • S: いまの行を全部削除して insert mode 開始

より便利な移動系

  • }, {: 次/前の空行に移動
  • %: 対応する括弧に移動
  • *: カーソル下の word で検索
    • / で検索するのと同じ
  • f -> なにか 1 文字: カーソル行の後方にある 1 文字に移動
  • t: f の手前バージョン

より便利な編集系

  • ciw: カーソル下の word を削除して insert mode 開始
    • change inner word と覚えるとよい
  • .: 前の操作を繰り返す
    • 例: * -> ciw -> 入力 -> Escape -> n -> . -> n -> . -> ...

より発展: textobj, operator

  • ciw みたいなものがたくさんある
    • これが Vim 大好きな理由のひとつ
  • ciw だと
    • c が operator
      • change (消して insert mode) という「操作」
    • iw が textobj
      • inner word という「選択範囲」

operator

  • d: delete
    • 例: diw
  • y: コピー
    • 例: yiw

textobj

  • i(, i', ...: その文字で囲まれた中
  • a(, a', ...: その文字で囲まれた部分 (囲み文字も含む)

そして沼へ (プラグイン)

  • operator, textobj を増やすプラグインが特に便利
  • operator
    • sa: 括弧などを追加
    • gc: コメントアウト・コメントアウト解除
  • textobj
    • i,: inner comma
      • thinca/vim-textobj-between
      • 例: func(a, b)ab だけ選択する
    • if + 任意の 1 文字: 任意の文字で囲まれた部分
      • sgur/vim-textobj-parameter
      • 例: |a, b|a, b を選択

もっと便利なものがある

  • 紹介しきれなかったが便利なものがたくさんあります
  • visual mode とか
  • macro とか

Vim は怖くない!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment