はじめに
この記事は、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-f1ページ下 /Ctrl-b1ページ上 /zzカーソル行を中央 - 段落:
{前の空行ブロック /}次の空行ブロック - 行ジャンプ:
gg先頭 /G末尾 /:4242行へ - 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 だけで)
<leader>tvで縦ターミナルを開く- もう一度
<leader>tv(必要に応じて:ToggleTerm 2 direction=verticalのように番号指定)
方法2(標準の分割 + 端末)
:vsplitで画面を縦に分割- 片方で
: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)
<leader>ggで LazyGit を開く。Tabで「Local branches」パネルへ。n(New branch)→ ブランチ名を入力してEnter。- そのまま作成したブランチを選択し、
Space(Checkout)。
CLI 代替: git checkout -b <branch>
コミット → プッシュ
Tabで「Status」パネルへ。- 変更ファイルを選択して
Spaceでステージ(すべてならa)。 c(Commit)→ メッセージ入力 →Enter。P(Push)でリモートへ送信。
CLI 代替: git add -A && git commit -m "<msg>" && git push -u origin <branch>
プッシュ後の Pull Request 発行
- Push 直後、コマンドログに「Create a pull request…」の URL が表示される。
o(Open in browser)で PR 作成画面を開き、タイトル/説明を確認して作成。
CLI 代替: gh pr create -f -B main -H <branch>
マージ後の main 切替と Pull(最新化)
- 「Local branches」で
mainを選択 →Space(Checkout)。 - PR がマージ済みであれば、
p(Pull)で最新を取得。 - 必要に応じて
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/gc(cは確認付き) - 選択範囲だけ置換: 先にビジュアル選択 →
:s/old/new/g - 過去の検索語を順に編集:
/語→gnで範囲選択 → 直接タイプで置換 →gnで次へ
クリップボード(OS との連携)
- その場コピー:
y、システムへは"+y(貼り付けは"+p) - 恒久的に OS クリップボードを既定にしたい場合は
vim.opt.clipboard = "unnamedplus"を設定(必要なら)
マウス操作を使うかの判断基準
- 細かなドラッグ編集が中心 → 一時的に
:set mouse=a。端末の選択は Shift+ドラッグ。 - 反復作業で速度優先 → キーボード中心(テキストオブジェクト/ビジュアル/マルチカーソル)へ移行。
よくあるつまずきと対処
- 「vim に波線」→ LSP 診断。neodev +
.luarc.json(Lua.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 からの移行で戸惑う箇所があれば、追記していきます。