🙆‍♀️

VSCode/CusorのVim拡張で キー長押しでカーソル移動しない問題の対処法

に公開

VSCodeの場合

ターミナルで以下の2つの設定をするだけで解決します。

defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false
defaults write com.microsoft.VSCodeInsiders ApplePressAndHoldEnabled -bool false

Cursorの場合

以下のコマンドを利用してCursorのドメインを調べてください。

osascript -e 'id of app "Cursor.app"'

ドメインを確認後以下のコマンドを実行すると解決します。

defaults write {上記で確認したドメイン} ApplePressAndHoldEnabled -bool false

原因と解決策の理解

この問題の原因はmacに備わっている「Press and Hold」の機能が関係しています。
「Press and Hold」とはキーを長押しすると特殊文字を入力できるメニューが表示される機能です。
たとえば「a」キーを長押しすると、「à」「á」「â」といった文字を選択できる小さなメニューが出てきます。

しかし、Vimを使う人にとって、この機能は邪魔になってしまいます。Vimでは「h」「j」「k」「l」キーを使ってカーソルを移動させますが、これらのキーを長押しして素早く移動したいとき、Press and Hold機能が働いてしまうと、期待するような連続移動ができません。

これの問題を解決するのが先ほどのコマンドです。

defaults writeというのは、Macのアプリケーション設定を変更するためのコマンドです。通常、アプリの設定は設定画面で変更しますが、このコマンドを使えば、より細かい設定まで直接変更できます。

com.microsoft.VSCodecom.microsoft.VSCodeInsidersは、それぞれ通常版のVSCodeと開発者向けのInsiders版VSCodeを指しています。この識別子を使うことで、そのアプリケーションだけに適用される設定を変更できます。

ApplePressAndHoldEnabled -bool falseの部分が実際の設定内容です。これは「ApplePressAndHoldEnabled(Press and Hold機能を有効にする)」という設定を「false(無効)」に変更するという意味です。

つまり、このコマンド全体の意味は「VSCodeアプリケーションに対してのみ、Press and Hold機能を無効にしてください」ということになります。

このコマンドは、VSCode以外のアプリケーションには影響を与えないというメリットがあります。
VSCode内でのみ、キーの長押しが期待通りのキーリピートとして動作するようになります。

Discussion