Open3

[2024年版]Neovimの環境構築を見直す

AkiAki

Neovimをインストールする

もしNeovimをまだインストールしていない、もしくは最新版したい場合は以下のコマンドでNeovimをインストールしよう

brew install

どうやら2024/11/29の段階ではv0.10.2が最新みたい

NVIM v0.10.2
Build type: Release
LuaJIT 2.1.1732813678
Run "nvim -V1 -v" for more info

nvimコマンドで以下の画面が表示されたら成功。

AkiAki

Color themeを設定する

solarized-osakaを使用する。
Package managerにはLazyVimを使用する。

LazyVimをインストールする

LazyVimの公式に導入するにあたって必要となる項目が記載されているので、まずはそれをインストールする。

すでにNeoVimの設定ファイルを記載している場合はバックアップを作成してから、LazyVimを導入する。

mv ~/.config/nvim{,.bak}

公式のStartバージョンをGithubからクローンする

git clone https://github.com/LazyVim/starter ~/.config/nvim

クローン時に付いてきたGitを削除する、その後にご自身のGitで管理するようにします。

rm -rf ~/.config/nvim/.git
nvim

実行した時に以下の画面のようになればLazyVimのインストールは完了。

soralized osakaを設定する

以下のコマンドでNeoVimを起動します

nvim ~/.config/nvim/lua/plugins/colorscheme.lua

起動したら以下の内容を記述する

return {
  "craftzdog/solarized-osaka.nvim",
  lazy = false,
  priority = 1000,
  opts = {},
}

以下のコマンドでNeoVimを起動する

nvim ~/.config/nvim/lua/config/lazy.lua

以下の内容に書き換える

{ "LazyVim/LazyVim", import = "lazyvim.plugins", opts = { colorscheme = "solarized-osaka" } },

これらが完了したら一度:wqでターミナルに戻り再度nvimでNeoVimを起動します
色味が変わっていれば成功で、一応以下の画像のようにLoadedsolarized-osakaがあれば大丈夫です

AkiAki

キーマッピングを設定する

考えるのがめんどくさい人は以下をコピペするかKeymap公式にサンプルもあるのでそちらを使用するかお好きな方で。

local map = LazyVim.safe_keymap_set
local opts = { noremap = true, silent = true }

-- Move to Window
map("n", "sh", "<C-w>h", { desc = "Go to Left Window", remap = true })
map("n", "sj", "<C-w>j", { desc = "Go to Lower Window", remap = true })
map("n", "sk", "<C-w>k", { desc = "Go to Upper Window", remap = true })
map("n", "sl", "<C-w>l", { desc = "Go to Right Window", remap = true })

-- Select all
map("n", "<C-a>", "gg<S-v>G")

-- New tab
map("n", "te", ":tabedit<Return>", opts)
map("n", "<tab>", ":tabnext<Return>", opts)
map("n", "<s-tab>", ":tabprev<Return>", opts)

-- Split window
map("n", "ss", ":split<Return>", opts)
map("n", "sv", ":vsplit<Return>", opts)

-- Lazy
map("n", "<leader>l", "<cmd>Lazy<cr>", { desc = "Lazy" })

-- Formatting
map({ "n", "v" }, "<leader>cf", function()
  LazyVim.format({ force = true })
end, { desc = "Format" })

-- Diagnostic
local diagnostic_goto = function(next, severity)
  local go = next and vim.diagnostic.goto_next or vim.diagnostic.goto_prev
  severity = severity and vim.diagnostic.severity[severity] or nil
  return function()
    go({ severity = severity })
  end
end
map("n", "<leader>cd", vim.diagnostic.open_float, { desc = "Line Diagnostics" })
map("n", "]d", diagnostic_goto(true), { desc = "Next Diagnostic" })
map("n", "[d", diagnostic_goto(false), { desc = "Prev Diagnostic" })
map("n", "]e", diagnostic_goto(true, "ERROR"), { desc = "Next Error" })
map("n", "[e", diagnostic_goto(false, "ERROR"), { desc = "Prev Error" })
map("n", "]w", diagnostic_goto(true, "WARN"), { desc = "Next Warning" })
map("n", "[w", diagnostic_goto(false, "WARN"), { desc = "Prev Warning" })

-- Toggle options
LazyVim.format.snacks_toggle():map("<leader>uf")
LazyVim.format.snacks_toggle(true):map("<leader>uF")
Snacks.toggle.option("spell", { name = "Spelling" }):map("<leader>us")
Snacks.toggle.option("wrap", { name = "Wrap" }):map("<leader>uw")
Snacks.toggle.diagnostics():map("<leader>ud")
Snacks.toggle
  .option("conceallevel", { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2 })
  :map("<leader>uc")
if vim.lsp.inlay_hint then
  Snacks.toggle.inlay_hints():map("<leader>uh")
end