17
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VSCodeでvimrcの設定を読み込みたい

Last updated at Posted at 2020-06-25

動機

VSCode の豊富な拡張機能はさまざまな種類の開発を便利にします。
私は普段主に Vim を使ってコーディングをしていましたが、 VSCode を使い始めることを決意しました(2020年執筆当時)。

それにあたり、 VSCode で Vim 風操作を実現することに加え、自分用にカスタマイズした vimrc の設定をインポートすることをこの記事の目標とします。

インストール

軽く調べてみると、 VSCode には Vim 風の操作をエミュレートする拡張機能があるみたいです。

拡張機能のところからVimと検索すれば一番上に出てきますね。インストールします。

Screen Shot 2020-06-25 at 16.06.34.png

そして command+N を押して空ファイルを作ります。

Screen Shot 2020-06-25 at 16.05.44.png

この四角のカーソルを見ると、 Vim のノーマルモードに入っていることが感じられます。
この状態でも、基本的な Vim キーバインドが利用できます。
特にカスタムをしていない Vimmer であれば、これだけでも十分使いやすいでしょう。 1

カスタムしたい

ここからは、この VSCodeVim 拡張機能に自分用の vimrc を適用することを目指します。

特に、私は Dvorak 配列というキーボード配列を使っています。
Vim の代名詞である hjkl キーでの移動は一般的な QWERTY 配列に適したものです。
しかし Dvorak 配列では dhtn がその位置にあたります。
この差を吸収するために、 vimrc によるオリジナルの設定が必要不可欠なのです。

image.png
Dvorak キーボード配列。 uh がそれぞれ左手・右手の人差し指にあたり、したがって QWERTY 配列でいうところの hjkl には dhtn が対応します。

settings.jsonというのがあるらしい

VSCodeに関する設定は、設定ファイルのsettings.jsonに書き込むらしいです。
拡張機能ごとの設定もこれに書き込むようですね。

また、 VSCodeVim の公式ページを参照すると、この settings.json を変更することでカスタムのキーマップを実現できそうな気がしてきます。

一部抜粋すると、以下のようになりそうです。

{
  // ...,
  // ノーマルモードにおける`h'を`j'に割り当て
  "vim.normalModeKeyBindings": {
    "before": ["h"],
    "after": ["j"]
  }, 
  // ノーマルモードにおける`t'を`k'に割り当て
  "vim.normalModeKeyBindings": {
    "before": ["t"],
    "after": ["k"]
  }, 
  // ...
}

大変まだるっこしいことがわかります。

vimrcが使いたい

既存の vimrc から上記の JSON 形式に変換するのは大変面倒です。
どうにか vimrc を直接読み込ませる方法はないでしょうか。

Google で検索してみると、 VSCode に移行しようとした Vimmer 先人各位が有益な記事を発信してくださっています。

こちらの記事を参考にさせていただきました。

公式ページの記述はこちらです。

なお、公式ページには以下のような文章があります。2

vimrc support is currently experimental. Only remaps are supported, and you may experience bugs. Please report them !

訳すとこんな感じでしょうか。

現在、vimrcのサポートは実験的なものです。リマッピングのみ使用でき、また利用に際してバグに遭遇した場合は 報告してください

OSS ですから、バグに遭遇したら積極的に報告しましょう。

読み込む

具体的な設定方法として、公式ページには以下のように書いてあります。

Set vim.vimrc.enable to true and set vim.vimrc.path appropriately.

つまり、さきほど説明した settings.json

{
  // ...,
  "vim.vimrc.enable": true,
  "vim.vimrc.path": "/path/to/.vimrc"
}

のように追記すればいいらしいです。
"/path/to/.vimrc" は各自お好みの .vimrc ファイルに設定しましょう。
特に変更していなければ、基本的には ~/.vimrc だと思われます。私も ~/.vimrc を設定しました。

この設定は、文字通り

  • vimrc の使用を有効にして、
  • vimrc へのパスを設定する

内容ですね。
これで、皆さんが育ててきた vim 設定との快適なGUI生活が始まることでしょう。

読み込まれない

※ ここからは半分筆者の環境特有の問題です。

上記のように settings.json を設定したものの、キー設定が読み込まれません。
具体的には、私のキーボードで h,j,k,l に対応する d,h,t,n を押しても、カーソルが想定通りに移動してくれません。
vimrcで設定されているはずですが……。
原因を探ってみました。

公式ページの README には、先ほど設定した以上の記述はありません。
また、参考にさせていただいたサイトとも、これと言った違いはないように見えます。

原因を切り分けるために、 : でコマンドモードに入り、手動で ~/.vimrc/ を読み込んでみましょう。

:source ~/.vimrc
Command :so[urce] is not ye implemented (PRs are welcome!)

なんと source コマンドには対応していない様子です。

私は ~/.vimrc 単体が肥大化しすぎるのを避けるため、 source コマンドを使って別ファイルの Vim スクリプトファイルを読み込むよう設定していました。
その先でのキー設定、プラグイン設定などを読み込んでいるわけです。
したがって ~/.vimrc そのものにはキーマッピング設定は存在せず、キーマッピング設定には個別のファイル (~/.vim/rc/keymaps.vim) を用意していました。

このため、 ~/.vimrc を読み込んだところでキー設定はデフォルトのままなのでした。

読み込む (2)

source コマンドが使えないのであれば、settings.jsonで読み込む Vim スクリプトをキーマッピング専用のファイルにしてしまいます。
どうせキーリマッピングしか使えないのですから、大きな問題はないはずです。
結果、 settings.json の設定は以下のようになりました。

{
  // ...,
  "vim.vimrc.enable": true,
  "vim.vimrc.path": "~/.vim/rc/keymaps.vim"
}

そしてVSCodeのファイル編集画面に戻ると、

vscodevim.gif

意図した通りに編集操作ができています。
いい感じですね。これで当初の目的が達成できました。

まとめ

  • VSCodeでもVimの機能が使える
  • 実験的ではあるが、一部 vimrc 設定の読み込みも行える

まだ少しだけしか触れていませんが、結構快適です。
インストール及び設定も特に難しい点はありませんでしたね。

ここまで読んでいただきありがとうございました。
どなたかの参考になれば嬉しいです。

  1. そんな人がいればですが

  2. (2025/04 追記)記事を最初に執筆した 2020 年から変わらず experimental なようです。 remapping 以外の機能はあんまり需要ないんでしょうか?

17
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?