はじめに
こんにちは、H×Hのセンリツ大好きエンジニアです。(同担OKです😉)
今回は個人的に使いたいNeovimの設定が色々面倒そうだったので、ChatGPTを使ってごちゃごちゃした備忘録です。
おすすめの設定があれば教えてください😁
Neovim設定備忘録
まず、カッコ良いという単純な理由でNeovimを使ってみることにしました。
しかし、lua
の書き方も知らなければ、そもそもvimの操作も何も知らない状態。。。
こんな状態じゃあハードルが高くてとてもとても。。。🤦
ということで何を設定すれば良いか聞いてみました。
~/.config/nvim/init.lua
の初期状態(少し調べて設定しました。)
最初の質問
👶 < Neovimのinit.luaに設定しておいた方が良いものを教えてください
回答
🤖 < これ設定しとけ!
-- 行番号を表示
vim.opt.number = true
-- 相対行番号を表示
vim.opt.relativenumber = true
-- タブの設定
vim.opt.expandtab = true
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
-- スワップファイルを無効化
vim.opt.swapfile = false
-- バックアップファイルを無効化
vim.opt.backup = false
-- カーソルラインを表示
vim.opt.cursorline = true
-- 検索のハイライトを有効化
vim.opt.hlsearch = true
-- インクリメンタル検索を有効化
vim.opt.incsearch = true
-- packer.nvimのインストール
vim.cmd [[packadd packer.nvim]]
require('packer').startup(function()
use 'wbthomason/packer.nvim' -- packerを管理しているプラグイン
use 'nvim-treesitter/nvim-treesitter' -- シンタックスハイライト
use 'neovim/nvim-lspconfig' -- LSPの設定
use 'hrsh7th/nvim-cmp' -- 自動補完プラグイン
use 'L3MON4D3/LuaSnip' -- スニペットエンジン
use 'nvim-lua/plenary.nvim' -- 多目的ユーティリティ
use 'nvim-telescope/telescope.nvim' -- ファジーファインダー
use 'nvim-lualine/lualine.nvim' -- ステータスライン
use 'kyazdani42/nvim-tree.lua' -- ファイルエクスプローラー
use 'akinsho/bufferline.nvim' -- バッファライン
end)
local nvim_lsp = require('lspconfig')
-- 各種LSPサーバーの設定
nvim_lsp.tsserver.setup{}
nvim_lsp.pyright.setup{}
nvim_lsp.rust_analyzer.setup{}
local cmp = require'cmp'
cmp.setup({
snippet = {
expand = function(args)
require('luasnip').lsp_expand(args.body)
end,
},
mapping = {
['<Tab>'] = cmp.mapping.select_next_item(),
['<S-Tab>'] = cmp.mapping.select_prev_item(),
['<C-Space>'] = cmp.mapping.complete(),
['<CR>'] = cmp.mapping.confirm({ select = true }),
},
sources = {
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
{ name = 'buffer' },
}
})
vim.opt.termguicolors = true
vim.cmd [[colorscheme gruvbox]]
-- leaderキーの設定
vim.g.mapleader = " "
-- ファイルエクスプローラーをトグル
vim.api.nvim_set_keymap('n', '<leader>e', ':NvimTreeToggle<CR>', { noremap = true, silent = true })
-- 検索をトグル
vim.api.nvim_set_keymap('n', '<leader>f', ':Telescope find_files<CR>', { noremap = true, silent = true })
うあああ!一度に来すぎ!
抜粋しながら何の設定か見ていきましょう。
-- 行番号を表示
vim.opt.number = true
-- 相対行番号を表示
vim.opt.relativenumber = true
-- タブの設定
vim.opt.expandtab = true
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
-- スワップファイルを無効化
vim.opt.swapfile = false
-- バックアップファイルを無効化
vim.opt.backup = false
-- カーソルラインを表示
vim.opt.cursorline = true
-- 検索のハイライトを有効化
vim.opt.hlsearch = true
-- インクリメンタル検索を有効化
vim.opt.incsearch = true
これはNeovimを操作するときの基本的な設定のようです。
それぞれコメントアウトしているので分かりやすいですね!
-- packer.nvimのインストール
vim.cmd [[packadd packer.nvim]]
require('packer').startup(function()
use 'wbthomason/packer.nvim' -- packerを管理しているプラグイン
use 'nvim-treesitter/nvim-treesitter' -- シンタックスハイライト
use 'neovim/nvim-lspconfig' -- LSPの設定
use 'hrsh7th/nvim-cmp' -- 自動補完プラグイン
use 'L3MON4D3/LuaSnip' -- スニペットエンジン
use 'nvim-lua/plenary.nvim' -- 多目的ユーティリティ
use 'nvim-telescope/telescope.nvim' -- ファジーファインダー
use 'nvim-lualine/lualine.nvim' -- ステータスライン
use 'kyazdani42/nvim-tree.lua' -- ファイルエクスプローラー
use 'akinsho/bufferline.nvim' -- バッファライン
end)
Neovimのプラグイン管理には packer.nvim を使うのが一般的でだそうで、ここでインストールから設定までしているようです。
local nvim_lsp = require('lspconfig')
-- 各種LSPサーバーの設定
nvim_lsp.tsserver.setup{}
nvim_lsp.pyright.setup{}
nvim_lsp.rust_analyzer.setup{}
LSP(Language Server Protocol)というものがあるそうで、設定を行うことでコード補完や診断を強化できるようになるとのこと。
ほえ〜😮
local cmp = require'cmp'
cmp.setup({
snippet = {
expand = function(args)
require('luasnip').lsp_expand(args.body)
end,
},
mapping = {
['<Tab>'] = cmp.mapping.select_next_item(),
['<S-Tab>'] = cmp.mapping.select_prev_item(),
['<C-Space>'] = cmp.mapping.complete(),
['<CR>'] = cmp.mapping.confirm({ select = true }),
},
sources = {
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
{ name = 'buffer' },
}
})
nvim-cmp
を使用して自動補完機能を設定している模様。
vim.opt.termguicolors = true
vim.cmd [[colorscheme gruvbox]]
-- leaderキーの設定
vim.g.mapleader = " "
-- ファイルエクスプローラーをトグル
vim.api.nvim_set_keymap('n', '<leader>e', ':NvimTreeToggle<CR>', { noremap = true, silent = true })
-- 検索をトグル
vim.api.nvim_set_keymap('n', '<leader>f', ':Telescope find_files<CR>', { noremap = true, silent = true })
テーマの変更と、キーバインディングを設定しているようです。
キーバインディングはまだ何も分からんので、慣れていくしかありません😇
これで設定すると。。。あれ?
エラーが発生しましたね
Error detected while processing /Users/***/.config/nvim/init.lua:
E5113: Error while calling lua chunk: vim/_editor.lua:0: /Users/***/.config/nvim/init.lua..nvim_exec2() called
at /Users/***/.config/nvim/init.lua:0: Vim(packadd):E919: Directory not found in 'packpath': "pack/*/opt/packer
.nvim"
エラー文を見ると、packpath
が見つからなかった模様。
そういえば、packer.nvim
というものを入れてませんでした🙄
解決しましょう!
-
packer.nvim
のインストールコマンドをホームディレクトリで実行git clone --depth 1 https://github.com/wbthomason/packer.nvim \ ~/.local/share/nvim/site/pack/packer/start/packer.nvim
-
init.lua
にパックパスの設定を追加(packer.nvimのインストールの上らへんに)init.lua-- パックパスの設定 vim.cmd [[set packpath+=~/.local/share/nvim/site]]
- Neovimを再起動して、neovim内で
:PackerSync
コマンドを実行
これで、プラグインがインストールされました!
でも、また違うエラーが出ますね。。。
Error detected while processing /Users/***/.config/nvim/init.lua:
E5113: Error while calling lua chunk: vim/_editor.lua:0: /Users/***/.
config/nvim/init.lua..nvim_exec2() called at /Users/***/.config/nvim/
init.lua:0: Vim(colorscheme):E185: Cannot find color scheme 'gruvbox'
Neovimのテーマに設定したgruvbox
がインストールされてませんでした。😇
これはpacker.nvim
を使用してインストールしちゃいましょう!
require('packer').startup(function()
use 'wbthomason/packer.nvim' -- packerを管理しているプラグイン
use 'nvim-treesitter/nvim-treesitter' -- シンタックスハイライト
use 'neovim/nvim-lspconfig' -- LSPの設定
use 'hrsh7th/nvim-cmp' -- 自動補完プラグイン
use 'L3MON4D3/LuaSnip' -- スニペットエンジン
use 'nvim-lua/plenary.nvim' -- 多目的ユーティリティ
use 'nvim-telescope/telescope.nvim' -- ファジーファインダー
use 'nvim-lualine/lualine.nvim' -- ステータスライン
use 'kyazdani42/nvim-tree.lua' -- ファイルエクスプローラー
use 'akinsho/bufferline.nvim' -- バッファライン
--------- 以下の1行を追加 ---------
use 'morhetz/gruvbox' -- gruvboxカラースキーム
end)
そして、先ほどと同じように再起動して:PackerSync
を実行します!
おお!なんかカッコよくなりましたね!🫣
ですが、画面にも出てる通り相対行番号がわかりにくい!
(-- vim.cmd("set number")
も消し忘れてました🥹)
という事で、以下の設定を削除しました。
-- vim.cmd("set number")
-- 相対行番号を表示
vim.opt.relativenumber = true
良い感じになりましたね!
まあこれで一旦はある程度形になったと思うので、これで終わろうと思います(一気にやるのは疲れるので)
おわりに
Neovim始めたかったんですが、いざやってみるとハードル高いですね!
ですが、AIを使って少しづつ勉強していこうと思います!
次回あたりでTypescriptとGoの自動補完まで出来ると良いかなあと思っています。
ここまでご覧いただきありがとうございました!
以上、センリツでした。🤓