CursorでVimモードを使う方法、ちゃんと知ってる?
室谷今回はCursorでVimモードを使う話をしましょう。.AI(ドットエーアイ)コミュニティでも「CursorでVim使えるんですか?」って質問、定期的に出るんですよね・・・
テキトー教師ですよね。講座でも「Cursorインストールしたらなぜかキーが効かない」って相談が結構あって、よく聞くと初期設定でVimモードを選んでしまってたパターンなんですよ。
逆に「Vimmerだけど使えるの?」っていう質問も多いです。
逆に「Vimmerだけど使えるの?」っていう質問も多いです。
室谷CursorはVS Codeベースなので、VSCodeVimという拡張機能がそのまま動きます。これがめちゃくちゃ優秀で、Vimのキーバインドがほぼ完全に再現されるんですよね。
テキトー教師しかもCursorのAI機能とVimの操作が両立するので、「AIでコード生成→Vimで素早く編集」という流れが作れるんです。ここが他のVimプラグインとの大きな違いですね。
室谷MYUUUのエンジニアでもVimmer派が何人かいて、みんなCursorに移行しても手放せないって言ってます。じゃあ具体的に設定方法から見ていきましょう。
CursorでVimモードを有効化する手順

室谷まず基本中の基本、CursorでVimモードを有効にする方法です。やることは2つだけですね。
テキトー教師1つ目は拡張機能のインストールです。Cursorの拡張機能タブ(Cmd+Shift+X)を開いて「Vim」で検索すると、vscodevim.vimという拡張機能が出てきます。
これをインストールするだけです。
これをインストールするだけです。
室谷ちなみにCursorの初回セットアップ時に「キーバインドの選択」画面が出るんですが、ここでVimを選ぶと自動でインストールされます。意図せずVimモードになってしまう人は、ここで選んでしまってるパターンですね・・・
テキトー教師そうそう。コミュニティのメンバーさんで「カーソルキーが効かない!」って焦ってた方がいて、原因がこれでした(笑)
室谷2つ目として、拡張機能をインストールしたら再起動するのがおすすめです。稀にキーバインドが反映されないことがあるので。
テキトー教師逆にVimモードを無効化したい場合は、コマンドパレット(Cmd+Shift+P)から「Cursor Vim: Remove Vim Mode」を実行するか、拡張機能を無効化すれば元に戻ります。
室谷ここまでが基本の有効化・無効化です。ちなみにVSCodeVimのplugin(拡張機能)はインストール数が860万を超えていて、VS Code系エディタのVim拡張としては圧倒的に定番ですね。
インストール時にVimモードを選んでしまった場合
テキトー教師さっきも触れましたが、Cursorの初期セットアップで誤ってVimを選んでしまうケースが本当に多いんです。
室谷対処法はシンプルで、拡張機能タブからVimを探してアンインストールか無効化するだけです。もしくはコマンドパレットで「Cursor Vim: Remove Vim Mode」を実行する。
テキトー教師初心者の方には「拡張機能タブで右クリック→無効にする」が一番わかりやすいと思います。アンインストールしなくても無効化だけで通常の入力モードに戻りますから。
Macでのキーリピート設定(Vim key repeat・連続入力の必須設定)
室谷ここ、Macユーザーは絶対にやらないといけない設定です。Vimモードを入れたのにキーを長押ししても連続入力されない問題。
テキトー教師これはmacOSの仕様で、長押しすると文字候補のポップアップが出るんですよね。hjklで移動するVimにとっては致命的です。
室谷ターミナルで以下のコマンドを実行して、ログアウト→再ログインすれば解決します。
defaults write com.getcursor.Cursor ApplePressAndHoldEnabled -bool false
テキトー教師これはCursor専用のコマンドです。VS Codeの場合は
com.microsoft.VSCodeになりますが、CursorはElectronのApp IDが違うので注意が必要です。
室谷さらに、システム設定→キーボードで「キーのリピート速度」を最速に、「リピート入力認識までの時間」を最短にしておくと快適ですね。
テキトー教師この設定をしないと「jを押しっぱなしにしても1行しか下に動かない」みたいな状態になるので、Vimmerにとっては必須中の必須です。講座でVimモードを教えるときは必ず最初にやってもらってます。
室谷Windowsの場合はこの問題が起きないので、Mac特有のハマりポイントですね。
VSCodeVimの基本設定(settings.json)
室谷Vimモードを入れたら次にやるのがsettings.jsonの設定ですね。デフォルトのままでも動きますが、カスタマイズすると全然使いやすさが変わります。
テキトー教師最低限入れておきたい設定を整理するとこうなります。
{
"vim.easymotion": true,
"vim.incsearch": true,
"vim.useSystemClipboard": true,
"vim.useCtrlKeys": true,
"vim.hlsearch": true,
"vim.leader": "<space>",
"vim.handleKeys": {
"<C-a>": false,
"<C-f>": false
}
}
室谷1つずつ解説しますね。
これ、使い出すともう戻れないですよ・・・
vim.easymotionはEasyMotionプラグインの有効化で、画面内の任意の場所に2-3キーでジャンプできる機能です。これ、使い出すともう戻れないですよ・・・
テキトー教師vim.useSystemClipboardもかなり重要です。これをtrueにしないと、Vimのヤンク(コピー)がシステムのクリップボードに反映されないんですよね。「yでコピーしたのにCmd+Vで貼り付けられない」っていうのはこの設定が原因です。
室谷vim.handleKeysは特定のキーをVimではなくCursor(VS Code)側に渡す設定です。Ctrl+AやCtrl+Fは通常のエディタ操作として使いたい人も多いので、falseにしておくのがおすすめですね。
テキトー教師vim.leaderをスペースにするのは定番中の定番です。Leaderキーを起点にした独自のショートカットが組めるので、これだけで操作の幅がかなり広がりますよ。パフォーマンスを最適化する設定
室谷VSCodeVimは拡張機能の中でも結構リソースを食うんですよね。以下の設定を入れるとパフォーマンスが改善されます。
{
"extensions.experimental.affinity": {
"vscodevim.vim": 1
}
}
テキトー教師これはVSCodeVimを専用のワーカースレッドで動かす設定です。他の拡張機能と干渉しなくなるので、キー入力のレスポンスが目に見えて良くなりますね。
カスタムキーバインドの設定方法
室谷じゃあ次はキーバインドのカスタマイズに入りましょう。ここからがVimモードの本領発揮ですね。
テキトー教師VSCodeVimでは、settings.jsonでモードごとにキーバインドを定義します。insertMode、normalMode、visualMode、operatorPendingModeの4種類があって、それぞれに独自のマッピングが設定可能です。
室谷定番から紹介すると、まずインサートモードで
jjを押したらEscapeに戻る設定ですね。これはVimmerなら誰でも入れてると思います。{
"vim.insertModeKeyBindings": [
{
"before": ["j", "j"],
"after": ["<Esc>"]
}
]
}
テキトー教師ノーマルモードでLeader+wでファイル保存するのも便利ですよ。
{
"vim.normalModeKeyBindings": [
{
"before": ["<leader>", "w"],
"commands": ["workbench.action.files.save"]
}
]
}
室谷あとVimモードを使っていると「Ctrl+Nで検索ハイライトを消す」操作が欲しくなるんですよね。これもsettings.jsonで設定します。
{
"vim.normalModeKeyBindingsNonRecursive": [
{
"before": ["<C-n>"],
"commands": [":nohl"]
}
]
}
テキトー教師NonRecursiveというのがポイントです。通常のKeyBindingsだとキーの再帰的な置き換えが発生することがあるんですが、NonRecursiveを使えばそれを防げます。
jをkに、kをjに入れ替えるような場合は必ずNonRecursiveを使ってください。
jをkに、kをjに入れ替えるような場合は必ずNonRecursiveを使ってください。
室谷MYUUUのエンジニアの間で人気なのは、ビジュアルモードで
>と<でインデントを繰り返し操作できる設定ですね。{
"vim.visualModeKeyBindings": [
{
"before": [">"],
"commands": ["editor.action.indentLines"]
},
{
"before": ["<"],
"commands": ["editor.action.outdentLines"]
}
]
}
テキトー教師これは地味に便利です。標準のVimだとビジュアル選択がインデント操作後に解除されてしまうんですが、この設定なら選択が維持されたまま連続でインデントを調整できます。
Cursor固有のキーバインドとの競合を解決する
室谷CursorにはAIチャットやインラインエディットなど固有のショートカットがありますよね。これがVimのキーバインドと競合することがあります。
テキトー教師よくある競合はCtrl+KですねCtrl+Kで検索ハイライトを消す。CursorだとCtrl+Kがインラインエディットに割り当てられていて、Vimのデフォルトとぶつかります。
室谷vim.handleKeysで競合するキーをCursor側に渡すのが一番シンプルな解決策です。{
"vim.handleKeys": {
"<C-k>": false,
"<C-a>": false,
"<C-f>": false
}
}
テキトー教師Ctrl+Kをfalseにすることで、CursorのAI機能が優先されます。Vimの操作はほかのキーで代替すればいいので、AI機能を犠牲にするよりこちらの方がいいですね。
Vimのマルチカーソル操作(vim multi cursor)
室谷マルチカーソル、これはVimモードでもちゃんと使えます。しかもVimのキーバインドと組み合わせるとめちゃくちゃ効率的なんですよね。
テキトー教師VSCodeVimでは、ノーマルモードでカーソル下の単語を選択するのに
gbを使います。gbを連続で押すと同じ単語が次々と選択されていくんです。
室谷VS Codeの標準操作で言うとCmd+Dと同じ動きですが、Vimモードだとそこからすぐにcで変更したりdで削除したりできるのが強いですね。
テキトー教師複数行に一括でカーソルを追加したい場合は、ビジュアルブロックモード(Ctrl+V)が使えます。範囲を選択した後にIで一括挿入、Aで一括追加です。
室谷たとえば10行の変数名の先頭に
これだけで全行に適用されます。
const を追加したいとき。Ctrl+Vで10行選択→I→const →Esc。これだけで全行に適用されます。
テキトー教師コミュニティのメンバーさんに教えるとみんな驚くんですよ。「え、こんなことできるんですか?」って。
マウスでポチポチ選択するよりはるかに速いですからね。
マウスでポチポチ選択するよりはるかに速いですからね。
カーソル下の単語を検索・置換する
室谷Vimで地味に便利なのが
*と#ですね。カーソルの下にある単語をそのまま検索してくれる。
テキトー教師*で前方検索、#で後方検索です。変数名の上で*を押すだけで、同じ変数名が全部ハイライトされます。リファクタリングの前に「この変数どこで使われてる?」を確認するのに最適ですね。
室谷さらに
:%s/\<old\>/new/gで一括置換もVimコマンドでできますし、CursorのFind and Replaceと使い分けると便利ですね。Neovim連携でさらに強化する
室谷VSCodeVimにはNeovim統合という実験的機能があるんですよね。これをオンにすると、ExコマンドがNeovimで実行されるようになります。
テキトー教師設定はシンプルです。まずNeovimをインストールして、以下を追加します。
{
"vim.enableNeovim": true,
"vim.neovimPath": "/opt/homebrew/bin/nvim",
"vim.neovimUseConfigFile": true
}
室谷Neovimを有効にすると
:gコマンドや:normalコマンドなど、VSCodeVim単体では対応していない高度なExコマンドが使えるようになります。
テキトー教師たとえば
:g/console\.log/dで全てのconsole.logを一括削除するとか。これはデバッグ後のクリーンアップでよく使いますね。
室谷ただし実験的機能なので、たまに挙動が不安定になることがあります。問題が起きたら
vim.enableNeovimをfalseに戻せばいいだけなので、試してみる価値はありますね。
テキトー教師NeovimのconfigファイルにあるプラグインもCursor内で使いたい場合は、
vim.neovimUseConfigFileをtrueにします。ただしこれは全てのプラグインが動く保証はないので、あくまでExコマンドの拡張として考えた方がいいですよ。CursorのAI機能とVimモードを両立させるコツ

室谷ここが一番大事なセクションかもしれないですね。CursorのAI機能とVimモードをどう両立させるか。
テキトー教師まず前提として、CursorのTab補完(Copilot++)はVimモードでも問題なく動きます。インサートモードで入力していると、AIの提案がインラインで表示されてTabで確定できます。
室谷CursorのCmd+K(インラインエディット)も、先ほどの
vim.handleKeysでCtrl+KをCursor側に渡しておけば使えます。AI機能のショートカットはVimに奪わせないのがポイントですね。
テキトー教師実用的なワークフローを紹介すると、まずVimのノーマルモードでコードをナビゲーションして、編集したい箇所にジャンプしたらCmd+Kでインラインエディット。AIが生成したコードをVimのオペレータで微調整して、
この4ステップがサイクルになります。
uで即座にundo、.で繰り返し。この4ステップがサイクルになります。
室谷特に3番目がVimならではですよね。AIが生成したコードの一部だけ変更したいとき、
マウスで範囲選択→削除→入力するより圧倒的に速いです。
ciwで単語を変更したり、ct)で括弧の中身を書き換えたり。マウスで範囲選択→削除→入力するより圧倒的に速いです。
テキトー教師あとCmd+L(AIチャット)でコードの説明を求めるときも、Vimのビジュアルモードで範囲選択してからCmd+Lを押すと、選択した部分について質問できます。Vimの選択操作はマウスより正確なので、「この関数だけについて聞きたい」みたいなときに便利ですよ。
室谷うちのチームでは「Vimで高速ナビゲーション、AIで一括生成、Vimで仕上げ」っていうサイクルが定着してきてます。
ObsidianユーザーのVimmerがCursorに移行するとき
室谷最後にちょっとニッチな話ですが、ObsidianでVimモードを使っていた人がCursorに来るケースについて。
テキトー教師ObsidianにもVimモードが内蔵されていますよね。Obsidianで慣れたVimキーバインドをCursorでも再現したいという相談、講座でもたまにあります。
室谷ObsidianのVimモードはCodeMirrorベースで、CursorのVSCodeVimとは実装が違います。基本的なhjkl移動やモード切替は同じですが、カスタムキーバインドの設定方法が異なるんですよね。
テキトー教師ObsidianだとVim設定は.obsidian.vimrcファイルに書きますが、Cursorではsettings.jsonに書く。書き方が全く違うので、単純にコピーはできません。
ただし、やりたいことの対応関係さえわかれば移行はそこまで大変ではないです。
ただし、やりたいことの対応関係さえわかれば移行はそこまで大変ではないです。
室谷ObsidianのVimmerがCursorで特に戸惑うのは、Leader keyの設定方法とEasyMotionの有無ですね。Cursorの方が拡張性は高いので、移行すると「こっちの方が快適」ってなる人が多いです。
よくある質問(FAQ)
CursorでVimモードをオン・オフするショートカットはある?
室谷コマンドパレット(Cmd+Shift+P)で「toggleVim」と検索すると、Vimモードのオン・オフを切り替えられます。ショートカットキーを割り当てたい場合は、Cursorのキーボードショートカット設定で「toggleVim」にキーを設定してください。
Vimモードにすると動作が重くなる?
テキトー教師若干のオーバーヘッドはありますが、先ほど紹介した
extensions.experimental.affinityの設定を入れればほとんど気にならないレベルです。ファイルが極端に大きい場合(数万行)は多少影響が出ることがありますが、通常の開発では問題ないですよ。Vimのマクロ(qコマンド)は使える?
室谷使えます。
VS Code標準のマクロ機能とは別物ですが、Vimのマクロの方が柔軟性が高いですね。繰り返し操作が多いコード修正で威力を発揮します。
qaでレジスタaに記録開始、操作してqで記録停止、@aで再生。VS Code標準のマクロ機能とは別物ですが、Vimのマクロの方が柔軟性が高いですね。繰り返し操作が多いコード修正で威力を発揮します。
surround(囲み操作)はCursorで使える?
テキトー教師VSCodeVimにはsurround機能が組み込まれています。
vim-surroundプラグインと同じ操作感です。
cs"'でダブルクォートをシングルクォートに変更、ds"でダブルクォートを削除、ysiw"で単語をダブルクォートで囲む。vim-surroundプラグインと同じ操作感です。
まとめ
室谷今回はCursorでVimモードを活用する方法を一通り解説しました。設定からキーバインド、AI連携まで結構幅広くカバーしましたね。
テキトー教師ポイントを整理するとこうなります。
- VSCodeVim拡張機能をインストールするだけでVimモードが使える
- Macではキーリピートの設定が必須
- settings.jsonでキーバインドを自在にカスタマイズ可能
- CursorのAI機能とは
vim.handleKeysで競合を回避 - マルチカーソルやNeovim連携でさらに効率アップ
室谷VimとAIの組み合わせは、コーディング速度を次のレベルに引き上げてくれます。Vimmerの方はぜひCursorで試してみてください。
次回はさらに実践的なワークフローについて深掘りしていきますね。
次回はさらに実践的なワークフローについて深掘りしていきますね。
テキトー教師Vimに慣れていない方も、hjklの移動だけでも覚えると世界が変わりますよ。講座でも最初は「難しそう」って言ってた方が、1週間後には「もう戻れない」って言ってます(笑)
