neovim の環境を構築してみる
install だけして使っていなかった neovim の環境をそこそこ使える程度に整備してみる。
できれば普段使ってる vscode と同程度のことができるようにしたい。
coc.nvim 使えばだいたい OK な風潮は感じている。
とりあえず v0.5.0 以上じゃないと色々動かなそうな話をチラホラ見かけるので入れてみよう。
% brew unlink neovim
Unlinking /usr/local/Cellar/neovim/0.4.4_2... 32 symlinks removed.
% brew uninstall neovim
Uninstalling /usr/local/Cellar/neovim/0.4.4_2... (1,420 files, 19.6MB)
neovim HEAD-b96db38 is still installed.
To remove all versions, run:
brew uninstall --force neovim
% brew uninstall neovim --force
Uninstalling neovim... (1,456 files, 21.3MB)
OK. 寄付も考えておく。
この記事によるといまは packer.nvim が流行りなのかな?
packer.nvim で Neovim + Lua のビッグウェーブに乗る
というわけで、感謝の念を込めつつ上述の記事を丸パクリしてみる。
% git clone https://github.com/wbthomason/packer.nvim\
~/.local/share/nvim/site/pack/packer/start/packer.nvim
% nvim ~/.config/nvim/init.lua
require'plugins'
それから後で使うであろう lua/
も作成しておく。
% mkdir ~/.config/nvim/lua
nvim を起動してから :PackerInstall
で plugins が install されるはず…
E492: エディタのコマンドではありません: PackerInstall
…はい。
元々あった init.vim が優先されている気配があるので rename してから再度試してみる。
% mv ~/.config/nvim/init.vim ~/.config/nvim/init.vim.bak
再度 nvim を起動したらまたしても怒られた。
E5113: Error while calling lua chunk: /Users/malan/.config/nvim/init.lua:1: module 'plugins' not found:
no field package.preload['plugins']
no file './plugins.lua'
no file '/usr/local/Cellar/luajit-openresty/20210510/share/luajit-2.1.0-beta3/plugins.lua'
no file '/usr/local/share/lua/5.1/plugins.lua'
no file '/usr/local/share/lua/5.1/plugins/init.lua'
no file '/usr/local/Cellar/luajit-openresty/20210510/share/lua/5.1/plugins.lua'
no file '/usr/local/Cellar/luajit-openresty/20210510/share/lua/5.1/plugins/init.lua'
no file './plugins.so'
no file '/usr/local/lib/lua/5.1/plugins.so'
no file '/usr/local/Cellar/luajit-openresty/20210510/lib/lua/5.1/plugins.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
続けるにはENTERを押すかコマンドを入力してください
lua/plugins.lua
がないことが原因かな?
lua/plugins.lua
ファイルを置く。
カスタマイズは後々やるとしてとりあえず丸パクリ。
vim.cmd[[packadd packer.nvim]]
require'packer'.startup(function()
-- 起動時に読み込むプラグインは名前を書くだけです
use'tpope/vim-fugitive'
use'tpope/vim-repeat'
-- opt オプションを付けると遅延読み込みになります。
-- この場合は opt だけで読み込む契機を指定していないため、
-- `packadd` コマンドを叩かない限り読み込まれることはありません。
use{'wbthomason/packer.nvim', opt = true}
-- packer.nvim 自体を遅延読み込みにする理由はまた後ほど。
-- コマンドを叩いたときに読み込む。
use{'rhysd/git-messenger.vim', opt = true, cmd = {'GitMessenger'}}
-- 特定のイベントで読み込む
use{'tpope/vim-unimpaired', opt = true, event = {'FocusLost', 'CursorHold'}}
-- 特定のファイルタイプのファイルを開いたら読み込む
use{'fatih/vim-go', opt = true, ft = {'go'}}
-- 特定のキーを叩いたら読み込む
-- この例ではノーマルモードの <CR> にマッピングしていますが、
-- モードを指定する場合はテーブルを入れ子にします。
-- keys = {
-- {'n', '<CR>'},
-- {'v', '<CR>'},
-- }
use{
'arecarn/vim-fold-cycle',
opt = true,
keys = {'<CR>'},
}
-- 特定の VimL 関数を呼ぶと読み込む
-- この例だと、任意の場所で Artify('hoge', 'bold') のように呼び出された時に、
-- このプラグインも読み込まれます。
use{'sainnhe/artify.vim', opt = true, fn = {'Artify'}},
-- 実は opt = true は省略できます。読み込む契機(この例では cmd)を指定すると、
-- 自動的に遅延読み込みとみなされます。
use{
'npxbr/glow.nvim',
cmd = {'Glow', 'GlowInstall'},
-- run オプションを指定すると、インストール時・更新時に
-- 実行するコマンドを指定できます。
run = [[:GlowInstall]],
-- 先頭に : がついていないなら bash -c '...' で実行されます。
-- run = [[npm install]],
-- 関数も指定可能です。
-- run = function() vim.cmd[[GlowInstall]] end,
}
-- 条件が真の時のみ読み込みます。条件は起動時に毎回判定されます。
use{
'thinca/vim-fontzoom',
cond = [[vim.fn.has'gui' == 1]], -- GUI の時のみ読み込む。
-- 関数も指定できます。
-- conf = function() return vim.fn.has'gui' == 1 end,
}
-- 依存関係も管理できます。vim-prettyprint は
-- capture.vim が読み込まれる前に、自動的に packadd されます。
use{
'tyru/capture.vim',
requires = {
{'thinca/vim-prettyprint', cmd = {'PP', 'PrettyPrint'}},
},
cmd = {'Capture'},
}
end)
で、また nvim を起動してみるとこうなる。
E5113: Error while calling lua chunk: vim.lua:129: /Users/malan/.config/nvim/lua/plugins.lua:39: unexpected symbol near ','
lua/plugins.lua:39 のお尻に ,
があることが良くないらしいので削除して起動。
今度は怒られずに立ち上がった。
キマシタワー!
もちろん y で。
色々と install されていくが、
[packer.nvim] [ERROR 00:18:03] async.lua:20: Error in coroutine: ...ack/packer/start/packer.nvim/lua/packer/plugin_utils.lua:167: Vim(lua):E5108: Error executing lua Vim:E475: 引数 cmd に対して無効な値です: 'go' is not executable
まじか。
眠いのでひとまず今日はこれで終わり。
明日余裕あれば続きやります。
golang が入ってないだけだと予想してる。
以前入れた気がするけど古いほうの MBP だったかもしれない。
再開。とりあえず go を install しよう。
最新版入れとけばいいっしょという適当スタイル。
% anyenv install goenv
% exec $SHELL
% goenv install 1.16.4
% goenv global 1.16.4
% go version
go version go1.16.4 darwin/amd64
nvim 立ち上げて
:PackerInstall
してみたらこれといって何のエラーもでなかったので問題なくなったと思ってよいのかな…?
:PackerStatus
見ても問題なさそう。
というわけで、:PackerCompile
してみよう。
これ何やってんのかまだわかってないんだけどたぶん読み込みとか高速化されるのかな。Lua だし。
% ls ~/.config/nvim/plugin/packer_compiled.vim
/Users/malan/.config/nvim/plugin/packer_compiled.vim
とか思ってたら .vim ファイルに compile されるのね。
中身を覗いてみたらどうやら plugins を読み込むための .vim ファイルが生成されるみたい。
つまり plugin を追加するたびに compile しなきゃいけないんだな、きっと。
参考にしてる記事を見てみるとやはりそんな感じっぽいので init.lua に自動 compile されるよう設定している。
真似しよう。
vim.cmd[[autocmd BufWritePost plugins.lua PackerCompile]]
もっかい nvim 起動してもこれといって plugin とか変えてないから何も起きてないっぽい。
まあここは一旦このまま進もう。
なにやら packer.nvim
は遅延読み込みしたほうがいいみたいだけど、ここ躓きそうな匂いがするので後回し。
此処から先はイケてる plugin 探しの旅にでます。
一旦これで落ち着いた。
あとは実際にコーディングしながら調整していこう。
vim.cmd[[packadd packer.nvim]]
require'packer'.startup(function()
use {'wbthomason/packer.nvim', opt = true}
use 'tpope/vim-fugitive'
use 'tpope/vim-repeat'
use 'tpope/vim-surround'
use {'sheerun/vim-polyglot', opt = true}
use {'thinca/vim-quickrun', opt = true}
-- Indentline
use 'vim-scripts/indentLine.vim'
-- Color scheme
use {'joshdick/onedark.vim', opt = true}
-- Fuzzy finder
use 'junegunn/fzf'
use 'junegunn/fzf.vim'
use {
'nvim-telescope/telescope.nvim',
requires = {{'nvim-lua/popup.nvim'}, {'nvim-lua/plenary.nvim'}}
}
-- LSP and completion
use {'neovim/nvim-lspconfig'}
use {'nvim-lua/completion-nvim'}
-- Lua development
use {'tjdevries/nlua.nvim'}
-- CoC
use {'neoclide/coc.nvim'}
end)