動機
私は普段の開発ではVimしか使わないのですが、現代の風潮的にVSCodeも一応使えたほうがいいのかな〜という気分になりました。
しかし、当然指はVimを覚えてしまっています。軽いテキスト編集はともかく、やはりがっつりコーディングするにはVim(それもゴリゴリにオリジナル設定の)を使いたいです。
この記事は、そんな私が普段使いのVimのようにVSCodeを使えるようにしようとした記録です。
インストール
そんなわけで軽く調べてみると、VSCodeにはVimをエミュレートする拡張機能があるみたいです。これは…!ということでありがたく使わせていただきましょう。
拡張機能のところからVimと検索すれば一番上に出てきますね。インストールします。
そしてcommand+Nを押して空ファイルを作ります。
おお…!
この四角のカーソルを見ると、Vimのノーマルモードに入っていることが感じられます。
ここまで簡単に導入できるとは、さすがVSCode。流行りの力はすごいですね。そして、偉大なるVimmer先人各位のありがたみを感じます。
この状態でも、基本的なVimキーバインドが利用できます。高い要求がなければ、これだけでも十分使いやすいでしょう。
カスタムしたい
ところで、冒頭に
当然指はVimを覚えてしまっています
Vim(それもゴリゴリにオリジナル設定の)を使いたいです
と書いてあります。
はい、結構がっつりカスタムがなされています。
というのも、私は一般的なQWERTY配列ではなく、Dvorak配列というキーボードレイアウトを使っています。そのため、QWERTYでのh,j,k,lに対応するキーはまるで違います(実際にはそれぞれd,h.t.nとなっています)。そのマッピングのためにオリジナルの設定が必要不可欠なわけです。
settings.jsonというのがあるらしい
VSCodeに関する設定は、設定ファイルのsettings.json
に書き込むらしいです。
https://code.visualstudio.com/docs/getstarted/settings
拡張機能ごとの設定もこれに書き込むようですね。
GitHub - VSCodeVim/Vim: Vim for Visual Studio Code
vscodevimの公式ページを参照すると、このsettings.json
を変更することでカスタムのキーマップを実現できそうな気がしてきます。一部抜粋すると、以下のようになりそうです。
{
// ...,
// ノーマルモードにおける`h'を`j'に割り当て
"vim.normalModeKeyBindings": {
"before": ["h"],
"after": ["j"]
},
// ノーマルモードにおける`t'を`k'に割り当て
"vim.normalModeKeyBindings": {
"before": ["t"],
"after": ["k"]
},
// ...
}
え?
vimrcが使いたい
vimrcを使えないVimはVimではありません(暴論)
そもそも今あるvimrcの設定を手でJSONに変換するのは面倒ですし、vimrcの設定を変更したときに毎回JSONを編集するのも癪です。なんとかして既存のvimrcを使えないでしょうか。
Googleで検索してみると、やはりというかなんというか、VSCodeに移行しようとした偉大なるVimmer先人各位が有益な記事を発信してくださっています。
VSCode の Vim 拡張機能で .vimrc を使う方法 - PCの歯車
こちらの記事を参考にさせていただきました。
GitHub - VSCodeVim/Vim: Vim for Visual Studio Code
公式ページの記述はこちらです。
どうやら、追加の拡張機能を入れずともvscodevim単体で設定可能なようです。
なお、公式ページには以下のような文章があります。
vimrc support is currently experimental. Only remaps are supported, and you may experience bugs. Please report them !
訳すとこんな感じでしょうか。
現在、vimrcのサポートは実験的なものです。リマッピングのみ使用でき、また利用に際してバグに遭遇した場合は報告してください!
今回はとりあえず使えるようになればいいので、リマッピングのみでも大変ありがたいです。また、我々は使わせていただく立場ですから、書いてある通り、バグに遭遇したら積極的に報告しましょう。
読み込む
vimrcを読み込むための実際の設定方法ですが、公式ページには以下のように書いてあります。
Set
vim.vimrc.enable
totrue
and setvim.vimrc.path
appropriately.
要するに、さきほど説明したsettings.json
に
{
// ...,
"vim.vimrc.enable": true,
"vim.vimrc.path": "/path/to/.vimrc"
}
のように追記すればいいらしいです。"/path/to/.vimrc"
は各自お好みの.vimrcに設定しましょう。特に変更していなければ、基本的には~/.vimrc
だと思われます。私も~/.vimrc
を設定しました。
この設定は、文字通り
- vimrcの使用を有効にして、
- vimrcへのパスを設定する
内容ですね。
これで、ぼくのかんがえたさいきょう[要出典]のvimrcとの、快適なGUI生活が始まることでしょう。
読み込まれない
※ ここからは、私の環境特有の問題です。
キー設定が読み込まれません。
私のキーボードでh,j,k,lに対応するd,h,t,nを押しても、キーが思ったように移動しません。vimrcで設定されているはずですが…。
これではさいきょうではありません。あれー?と思いながら原因を探ってみました。
公式ページのREADMEには、先ほど設定した以上の記述はありません。参考にさせていただいたサイトとも、これと言った違いはないように見えます。
とりあえずvscodevimが有効になったVSCodeの画面で:
を打ち込み、コマンドモードに入ります。手動で~/.vimrc/
を読み込んでみましょう。
:source ~/.vimrc
E492: Not an editor command: source ~/.vimrc
おっと?sourceコマンドには対応していない様子です。ここで、問題に気づきます。
私の環境では、~/.vimrc
単体が肥大化しすぎるのを避けるため、source
コマンドを使って外部Vimスクリプトファイルのキー設定、プラグイン設定などを読み込んでいます。
つまり、~/.vimrc
そのものにはキーマッピング設定は存在せず、~/.vimrc
からsource
コマンドで設定ファイル(~/.vim/rc/keymaps.vim
)を読み込まなければキーマッピングはデフォルトのままです。つらいですね。
読み込む(2)
source
コマンドが使えないのであれば、settings.json
で読み込むVimスクリプトをキーマッピング専用のファイルにしてしまいましょう。どうせキーリマッピングしか使えないのですから、大きな問題はありません。
結果、settings.json
の設定は以下のようになりました。
{
// ...,
"vim.vimrc.enable": true,
"vim.vimrc.path": "~/.vim/rc/keymaps.vim"
}
そしてVSCodeのファイル編集画面に戻ると、
おお、意図した通りにバキバキ動きます…!いい感じですね。これで、当初の目的が達成できました。
まとめ
- VSCodeでもVimの機能が使える
- 実験的ではあるが、一部vimrc設定の読み込みも行える
- たのしい
まだ少しだけしか触れていませんが、結構快適です。インストール及び設定も特に難しい点はありませんでしたね。
VSCodeユーザを白い目で見ているVim原理主義者各位も、一度お試しあれ。
以上です、最後まで読んでいただきありがとうございました。どなたかの参考になれば幸いです。
それでは、よいVim / VSCodeライフを!