[[Vim]]から[[Neovim]]に移行してみた記録。 ## 経緯 [[Neovim]]を使う必要がなかったので[[Vim]]を使い続けていたが、逆に[[Vim]]を使い続ける理由もないので[[Neovim]]に移行してみようと思う。 サーバーのような共有環境では自分の設定を使うことはないし、自分の設定が使える環境なら[[Vim]]ではなく[[Neovim]]で環境整備できるため、その点も問題ない。 ## [[Neovim]]インストール [[Scoop]]でインストールする。 ```console scoop install neovim ``` バージョンは0.8.3。 ## 設定ファイルの作成 基本的に[[Vim]]の設定が使えるという噂なので、[[vimrc|.vimrc]]を[[init.vim]]に書き換えてみる。 ```console cd ~/AppData/Local/ mkdir nvim cd nvim cp ~/.vimrc init.vim ``` ## [[Vim]]で使っているプラグインのインストール `nvim`コマンドで起動すると[[vim-plug]]関連のエラーが大量に出る。[[vim-plugをWindowsにインストール]]する。 ```console iwr -useb https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |` ni "$(@($env:XDG_DATA_HOME, $env:LOCALAPPDATA)[$null -eq $env:XDG_DATA_HOME])/nvim-data/site/autoload/plug.vim" -Force ``` [[Neovim]]を起動して`PluginInstall`すればOK。 ## [[coc.nvim]]のインストール 標準よりは少し重くなるけど、ほとんどのケースで利用できる便利プラグイン。設定もシンプルであり、[[LSP]]と戦う日々を思い出す必要もない。 ```lua " VSCode like Plug 'neoclide/coc.nvim', {'branch': 'release'} ``` [[coc extensions]]のインストール。他にも気になるやつをいれればOK。 ```console :CocInstall coc-json coc-tsserver coc-css coc-yaml coc-rust-analyzer coc-sh coc-prettier coc-pyright ``` [[init.vim]]で設定をカスタマイズ。 ```vim " 定義に移動 nmap <silent> <C-]> <Plug>(coc-definition) " 呼び出し元に移動 nmap <silent> <C-j>h <Plug>(coc-references) " 実装に移動 nmap <silent> <C-j>i <Plug>(coc-implementation) " 配下の定義を表示 nnoremap <silent> <M-s> :call CocActionAsync('doHover')<CR> " 前後のエラーや警告に移動 nmap <silent> <M-k> <Plug>(coc-diagnostic-prev) nmap <silent> <M-j> <Plug>(coc-diagnostic-next) " Enterキーで決定 inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm() \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>" " quick fix (code actionの方がいいのでコメントアウト) " nmap <M-CR> <Plug>(coc-fix-current) " code action nmap <silent> <M-CR> <Plug>(coc-codeaction-cursor) " Find symbol of current document nnoremap <silent><nowait> <C-j>o :<C-u>CocList outline<CR> " Search workspace symbols nnoremap <silent><nowait> <C-j>s :<C-u>CocList -I symbols<CR> ``` 詳細は以下。 - [[coc.nvimでファイルを保存したら自動フォーマットをかける]] - [[coc.nvimで定義に移動]] - [[coc.nvimで呼び出し元に移動]] - [[coc.nvimでカーソル配下をホバー表示]] - [[coc.nvimでカーソル配下が指す関数の引数情報(ヒント)を表示]] - [[coc.nvimでEnterキーで候補を決定]] - [[coc.nvimで前後のエラーや警告に移動]] - [[coc.nvimでクイックフィックス(quick fix)]] - [[coc.nvimでシンボルのリネーム]] - [[coc.nvimで補完候補(suggestions)にアイコンを表示]] ## [[Vim]]の不要設定削除 ### カーソル形状 [[Neovim]]は設定しなくてもカーソル形状がモードによって変化するため削除。 ```vim " Insertモードのときカーソルの形状を変更 " let &t_SI="\<CSI>5\ q" " let &t_SR="\<CSI>7\ q" " let &t_EI="\<CSI>2\ q" " https://github.com/vim/vim/issues/6576 が解決したら上記の代わりにコメントアウトを解除する let &t_ti.="\e[2 q" let &t_SI.="\e[5 q" let &t_EI.="\e[2 q" let &t_te.="\e[0 q" ``` ## インストールしようとしてやめたもの ### [[telescope.nvim]] ```vim Plug 'nvim-lua/plenary.nvim' Plug 'nvim-telescope/telescope.nvim', { 'tag': '0.1.1' } noremap <C-j>e <cmd>Telescope oldfiles<CR> noremap <C-j>f <cmd>Telescope git_files<CR> ``` 以下の問題があり解決できなかったので[[ctrlp.vim]]を使い続ける。それで十分だし。 - [[📝telescope.nvimの検索UIが閉じるのが遅い]] - [[📝telescope.nvimを挿入モードで起動したい]] #### #2023/03/17 追記 [[📜init.vimからinit.luaへ移行する]]と、上記問題は2つとも解決した。原因は不明...。[[init.lua]]の設定は以下の通り。 ```lua -- telescope Plug 'nvim-lua/plenary.nvim' Plug('nvim-telescope/telescope.nvim', { tag = '0.1.1' }) local actions = require("telescope.actions") require("telescope").setup { defaults = { mappings = { i = { ["<esc>"] = actions.close }, n = { ["q"] = actions.close }, }, layout_strategy = 'vertical' } } local builtin = require('telescope.builtin') vim.keymap.set('n', '<C-j>f', builtin.find_files, {}) vim.keymap.set('n', '<C-j>e', builtin.oldfiles, {}) ``` #### #2023/03/21 追記 `:Telescope oldfiles`が最近利用した順には並んでくれなかったので、新たに[[telescope-frecency.nvim]]を導入。[[init.lua]]にも以下を追加。 ```lua require('telescope').load_extension('frecency') local home = os.getenv("USERPROFILE") vim.g.sqlite_clib_path = home .. "/dll/sqlite3.dll" key('n', '<C-j>e', ':Telescope frecency<CR>', {silent = true, noremap = true}) ``` ## 移行してよかったこと - [[Windows Terminal]] + [[PowerShell]]の環境で表示がバグることがなくなった ## その他 #2023/03/25 追記 - [[📜Neovimのプラグインマネージャーをvim-plugからpacker.nvimに移行してみた]]