LoginSignup
0
0

はじめに

こんにちは、H×Hのセンリツ大好きエンジニアです。(同担OKです😉)
今回は個人的に使いたいNeovimの設定が色々面倒そうだったので、ChatGPTを使ってごちゃごちゃした備忘録です。
おすすめの設定があれば教えてください😁

Neovim設定備忘録

まず、カッコ良いという単純な理由でNeovimを使ってみることにしました。
しかし、luaの書き方も知らなければ、そもそもvimの操作も何も知らない状態。。。
こんな状態じゃあハードルが高くてとてもとても。。。🤦

ということで何を設定すれば良いか聞いてみました。

~/.config/nvim/init.luaの初期状態(少し調べて設定しました。)
スクリーンショット 2024-06-17 21.06.19.png

最初の質問
👶 < Neovimのinit.luaに設定しておいた方が良いものを教えてください

回答
🤖 < これ設定しとけ!

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

うあああ!一度に来すぎ!
抜粋しながら何の設定か見ていきましょう。

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

これはNeovimを操作するときの基本的な設定のようです。
それぞれコメントアウトしているので分かりやすいですね!

init.lua
-- 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 を使うのが一般的でだそうで、ここでインストールから設定までしているようです。

init.lua
local nvim_lsp = require('lspconfig')

-- 各種LSPサーバーの設定
nvim_lsp.tsserver.setup{}
nvim_lsp.pyright.setup{}
nvim_lsp.rust_analyzer.setup{}

LSP(Language Server Protocol)というものがあるそうで、設定を行うことでコード補完や診断を強化できるようになるとのこと。
ほえ〜😮

init.lua
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を使用して自動補完機能を設定している模様。

init.lua
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というものを入れてませんでした🙄

解決しましょう!

  1. packer.nvimのインストールコマンドをホームディレクトリで実行
    git clone --depth 1 https://github.com/wbthomason/packer.nvim \
     ~/.local/share/nvim/site/pack/packer/start/packer.nvim
    
  2. init.luaにパックパスの設定を追加(packer.nvimのインストールの上らへんに)
    init.lua
    -- パックパスの設定
    vim.cmd [[set packpath+=~/.local/share/nvim/site]]
    
  3. 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を使用してインストールしちゃいましょう!

init.lua
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を実行します!

すると。。。
スクリーンショット 2024-06-17 21.30.34.png

おお!なんかカッコよくなりましたね!🫣
ですが、画面にも出てる通り相対行番号がわかりにくい!
-- vim.cmd("set number")も消し忘れてました🥹) 

という事で、以下の設定を削除しました。

init.lua
-- vim.cmd("set number")

-- 相対行番号を表示
vim.opt.relativenumber = true

すると、、、
スクリーンショット 2024-06-17 21.34.39.png

良い感じになりましたね!
まあこれで一旦はある程度形になったと思うので、これで終わろうと思います(一気にやるのは疲れるので)

おわりに

Neovim始めたかったんですが、いざやってみるとハードル高いですね!
ですが、AIを使って少しづつ勉強していこうと思います!

次回あたりでTypescriptとGoの自動補完まで出来ると良いかなあと思っています。
ここまでご覧いただきありがとうございました!
以上、センリツでした。🤓

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0