wan0ri Lab

Neovim操作方法チートシート

はじめに

この記事は、VSCode から Neovim へ寄せるときに迷いやすい「操作の置き換え」をまとめたチートシートです。
マウス前提の操作をキーボード中心にどう置き換えるかを主眼に、必要に応じてマウス操作も併記します。


前提(本記事の設定)

  • Leader キー: <Space>(スペース)
  • エクスプローラ: neo-tree.nvim(<C-b> トグル、<leader>e フォーカス、<leader>er カレントへ移動)
  • 検索: telescope.nvim(<C-p><leader>ff/fg/fb など)
  • ターミナル: toggleterm.nvim(<leader>tt/tv/tf
  • 補完/LSP/診断: nvim-cmp + lspconfig(gd/gr/K/<leader>rn/<leader>ca[d/]d/<leader>e
  • マルチカーソル: vim-visual-multi(Ctrl-n
  • Git: lazygit(<leader>gg)、neogit.nvim(:Neogit)、diffview.nvim(:DiffviewOpen

カーソル移動(VSCode → Neovim)

よく使う順に。まずはここを覚えると体感が一気に上がります。

  • 基本: h 左 / j 下 / k 上 / l
  • 単語単位: w 次の単語先頭 / e 単語末尾 / b 前の単語先頭(大文字版 W/E/B は記号無視で広めの単語)
  • 行頭・行末: 0 行頭 / ^ 先頭の非空白 / $ 行末
  • 画面スクロール: Ctrl-d 半ページ下 / Ctrl-u 半ページ上 / Ctrl-f 1ページ下 / Ctrl-b 1ページ上 / zz カーソル行を中央
  • 段落: { 前の空行ブロック / } 次の空行ブロック
  • 行ジャンプ: gg 先頭 / G 末尾 / :42 42行へ
  • 1行内検索: f{文字} 右へ移動 / F{文字} 左へ移動 / t{文字} 直前まで / ; 反復 / , 逆反復
  • 検索移動: /パターンn 次 / N
  • 戻る/進む(ジャンプリスト): Ctrl-o 戻る / Ctrl-i 進む

マウスの補助(必要なら)

  • 一時的にマウス有効: :set mouse=a(恒久化なら設定で vim.opt.mouse = "a"
  • 端末(WezTerm)で“端末ネイティブ選択”をしたい場合は Shift を押しながらドラッグ

選択と編集(VSCode のドラッグ選択 → Neovim での置き換え)

  • ビジュアルモード(選択開始): v 文字 / V 行 / Ctrl-v 矩形(端末により Ctrl-q
  • 選択端の切替: o(選択中に押すと反対側へ) / 直前の選択を再選択: gv
  • テキストオブジェクト(論理単位で選ぶ)
    • 単語: viw(内側の単語)/ vaw(単語+周辺空白)
    • 括弧/引用: vi", va", vi), va) ほか多数
    • 段落: vip(内側)/ vap(空行含む)
  • 検索語を順に選ぶ: gn(現在の検索語の次を選択)/ gN(前)
  • 変換系のよく使うもの: ciw(単語を変更), dw(単語削除), xp(文字入替), gU/gu(大文字/小文字), >/<(インデント)
  • コピー/貼り付け: y(ヤンク)/ p(貼り付け)/ "+y(システムへ)/ "+p(システムから)

マルチカーソル(vim-visual-multi)

  • カーソル下の一致を選択・次追加: Ctrl-n(反復で複数) / 終了: Esc
  • 矩形に複数カーソル: Ctrl-v → 縦に選んで I(先頭に挿入)/A(末尾に追記)

ファイル/フォルダ操作(エクスプローラ: neo-tree)

開く/移動

  • トグル: <C-b> / フォーカス: <leader>e / カレントへ: <leader>er
  • フォルダ展開/閉: Enter / Backspace

作成

  • a → 入力欄に名前を打って確定
  • ディレクトリ作成は末尾に / を付ける(例: docs/)。中間ディレクトリも作成可(例: docs/guides/)。

コピー/移動/リネーム/削除

  • コピー: c → 貼り付け先で p
  • カット(移動): x → 貼り付け先で p
  • リネーム: r
  • 削除: d
  • パスをコピー: y

プラグインを使わない作成も可

  • 新規ファイル: :edit パス:w
  • ディレクトリ: :!mkdir -p パス

検索とジャンプ(telescope + 標準)

  • ファイル: <C-p> または <leader>ff
  • 全文grep: <leader>fg
  • バッファ: <leader>fb / コマンドパレット: <leader>sp
  • 直前/次のファイルへはバッファ操作: :ls:b 番号 / :bnext / :bprevious

画面分割・ウィンドウ操作(VSCode の複数エディタ)

  • 分割: :vsplit(縦)/ :split(横)
  • 移動: Ctrl-w を押してから h/j/k/l
  • サイズ調整: Ctrl-w >/<(幅)/ +/-(高さ)/ =(均等)
  • 閉じる: :q(ウィンドウ)/ :bd(バッファ)

タブ(VSCode のタブ)

  • 新規タブ: :tabnew / 次/前: gt / gT / タブ一覧: :tabs

ターミナル(ToggleTerm)と「横2分割」

基本

  • 下パネル: <leader>tt
  • 右パネル(縦分割): <leader>tv
  • フロート: <leader>tf
  • Lazygit: <leader>gg
  • ターミナル内からノーマルへ: Esc または jk

横2分割で並べる(縦に2つ)

  • 方法1(ToggleTerm だけで)

    1. <leader>tv で縦ターミナルを開く
    2. もう一度 <leader>tv(必要に応じて :ToggleTerm 2 direction=vertical のように番号指定)
  • 方法2(標準の分割 + 端末)

    1. :vsplit で画面を縦に分割
    2. 片方で :terminal(もしくは <leader>tv)、もう片方でも :terminal

ヒント

  • Ctrl-w h/l で左右のターミナルを行き来
  • 分割幅は Ctrl-w > / < で微調整

LSP / 診断(補完や定義ジャンプ)

  • 定義へ: gd / 参照: gr / ホバー: K
  • リネーム: <leader>rn / コードアクション: <leader>ca
  • 診断ナビゲーション: [d / ]d / 行の詳細: <leader>e
  • フォーマット: <leader>f(保存時は自動整形が有効)

Git(内蔵 & Lazygit)

  • Lazygit: <leader>gg(フロート)
  • Neogit UI: :Neogit
  • Diffview: :DiffviewOpen / :DiffviewClose
  • 行単位の差分(gitsigns)はサインカラムに表示(ステージ/リセット等はコマンド/マップで)

LazyGit: よく使うパネル/基本

  • パネル移動: Tab / Shift-Tab、ヘルプ: ?
  • 取得/反映: f(Fetch), p(Pull), P(Push)
  • どのパネルでも Enter(詳細へ)、Esc(戻る)

新規ブランチの作成 → 切り替え(Checkout)

  1. <leader>gg で LazyGit を開く。
  2. Tab で「Local branches」パネルへ。
  3. n(New branch)→ ブランチ名を入力して Enter
  4. そのまま作成したブランチを選択し、Space(Checkout)。

CLI 代替: git checkout -b <branch>

コミット → プッシュ

  1. Tab で「Status」パネルへ。
  2. 変更ファイルを選択して Space でステージ(すべてなら a)。
  3. c(Commit)→ メッセージ入力 → Enter
  4. P(Push)でリモートへ送信。

CLI 代替: git add -A && git commit -m "<msg>" && git push -u origin <branch>

プッシュ後の Pull Request 発行

  1. Push 直後、コマンドログに「Create a pull request…」の URL が表示される。
  2. o(Open in browser)で PR 作成画面を開き、タイトル/説明を確認して作成。

CLI 代替: gh pr create -f -B main -H <branch>

マージ後の main 切替と Pull(最新化)

  1. 「Local branches」で main を選択 → Space(Checkout)。
  2. PR がマージ済みであれば、p(Pull)で最新を取得。
  3. 必要に応じて P(Push)で origin/main へ反映。

CLI 代替: git checkout main && git pull --ff-only origin main

実技で使える補助コマンド(LazyGit)

  • ブランチを current にマージ: 「Local branches」で対象を選択 → m(Merge into current)
  • スカッシュマージ: m 実行時のオプションで squash を選択(環境設定により表記差あり)
  • ブランチ削除: 「Local branches」で対象 → d(ローカル削除)、D(リモート削除)
  • スタッシュ: 「Status」で S(Stash)→ 適用は「Stash」パネルで Enter
  • チェリーピック: 「Commits」パネルで対象コミット選択 → y(Cherry-pick)
  • 差分閲覧: 任意ファイル/コミットで Enter(詳細diff)/v(左右分割 diff)

※ キーバインドは LazyGit のバージョンや設定で差異があります。いつでも ? で現在のバインドを確認できます。


プラグイン別 実技チートシート(本端末設定)

Telescope(ファジー検索)

  • ファイル: <C-p> または <leader>ff
  • すべて(隠し/無視含む): <leader>fa
  • 全文検索: <leader>fg
  • バッファ一覧: <leader>fb
  • コマンドパレット: <leader>sp

Neo-tree(ファイルツリー)

  • トグル: <C-b>
  • 現在ファイルへジャンプ(コマンド): :Neotree reveal
  • ツリーへフォーカス(コマンド): :Neotree focus
  • 設定: カレント追従/隠し表示/Watcher 有効(follow_current_file, hide_dotfiles=false

ToggleTerm(内蔵ターミナル)

  • 下パネル: <leader>tt / 縦: <leader>tv / フロート: <leader>tf
  • 端末内から通常モードへ: Esc または jk

Gitsigns(差分ハイライト)

  • ハンク表示: :Gitsigns preview_hunk
  • ステージ/リセット(現在ハンク): :Gitsigns stage_hunk / :Gitsigns reset_hunk
  • 行ブレーム: :Gitsigns blame_line
  • 現在行ブレームの常時表示切替: :Gitsigns toggle_current_line_blame

Git 補助

  • インライン blame トグル(blamer.nvim): <leader>gB
  • コミット履歴ポップアップ(git-messenger): <leader>gm
  • Diff UI(diffview): :DiffviewOpen / :DiffviewClose

Trouble(診断/リスト)

  • トグル: <leader>xx

Treesj(配列/引数の折り畳み⇄展開)

  • トグル: <leader>tj

コメント・囲み

  • コメント(vim-commentary): gcc(行), ビジュアル+gc(選択)
  • 囲み編集(nvim-surround): ys{motion}{char} 追加 / cs{from}{to} 変更 / ds{char} 削除(例: ysiw", cs"', ds"

Markdown

  • Glow プレビュー: <leader>mg
  • ブラウザプレビュー: <leader>mp
  • Deno があれば高速プレビュー(peek.nvim): <leader>mP 開く / <leader>mX 閉じる

翻訳(vim-translator)

  • カーソル語を翻訳: <leader>tr
  • 結果で置換: <leader>tR

バッファ管理(barbar.nvim)

  • 次/前バッファ: <leader>bn / <leader>bp
  • バッファを閉じる: <leader>bd
  • 直接ジャンプ: <leader>1 / <leader>2 …(設定済みは 1〜2)

ナビゲーション補助

  • j/k の加速(accelerated-jk): j / k を押し続けると加速
  • 検索レンズ(nvim-hlslens): /検索n/N で位置ラベル表示
  • tmux 間移動(vim-tmux-navigator): Ctrl-h/j/k/l

テーマ(Tokyonight/Cobalt2)

  • Tokyonight スタイル切替: <leader>un(night)/<leader>us(storm)/<leader>um(moon)
  • 透明度/イタリック切替: <leader>ut / <leader>ui
  • Cobalt2 に切替: <leader>uc

Markdown 執筆

  • 端末内プレビュー(Glow): <leader>mg(終了 q
  • ブラウザプレビュー(markdown-preview): <leader>mp(トグル)

置換・検索テクニック(VSCode の置換相当)

  • 現バッファ一括置換: :%s/old/new/gcc は確認付き)
  • 選択範囲だけ置換: 先にビジュアル選択 → :s/old/new/g
  • 過去の検索語を順に編集: /語gn で範囲選択 → 直接タイプで置換 → gn で次へ

クリップボード(OS との連携)

  • その場コピー: y、システムへは "+y(貼り付けは "+p
  • 恒久的に OS クリップボードを既定にしたい場合は vim.opt.clipboard = "unnamedplus" を設定(必要なら)

マウス操作を使うかの判断基準

  • 細かなドラッグ編集が中心 → 一時的に :set mouse=a。端末の選択は Shift+ドラッグ。
  • 反復作業で速度優先 → キーボード中心(テキストオブジェクト/ビジュアル/マルチカーソル)へ移行。

よくあるつまずきと対処

  • 「vim に波線」→ LSP 診断。neodev + .luarc.jsonLua.diagnostics.globals=["vim"])で解消済み。
  • Glow が動かない → brew install glow と PATH を Neovim 起動時に補強(本環境は自動補強済み)。
  • markdown-preview が開かない → Markdown のファイルタイプ上で実行。初回は :Lazy build markdown-preview.nvim
  • 透過で読みにくい → 既定は不透明。必要時のみ <leader>uT で透過に切替。

ミニ・クイックリファレンス

  • エクスプローラ: <C-b> / <leader>e / <leader>er、作成 a、コピー c、移動 x、貼付 p、リネーム r、削除 d
  • 検索: <C-p>(ファイル), <leader>fg(全文), <leader>fb(バッファ), <leader>sp(コマンド)
  • 分割: :vsplit / :split、移動 Ctrl-w h/j/k/l、閉 :q、均等 Ctrl-w =
  • ターミナル: <leader>tt / <leader>tv / <leader>tf、横2分割は <leader>tv を2回
  • LSP: gd/gr/K/<leader>rn/<leader>ca、診断 [d/]d/<leader>e
  • Git: <leader>gg:Neogit:DiffviewOpen
  • Markdown: <leader>mg<leader>mp

おわりに

細かな運用上の癖や VSCode からの移行で戸惑う箇所があれば、追記していきます。