Closed17

neovim の環境を構築してみる

malanmalan

install だけして使っていなかった neovim の環境をそこそこ使える程度に整備してみる。
できれば普段使ってる vscode と同程度のことができるようにしたい。
coc.nvim 使えばだいたい OK な風潮は感じている。

malanmalan

とりあえず 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)
malanmalan

というわけで、感謝の念を込めつつ上述の記事を丸パクリしてみる。

% git clone https://github.com/wbthomason/packer.nvim\
 ~/.local/share/nvim/site/pack/packer/start/packer.nvim
% nvim ~/.config/nvim/init.lua
init.lua
require'plugins'

それから後で使うであろう lua/ も作成しておく。

% mkdir ~/.config/nvim/lua
malanmalan

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 がないことが原因かな?

malanmalan

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)
malanmalan

で、また 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 のお尻に , があることが良くないらしいので削除して起動。
今度は怒られずに立ち上がった。

malanmalan

キマシタワー!
もちろん 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

まじか。

malanmalan

眠いのでひとまず今日はこれで終わり。
明日余裕あれば続きやります。

golang が入ってないだけだと予想してる。
以前入れた気がするけど古いほうの MBP だったかもしれない。

malanmalan

再開。とりあえず 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
malanmalan

nvim 立ち上げて
:PackerInstall してみたらこれといって何のエラーもでなかったので問題なくなったと思ってよいのかな…?
:PackerStatus 見ても問題なさそう。

malanmalan

というわけで、: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 されるよう設定している。
真似しよう。

init.lua
vim.cmd[[autocmd BufWritePost plugins.lua PackerCompile]]

もっかい nvim 起動してもこれといって plugin とか変えてないから何も起きてないっぽい。
まあここは一旦このまま進もう。

malanmalan

なにやら packer.nvim は遅延読み込みしたほうがいいみたいだけど、ここ躓きそうな匂いがするので後回し。

malanmalan

此処から先はイケてる plugin 探しの旅にでます。

malanmalan

一旦これで落ち着いた。
あとは実際にコーディングしながら調整していこう。

plugins.lua
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)
このスクラップは2021/05/31にクローズされました