## 経緯
[[📜2023-03 VimからNeovimに移行してみた]]ついでにプラグイン周りを整理していたら、[[packer.nvim]]使った方が設定が楽そうなので。
## インストール
公式を参考に[[Windows 11]] x [[PowerShell]]でインストール。
<div class="link-card">
<div class="link-card-header">
<img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/>
<span class="link-card-site-name">GitHub</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<div>
<p class="link-card-title">GitHub - wbthomason/packer.nvim</p>
</div>
<div class="link-card-description">
A use-package inspired plugin manager for Neovim. Uses native packages, supports Luarocks dependenci...
</div>
</div>
<img src="https://opengraph.githubassets.com/a78e3f2c061f4b65f4594cdd51ca7784f191ecb70f6fecd7f8be1afd38e79ac3/wbthomason/packer.nvim" class="link-card-image" />
</div>
<a href="https://github.com/wbthomason/packer.nvim"></a>
</div>
```console
git clone https://github.com/wbthomason/packer.nvim "$env:LOCALAPPDATA\nvim-data\site\pack\packer\start\packer.nvim"
```
## [[vim-plug]]の設定をバックアップ
```
--------------------------------------------------------
-- vim-plug
--------------------------------------------------------
local Plug = vim.fn['plug#']
vim.call('plug#begin')
-- VSCode like
Plug('neoclide/coc.nvim', {branch = 'release'})
local opts = {silent = true, noremap = true, expr = true, replace_keycodes = false}
-- 定義に移動
key('n', '<C-]>', '<Plug>(coc-definition)', {silent = true})
-- 呼び出し元に移動
key('n', '<C-j>h', '<Plug>(coc-references)', {silent = true})
-- 実装に移動
key('n', '<C-j>i', '<Plug>(coc-implementation)', {silent = true})
-- 配下の定義を表示
key('n', '<M-s>', ':call CocActionAsync(\'doHover\')<CR>', {silent = true, noremap = true})
key('i', '<C-P>', '<C-\\><C-O>:call CocActionAsync(\'showSignatureHelp\')<CR>', {silent = true})
-- 前後のエラーや警告に移動
key('n', '<M-k>', '<Plug>(coc-diagnostic-prev)', {silent = true})
key('n', '<M-j>', '<Plug>(coc-diagnostic-next)', {silent = true})
-- Enterキーで決定
key("i", "<cr>", [[coc#pum#visible() ? coc#pum#confirm() : "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"]], opts)
-- code action
key('n', '<M-CR>', '<Plug>(coc-codeaction-cursor)', {silent = true})
-- Find symbol of current document
key('n', '<C-j>o', ':<C-u>CocList outline<cr>', {silent = true, nowait = true})
-- Search workspace symbols
key('n', '<C-j>s', ':<C-u>CocList -I symbols<cr>', {silent = true, nowait = true})
-- Rename
key('n', '<S-M-r>', '<Plug>(coc-rename)')
-- yank範囲のハイライト
Plug 'machakann/vim-highlightedyank'
vim.g.highlightedyank_highlight_duration = 300 -- ★global
-- 囲まれているものの操作
Plug 'machakann/vim-sandwich'
-- ブラックホールレジスト+putの省略
Plug 'vim-scripts/ReplaceWithRegister'
key('n', '_', '<Plug>ReplaceWithRegisterOperator')
-- 全体が範囲のtext-object
Plug 'kana/vim-textobj-user'
Plug 'kana/vim-textobj-entire'
-- コメント化
Plug 'tpope/vim-commentary'
-- CamelCaseMotion
Plug 'bkad/CamelCaseMotion'
vim.g.camelcasemotion_key = ']'
-- 画面内瞬間移動
Plug 'easymotion/vim-easymotion'
key('n', 's', '<Plug>(easymotion-overwin-f2)')
vim.g.EasyMotion_do_mapping = 0
vim.g.EasyMotion_smartcase = 1
-- Theme
Plug 'morhetz/gruvbox'
-- マルチカーソル
Plug 'mg979/vim-visual-multi'
vim.api.nvim_command('let g:VM_maps = {}')
vim.api.nvim_command("let g:VM_maps['Find Under'] = '<C-k>'")
vim.api.nvim_command("let g:VM_maps['Find Subword Under'] = '<C-k>'")
-- ステータスLine
Plug 'itchyny/lightline.vim'
vim.g.lightline = { colorscheme = 'jellybeans' }
-- " Fern
Plug 'lambdalisue/fern.vim'
key('n', '<C-j>w', ':Fern %:h -drawer -width=50<cr>', { noremap = true })
Plug 'lambdalisue/nerdfont.vim'
Plug 'lambdalisue/glyph-palette.vim'
vim.cmd([[
augroup my-glyph-palette
autocmd! *
autocmd FileType fern call glyph_palette#apply()
autocmd FileType nerdtree,startify call glyph_palette#apply()
augroup END
]])
Plug 'lambdalisue/fern-renderer-nerdfont.vim'
vim.g['fern#renderer'] = "nerdfont"
Plug 'lambdalisue/fern-git-status.vim'
-- mark
Plug 'kshenoy/vim-signature'
-- telescope
Plug 'nvim-lua/plenary.nvim'
Plug('nvim-telescope/telescope.nvim', { tag = '0.1.1' })
Plug 'kkharji/sqlite.lua'
Plug 'nvim-telescope/telescope-frecency.nvim'
-- barbar
Plug 'nvim-tree/nvim-web-devicons'
Plug 'romgrk/barbar.nvim'
vim.call('plug#end')
```
## 設定の移行
- ロードした後の処理は`config`に
- ロードする前の処理は`setup`に
- keyの設定は[[packer.nvim]]の設定とは別にする
- 設定変更したら `:PackerSync` しておけばOK
- `:PackerCompile`と`:PackerUpdate`を実行してくれる
- 実行前には **[[Neovim]]の再起動** が必要。
## 新たに導入したプラグイン
- [[lualine.nvim]]
- [[sidebar.nvim]]
- [[gitsigns.nvim]]
- [[hop.nvim]]
## ハマったところ
- [[📝packer.nvimのコマンドを実行すると『Removing the following directories. OK?』のconfirmが出る]]
- [[📝packer.nvimの設定、具体的にはsetupやconfigを変更しても反映されない]]