プログラミング言語学習環境用にvscode-neovimを導入してみた

最近、TypeScriptとGoの勉強を始めた。

私は基本的にVimを使用してコーディングしている。ただしプログラミング言語を学習しているときには、補完やサジェストを使用してくれるツール(IDEなど)があると便利なので、今回は、VSCodeを併用してみることにした。

TypeScriptは型があるため、ツール側からすると補完やサジェストをより的確にしやすい。普段はMarkdownのビューアくらいにしか使っていないVSCodeだが、TypeScriptもVSCodeもMicrosoft製のもののため相性も良いのではないかと考え、VSCodeを試しに使ってみることにした。 

案の定、VSCodeによるTypeScriptの補完やsuggestはIDEのようにかなり便利なレベルだった。VSCodeだけで充分ではないかと思えるほどその出来が素晴しい。

ところで、Vimmerはどの環境を使うときでもVimキーバインドにするものだ。今までの私も当然のようにVSCodeVimというプラグインを導入してVimキーバインドにしていた。ところがこのプラグインは細かな挙動がVimと違い、暫く使っているとストレスが溜まってくる。

このストレスに我慢出来なくなりVSCodeを辞めてVimに戻りたくなってきた。そのときVSCode上でNeoVim(Vimから派生した新しいVim)を動作させることが出来るvscode-neovimというプラグインがあることを知った。このプラグインはVimキーバインドのエミュレーションではなく、裏でVim(正確にはNeoVim)が動いているという。

これは使うしかないということで早速導入。但し、NeoVimのバージョン0.5以上(現時点では、stableではなくnightlyになってしまう)が必要らしい。stableの0.4.4でやってもそれっぽく動くが、たまに変な挙動になっていて0.5にすると大丈夫だったので素直に0.5を導入するのが良さそうだ。

NeoVim用にカスタマイズした設定を有効にしておくと、VSCode上の挙動が怪しかったので、NeoVimの設定ファイルを読み込まないようにして、VSCodeから素のNeoVimを使うことにした。

これでかなりストレスが緩和されてVSCode上でコーディングが出来るようになった。1ファイルで完結するレベルのコーディングであれば

VSCodeだとファイルの切り替えや画面分割などが(私にとっては)簡単に出来ない。そんなに難しくもなく出来るのは分かるのだが自分の中で慣れ親しんだ操作がある。その操作で切り替えたいのだが、それをやるとVSCodeが意図しない動作をする。Vimではこの辺りを自分好みに細かに設定していたのだがVSCodeではどこまで手に馴染むように設定できるのか。ファイルの切り替えや画面分割はコーディング時にはよくやる操作のため考えるよりも手が先に動くレベルでやりたい。大きなアプリケーションを作成するときには、これらは必須なので開発時にはVimに戻ることになりそうな予感がしている。

とはいえ、TypeScriptに慣れるまでの間は、VSCodeの補完・サジェストがかなり有益なのでメインはVimで操作しつつ必要に応じてVSCodeで編集すれば良さそうだ。

ということで以下の設定をvimの設定に追加した。

if has("mac")
 function! ExecVSCode()
   let path = expand("%:p")
   let run = '!code ' . path
   exe run
 endfunction
 nnoremap <C-W><C-C> :<C-U>call ExecVSCode()<CR>
endif

これでVimで開いているファイルをVSCodeで開くことが出来る。やってみたら以外に便利だったので個人的にはこれで充分。

但し、Vimでもそれなりに補完してくれると嬉しい。そこでVim上でもある程度快適にTypeScriptのコーディングが出来るようにTypeScript用の設定をしておいた。具体的にはsyntax用に typescript-vim 、補完・suggest用に tsuquyomi というVimのプラグインを導入した。そして、以下のようにfiletypeの設定を.vimrcに追加した。

autocmd BufNewFile,BufRead *.ts set filetype=typescript

私はまだ補完用のプラグインは neocomplete.vim を使っている(このプラグインは既に開発終了しているので、これから導入する方は deoplete.nvim を使用した方が良いと思う)。ここまで設定しておくとVimのオムニ補完によりTypeScriptのコーディング時にある程度適切な補完が出来るようになる。VSCodeほど便利ではないが、必要に応じて使っていこうと思う。

Goに関しては殆どVimの設定を追加する必要はなかったのだが、どうやらGo界隈ではソフトタブではなくハードタブを使うのが流儀のようだ。私はVimに expandtab を設定しているため、通常は強制的にソフトタブにしているのだがGoのときはハードタブにするように以下の設定を.vimrcに入れておいた。

autocmd FileType go setlocal noexpandtab ts=4 sw=4

vscode-neovimというプラグインのおかげでVSCodeも悪くないなと感じたが、開発するとなるとやはりVimになってしまう。しばらくの間は要所要所でVimとVSCodeを行き来する感じになりそうだ。

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
1