Neovimを使ったモダンな開発環境を構築した話
前回に引き続き、開発環境の見直しをしていて、今回は以前から気になっていたNeovimを導入してみました。
導入するプラグインなどめちゃくちゃ悩んだので結構時間はかかってしまったのですが、結果結構使いやすいものができて感動しています。
まだまだカスタマイズしきれていない部分もありますが、最終的にはこんな見た目になっています。
この環境を構築する上で導入したプラグインや詰まったことなどご共有できればと思います。
(ターミナル(Alacritty),zsh,tmuxのtrue color対応は前回と前々回で完了した前提です。)
はじめに
(本題と全く関係ないので、読み飛ばしていただいて大丈夫です)
もともとメインのエディタとしてVimを使っていたのですが、ここ一年半くらいはVSCodeをメインで利用しています。
なのですが、キーバインドはVimのものを使いたいので、VSCodeVimという拡張機能を利用していました。
この拡張機能便利で愛用していたのですが、ときどきキーバインドが効かなくなることがあったり、やはりどうしてもマウスを使わなきゃいけない場面がでてきたり(カスタマイズすればできるのかもですが、そこに労力を割くほどの熱意が持てない...)して、Vimに戻したいなぁとはちょこちょこ思っていました。
という背景もあり、年末のこのタイミングで試してみるかってことでやってみました。
Neovimのinstall
本家にそってhomebrewでinstallしました。
正常にinstallされたのが確認できたあと、Neovimをvim
コマンドで起動できるように.zshrcにaliasを追加しました。
alias vim="nvim"
Plugin manager
Plugin managerはdein.vimを採用しました。packerと悩んだのですが、luaに全く触れたことがなかったので、ちょっとハードル高いなと感じたのと、もともとVimではdein.vimを利用していたのもあったのでこちらにしました。
なれてきたらpackerも試してみたいです。
install
dein.vim自体のinstallは公式 の通り、.config/nvim/init.vim
に下のコードをコピペして完了でした。(2022/12執筆時点での話ですので、導入される際は公式を確認されることをおすすめします)
let $CACHE = expand('~/.cache')
if !isdirectory($CACHE)
call mkdir($CACHE, 'p')
endif
if &runtimepath !~# '/dein.vim'
let s:dein_dir = fnamemodify('dein.vim', ':p')
if !isdirectory(s:dein_dir)
let s:dein_dir = $CACHE . '/dein/repos/github.com/Shougo/dein.vim'
if !isdirectory(s:dein_dir)
execute '!git clone https://github.com/Shougo/dein.vim' s:dein_dir
endif
endif
execute 'set runtimepath^=' . substitute(
\ fnamemodify(s:dein_dir, ':p') , '[/\\]$', '', '')
endif
Plugin
あまり数は多くないのですが、導入したプラグインをご紹介します。
coc.nvim
vimをまるでVSCodeのようにしてくれる拡張機能です。
installすると補完、定義ジャンプ、エラー表示などいろいろ使えるようになります。
installはdein.vimの場合、init.vim
に下の行を追記します。
call dein#add('neoclide/coc.nvim', {'merged': 0, 'rev': 'release'})
また、:CocInstall
のコマンドもしくはconfigを直接編集して、使いたい拡張機能やLSPをinstallする必要があります。
例:
:CocInstall coc-json coc-tsserver
keymappingなどの設定は一旦READMEのものをそのまま使っています。(後でみなおしたい)
高機能なので、ゆっくり使い倒して行きたいです。
nightfox
めっちゃ良い感じのcolor schemaです。特に設定はいじっていないです。
installはdein.vimの場合、init.vim
に下記を追記します。
call dein#add('EdenEast/nightfox.nvim')
...
colorscheme firefox
詰まったこと
nightfoxと関係があったかはわかりませんが、僕の環境ではここで少しつまりました。
何度Neovimを立ち上げ直してもcolorschemeが反映されず、cannot find colorscheme
というエラー出てしまっていました。
~/.cache/dein/repos/github.com
を確認しに行くとリポジトリは存在しているので、cacheか?と思っていたら、こちらの記事を見つけました。
vimでもdeinを使っていたので、そことバッティングしたのか...?など思いつつ、原因は結局わからずなのですが、記事の通り
:call dein#recache_runtimepath()
を実行して解決しました。
nvim-tree
つづいてはnvim-treeというファイラーです。
vimのときはNERDTreeというファイラーを使っていたのですが、名前もちかくて、今の所操作感もNERDTreeに似ている?と思っています。(NERDTreeとnvim-tree以外使ったことないのですがw)
Fernもちょっと気になるからあとで試してみようかなと思っています。
installはinit.vimに下記を追記します。
call dein#add('nvim-tree/nvim-tree.lua')
call dein#add('nvim-tree/nvim-wev-devicons')
nvim-web-deviconsはファイラーのアイコンなどに使われているようです。
余談ですが、僕はCtrl-Nでファイラーがトグルするように設定しました。
nmap <C-n> :NvimTreeToggle <CR>
lualine
お次はステータスラインです。
Themeも多く用意されており、見た目もかなりカスタマイズできそうです。(僕はデフォルトのまま使っています。)
installはinit.vimに下記を追記です。
call dein#add('nvim-lualine/lualine.nvim')
telescope
fuzzy finderです。特に設定はしていませんが、デフォルトでも普通に使えています。
call dein#add('nvim-telescope/telescope.nvim', {'rev': '0.1.x'})
Rust
最近はRustのお勉強をしているので、それ用の設定もしました。
まず、rust.vimをinstallします。
call dein#add('rust-lang/rust.vim')
つづいて、rust-analyzerをhomebrew経由でinstallします。
brew install rust-analyzer
最後にcoc-rust-analyzer をinstallします。
:CocInstall coc-rust-analyzer
これでRustを書くと、rust-analyzerが動いて補完や型の表示などができるようになりました🙌
おわりに
なんかやりきった風に記事を書いてしまっているのですが、Key mappingとかまだ全然納得いっていなくて、これから少しずつ育てていきたいなと思います。
正直昨日環境構築が終わって、上にかいたpluginたちもまだ全然使いこなせていない&理解できていないいない部分も多いので、これからガシガシ使い倒していきたいです。
この記事がNeovim導入してみたい!という方の助けになれば幸いです。
参考:
Discussion