nakashiiiの自由帳

自由に書きます

neovimを導入した備忘録

neovimの導入にかなり手こずったので、次回思い出すためのメモ。
プラグイン追加したら、追記していくかも。

  • OS:macOS Big Sur 11.6.8
  • ターミナル:iTerm2
  • 対象言語:C++

インストールしたもの

neovim

GitHub - neovim/neovim: Vim-fork focused on extensibility and usability brew install した

現状のinit.vimはこんな感じ

"プラグイン
packadd vim-jetpack
call jetpack#begin()
Jetpack 'tani/vim-jetpack', {'opt': 1} "bootstrap
Jetpack 'neoclide/coc.nvim', { 'branch': 'release' }
Jetpack 'EdenEast/nightfox.nvim'
Jetpack 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
call jetpack#end()

"設定
syntax enable
colorscheme nightfox

lua <<EOF
require'nvim-treesitter.configs'.setup {
  highlight = {
    enable = true,
  },
}
EOF

LLVM

LLVM を Mac にインストール - solareenlo

この記事を参考に brew install した

  • PATHを通す
  • shellを再起動

を忘れずに。(忘れていて「あれ〜動かないぞ〜」をやってました)

LLVM自体が何かはよく分かっていない。「C++に必要ななんやかんやがたくさん入ってるやつ」くらいの認識。今回はclangdというものが欲しかったので入れた

iTerm2

iTerm2 - macOS Terminal Replacement

デフォルトのターミナルだと、あとから紹介するシンタックスハイライト用のnightfoxがうまく動かなかったのでこちらをインストール。

bear

https://github.com/rizsotto/Bear

makefileからcompile_commands.jsonを生成するツール 。 bear -- makemakefileからcompile_commands.jsonを生成してくれる。
compile_commands.json はcoc.nvimを使って補完をする時に必要らしい。

Makefile

free: free.cpp
    g++ -std=c++17 -Wall -O2 free.cpp -o free

compile_commands.json

[
  {
    "arguments": [
      "/usr/local/bin/g++",
      "-c",
      "-std=c++17",
      "-Wall",
      "-O2",
      "-I",
      ".",
      "-I",
      "/作業ディレクトリのパス/ac-library",
      "-o",
      "free",
      "free.cpp"
    ],
    "directory": "/作業ディレクトリのパス",
    "file": "/作業ディレクトリのパス/free.cpp",
    "output": "/作業ディレクトリのパス/free"
  }
]

インストールしたもの(neovimプラグイン関係)

vim-jetpack(パッケージマネージャー)

GitHub - tani/vim-jetpack: The lightning-fast plugin manager, alternative to vim-plug
上記のInstallationのコマンドを実行しただけだったはず、、

パッケージマネージャーについてはこの記事を参考にした。
Vimのプラグインマネージャの種類と選び方 - Qiita

結局、自分のような初心者は動きさえすれば、なんでもよい(あとから変更できる)ので、

  • 利用者が多い
  • 簡単に使えそう

あたりで選んだ。書き方が簡単そうなvim-jetpackvim-plugの後継?)にした

プラグインをインストールする時は、以下のように Jetpack [プラグイン名] みたいな感じで init.vim に追記して、 :JetpackSync を実行する

coc.nvim

GitHub - neoclide/coc.nvim: Nodejs extension host for vim & neovim, load extensions like VSCode and host language servers. neovim用のlanguage server protocolのクライアント。そもそもlanguage server protocol(以下、LSP)は何かというと、以下の記事が詳しい。(よく分かってないので丸投げ)

language server protocolについて (前編) - Qiita

補完、整形、構文チェックなどの、コーディング支援的なやつをプロトコル化して、導入しやすくしようね。みたいな理解。
これを入れておくと、細かい設定がなくても上記のようなコーディング支援を一発でインストールできるので、自分みたいな初心者にはピッタリかも。

:CocConfig で設定ファイルをいじれる。

coc-clangd

https://github.com/clangd/coc-clangd

coc.nvimが入っていれば、 :CocInstall coc-clangd するだけ(だったはず)。上記のQuickStartに色々書いてあるが、LLVMインストール済みでPATHが通ってれば、他の作業は不要なはず。

これを入れて、makefileつくってcompile_commands.jsonをつくれば、以下のような感じで補完がきくようになってるはず

coc.nvimでC++の補完
coc.nvimでC++の補完

ただし、C++での競技プログラミングで使っている #include <bits/stdc++.h> のヘッダーがclangにはないので、その設定をする必要がある。
clang++ -xc++ -fsyntax-only -v /dev/null を打つと、clangがヘッダーファイルを探しに行く場所が分かるので、そのどこかにbitsディレクトリをつくって、 stdc++.h ヘッダーを置く。以下の記事を参考に。

clang で bits/stdc++.h を使う - Qiita

ここまでくれば、標準ライブラリの補完はすべてOK。 multisetとかで補完きいてるか確かめてみる。

nvim-treesitter

https://github.com/nvim-treesitter/nvim-treesitter

よく分かってない。詳しい説明はこちら。
日常に彩りを加える nvim-treesitter の設定術

今回は、「関数に対してシンタックスハイライトをつけたい」というモチベーションで導入。
インストールしたあと、以下を init.vim に追記。

syntax enable
colorscheme nightfox

lua <<EOF
require'nvim-treesitter.configs'.setup {
  highlight = {
    enable = true,
  },
}
EOF
~

nightfox.nvim

https://github.com/EdenEast/nightfox.nvim

デフォルトのシンタックスハイライトを変更したくて導入。
init.vimcolorscheme nightfox を追記する。こんな感じになる。

気になる

気になってるもの。追記したりするかも。

  • tmux

参考