来年もneovimを使い続けるためのおすすめ設定
記事を書いた経緯
一時期neovimを使っていたことがあったのですが 設定が色々うまくいかなかったため
vscode vimに移行しました そのあとvscode vimの速度やjsonの設定が嫌になりvscode neovimに移行しました そしたらneovimの設定がついつい 楽しくなり結局neovimにまた復帰しました
そのアウトプットも兼ねてこの記事を書きました
そしてvimmerを減らしたくないです
プロフィール
中1不登校
atcoder 茶色(15回ぐらいで入茶した)
Paiza S(イキって解いてみた結果)
- 使用言語
- Python(メイン)
- rust(すこしかじった程度)
- C++(競プロ用 基本Python)
環境
- pcの環境
- windows11
- wsl2
- neovimの環境
- neovim 0.10.2(バイナリインストール)
- lazyvim
この記事の対象
neovimをインストールしていてlspなどの設定を済ませている方
vscodeに以降しようと考えている方 考え直してみてください
定番の設定
ここに書いている設定は超定番なので飛ばしても全然いいです
設定する項目
jjをEscにする設定
insertモードでjjを押すだけでノーマルモードに戻れる設定です
ただ二重ループを書くときjが突っかかるのでk(変数)とかにしないと少しイライラします
vim.api.nvim_set_keymap("i", "jj", "<Esc>", { noremap = true, silent = true })
これだけで設定できます指をあまり動かさなくていいので楽です
kkにしたい場合はjjをkkに変えてください
レジスタをシステムのクリップボードと同期させる
レジスタとはneovim独自のクリップボードと考えていいですが、pでシステムのクリップボードの情報が貼り付けられないと不便ですよね
それを解消する設定はたった一行で書けます(テレビショッピングの口調)
同期するとxで一文字とか削除するだけでクリップボードが汚れるので後述の設定でそれを解消します
vim.opt.clipboard:append({ "unnamedplus" })
xで削除するときレジスタを汚さないようにする
xで一文字削除するときシステムのクリップボードが汚れるとうざいので設定します
vim.api.nvim_set_keymap("n", "x", '"_x', { noremap = true, silent = true })
leaderキーを設定する
leaderキーはvim neovimの独自の考えでプラグインの機能の呼び出しなどによく使います
基本的にスペースキーにマップされます
下の設定はスペースキーのmapです
vim.g.mapleader = " "
vim.g.maplocalleader = " "
行番号を相対的に表示する
多くのエディタでは行番号は絶対的にしますがvimは相対的行番号のほうが使い勝手がいいので
後者の設定をします
まあ僕はhop.nvim使っているから関係ないんですけどねw
下のopt.numberは今いる行を絶対行番号にしています
vim.opt.relativenumber = true
vim.opt.number = true
tips 設定を分割する
どうしても設定をしているとinit.luaが肥大化しますよね
なのでlua/配下に設定ファイルを分割してinit.luaの肥大化を防ぎます
真似しなくてもいいですが僕はこんな感じにディレクトリ構成にしています
init.lua
- lua
- core # これはキーマップとかプラグイン以外の設定
- plugins # プラグインの設定
lazyvim.lua # lazyvimのセットアップ
本題の読み込み方は
require("lua/においたファイルの名前")で読み込めます
こんな感じで読み込めます
ディレクトリのluaは省略可能です
ですがlua以外に置くとエラーが出ます
uiの設定
ここからはプラグインマネージャーのインストールが必須となります
インストール例はすべてlazyvimになります
設定する項目
- ファイルツリーをインストールする
- ステータスラインをインストールする
- バッファーラインをインストールする
- 通知とコマンドラインをおしゃれにする
- インデントを見やすくする
- カラースキームをインストールする
ファイルツリーをインストールする
ファイルツリーをインストールするとファイルの移動が便利になって快適です
使うプラグインはneotreeです
下の感じになります
僕は<leader>eを開く方法に割り当てています
閉じる方法はqを押すだけです
インストール例
{
"nvim-neo-tree/neo-tree.nvim",
branch = "v3.x",
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-tree/nvim-web-devicons",
"MunifTanjim/nui.nvim",
},
cmd = { "Neotree" },
keys = { { "<leader>e", ":Neotree<CR>" } },
},
ステータスラインをインストールする
ステータスラインをインストールすると格段にuiの質が上がります
プラグインはlualine.nvimを使います。
下の感じになります
画像がちっちゃくてすいません
ドキュメントの画像を見るとわかりやすいです
インストール例
{
"nvim-lualine/lualine.nvim",
dependencies = { "nvim-tree/nvim-web-devicons" },
config = function()
require("lualine").setup({
})
end,
event = "VeryLazy",
}
バッファーラインをインストールする
バッファーラインとはタブバーのことです
ただタブ移動などのマッピングがされていないため自分でやる必要があります
僕はタブ移動にgtとgTを使ってタブを閉じるのに<leader>qを使ってます
下のインストール例ではその設定ができているので良かったら使ってください
インストール例
{
"akinsho/bufferline.nvim",
dependencies = "nvim-tree/nvim-web-devicons",
event = { "BufReadPre", "BufNewFile" },
config = function()
local bufferline = require("bufferline")
require("bufferline").setup({
options = {
-- mode = "tabs",
style_preset = bufferline.style_preset.minimal,
always_show_bufferline = false,
color_icons = true,
diagnostics = "nvim_lsp",
},
})
vim.api.nvim_set_keymap("n", "gt", ":BufferLineCycleNext<CR>", { noremap = true, silent = true })
-- 前のバッファへ移動
vim.api.nvim_set_keymap("n", "gT", ":BufferLineCyclePrev<CR>", { noremap = true, silent = true })
-- バッファを削除
vim.api.nvim_set_keymap("n", "<leader>q", ":bdelete<CR>", { noremap = true, silent = true })
end,
},
通知とコマンドラインをおしゃれにする
まとめて書いちゃいましたが同じプラグインでできます
使うプラグインはnoice.nvimです
通知はアニメーション付きでコマンドラインは画面の真ん中に表示され見やすくなります
画像を撮るのがめんどくさくなったのでドキュメントを見てください
インストール例
{
"folke/noice.nvim",
event = "VeryLazy",
dependencies = {
"MunifTanjim/nui.nvim",
"rcarriga/nvim-notify",
},
config = function()
require("noice").setup({
lsp = {
override = {
["vim.lsp.util.convert_input_to_markdown_lines"] = true,
["vim.lsp.util.stylize_markdown"] = true,
["cmp.entry.get_documentation"] = true,
},
},
presets = {
bottom_search = true,
command_palette = true,
long_message_to_split = true,
inc_rename = false,
lsp_doc_border = false,
},
})
end,
},
インデントを見やすくする
このプラグインはその名の通りインデントが見やすくなります
僕はpython使っているのでインデントが見やすくなっていいです
これも色々種類がありますがindent-blankline.nvimを使っています
下のインストール例ではドキュメントのインデントごとに色を変える設定を採用しています
インストール例
{
"lukas-reineke/indent-blankline.nvim",
event = "VimEnter",
main = "ibl",
---@module "ibl"
---@type ibl.config
config = function()
local highlight = {
"RainbowRed",
"RainbowYellow",
"RainbowBlue",
"RainbowOrange",
"RainbowGreen",
"RainbowViolet",
"RainbowCyan",
}
local hooks = require("ibl.hooks")
-- create the highlight groups in the highlight setup hook, so they are reset
-- every time the colorscheme changes
hooks.register(hooks.type.HIGHLIGHT_SETUP, function()
vim.api.nvim_set_hl(0, "RainbowRed", { fg = "#E06C75" })
vim.api.nvim_set_hl(0, "RainbowYellow", { fg = "#E5C07B" })
vim.api.nvim_set_hl(0, "RainbowBlue", { fg = "#61AFEF" })
vim.api.nvim_set_hl(0, "RainbowOrange", { fg = "#D19A66" })
vim.api.nvim_set_hl(0, "RainbowGreen", { fg = "#98C379" })
vim.api.nvim_set_hl(0, "RainbowViolet", { fg = "#C678DD" })
vim.api.nvim_set_hl(0, "RainbowCyan", { fg = "#56B6C2" })
end)
require("ibl").setup({ indent = { highlight = highlight } })
end,
},
カラースキームをインストールする
カラースキームはご自由にどうぞと言いたいところですがおすすめを紹介します
僕のおすすめはonedark.nvimです
サポートを終了したatomのテーマです 結構見やすくていいです(atomは僕がプログラミングを始めた頃にはもうメンテ終了していた)
他には
- tokyonight.nvim
-
kanagawa.nvim
とかがおすすめです なんか日本の地名のカラースキーム多いですよね
便利なプラグインのインストール
設定する項目
telescope.nvimのインストール
telescope.nvimはfzfのneovim版みたいな感じです
ファイルの内容も検索できます(ripgrepが必要)
ripgrepはRust製なのでcargoを使うと素早くインストールができます
neovimの三種の神器の一つです
あとの二つは補完エンジンのnvim-cmpと後で紹介するtoggleterm.nvimです
ファイル検索は
Telescope find_files
でできます
インストール方法
{
"nvim-telescope/telescope.nvim",
tag = "0.1.8",
-- or , branch = '0.1.x',
dependencies = {
"nvim-lua/plenary.nvim"
{
"nvim-telescope/telescope-fzf-native.nvim",
build = "cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release",
},
},
cmd = { "Telescope" },
keys = {
{ "<leader>ff", ":Telescope find_files<CR>" },
},
},
hop.nvimのインストール
hop.nvimは高速に動作する移動プラグインです
文字で伝えてもわからないと思うので公式ドキュメントを見てください
ちなみに現在のhop.nvimはアーカイブされた物のforkです
インストール例
{
"smoka7/hop.nvim",
version = "*",
opts = {
keys = "etovxqpdygfblzhckisuran",
},
lazy = true,
keys = { { "<leader>w", ":HopWord<CR>" }, { "<leader>s", ":HopChar2<CR>" }, { "<leader>l", ":HopLine<CR>" } },
},
toggleterm.nvimのインストール
toggleterm.nvimは呼び出すと画面にターミナルが現れます :termを使うより全然作業効率が上がるためいいです
lazygitやlazydockerをneovimから出ずに呼び出すことも可能です
neovimからneovimを呼び出すことも可能ですw(組み込みのやつでもできます)
先ほどいったneovim三種の神器の一つです
インストール例
{
"akinsho/toggleterm.nvim",
version = "*",
opts = {
size = 10, -- ターミナルのサイズ
open_mapping = [[<c-\>]], -- キーマッピング
},
keys = { [[<C-\>]], ":ToggleTerm<CR>" },
cmd = "ToggleTerm",
},
最後に
少しはneovimをもう少し使おうと思いましたでしょうか(vscodeに移行しようとしている人用)
gitなどのプラグインは入れてませんがそのへんはlazygitなどを使うなりしてください
zenn初投稿ですが結構uiが使いやすかったです
Discussion