配置Neovim

我这用vscode主要还是用来简单编辑一下其他代码,功能不多没关系,简单快速就好
但vscode越来越重了,每次启动vscode都会吃一大堆内存,都赶上专门的IDE了
(Visual Studio都比vscode省内存)
而且vscode疯狂推进ai,甚至所有提示都默认走ai,这就很难受了
所以现在就废了vscode,转而使用neovim

但neovim的配置同步能力肯定比不上vscode的
所以采用git仓库存档与文字配置的保险方案,这样只要联网就有办法复原配置

以Windows为例配置,主要使用scoop包管理器
对于Linux,需要使用其他的包管理方式安装需要的工具
使用Lazyvim发行版,配置了neovide作为界面

sudo scoop install neovim -g
scoop install neovide

安装Lazyvim

# required  
Move-Item $env:LOCALAPPDATA\nvim $env:LOCALAPPDATA\nvim.bak  
# optional but recommended  
Move-Item $env:LOCALAPPDATA\nvim-data $env:LOCALAPPDATA\nvim-data.bak

git clone https://github.com/LazyVim/starter $env:LOCALAPPDATA\nvim
Remove-Item $env:LOCALAPPDATA\nvim\.git -Recurse -Force

可选项

# LazyVim
sudo scoop install fd -g
sudo scoop install ripgrep -g
# nvim-treesitter
# 提供Windows平台的C Compiler
sudo scoop install mingw-winlibs -g
# mason
# 部分LSP需要使用npm安装
sudo scoop install nvm -g
nvm install latest
nvm use [LatestVersion]

配置plugin

目前我主要使用的是这套插件搭配
通过Lazy Extra安装

editor.aerial
editor.illuminate
editor.neo-tree
ui.edgy

lang.clangd
lang.dotnet
lang.python
lang.rust
lang.toml

编码配置

配置默认terminal为powershell,配置4空格为缩进

-- lua/config/option.lua
vim.opt.shell = "pwsh"

vim.opt.shiftwidth = 4
vim.opt.tabstop = 4
vim.opt.softtabstop = 4

python

由于Lazyvim使用的mason采用了pyright作为python的LSP
而pyright需要配置才能识别虚拟环境中安装的包

# pyproject.toml
[tool.pyright]
venvPath = "."
venv = ".venv"

行为配置

配置终端默认的启动大小,需注意这里通过edgy管理窗口

-- lua/plugin/layout.lua
return {
    "folke/edgy.nvim",
    opts = function(_, opts)
        opts.animate = { enabled = false }
        for _, item in ipairs(opts.bottom) do
            if item.ft == "snacks_terminal" then
                item.size.height = 0.6
            end
        end
        return opts
    end,
}

配置neovide

-- init.lua

-- bootstrap lazy.nvim, LazyVim and your plugins
require("config.lazy")

-- 仅在 Neovide 环境下生效的配置
if vim.g.neovide then
	-- 配置IME行为
    local ime_input = vim.api.nvim_create_augroup("ime_input", { clear = true })
    local function toggle_ime(args)
        vim.g.neovide_input_ime = args.event:match("Enter$") ~= nil
    end
    vim.api.nvim_create_autocmd(
        { "InsertEnter", "InsertLeave", "CmdlineEnter", "CmdlineLeave" },
        { group = ime_input, pattern = "*", callback = toggle_ime }
    )
    vim.api.nvim_create_autocmd("VimEnter", {
        group = ime_input,
        callback = function()
            vim.g.neovide_input_ime = false
        end,
    })

    -- 配置字体
    vim.o.guifont = "DejaVuSansM Nerd Font:h12"
    -- 关闭光标动画的尾迹
    vim.g.neovide_cursor_trail_size = 0
    -- Ctrl+V的行为
    vim.keymap.set('i', '<C-v>', '<C-r>+', { desc = 'Paste clipboard'})
    -- Ctrl+Zd的行为
    vim.keymap.set("i", "<C-z>", "<C-o>u", { desc = "Undo" })
end
使用 Hugo 构建
主题 StackJimmy 设计