Jacky's blog
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)

Jack Yang

编程; 随笔
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)
  • shell

    • shell 入门指南
    • linux 入门指南
    • Shell 常用命令速查手册
    • Shell 代码片段集合
    • brew
    • nvim
      • 轻量吗
      • 安装
      • nvim vs vim
      • 基础配置(init.lua)
      • 插件管理:lazy.nvim
      • 常用插件推荐
      • LSP 配置示例
      • 内置终端
      • 学习路径
      • 注意事项
    • awk
    • sed
    • xargs
    • fzf
    • fd
    • ssh
    • ftp
    • sftp
    • ifconfig
    • wget
    • watch
  • tool

  • client

  • 网络

  • compute_base

  • blog

  • growth

  • java

  • C&C++

  • ai

  • secure

  • cms

  • english

  • 生活

  • 金融学

  • more

  • other
  • shell
Jacky
2026-09-09
目录

nvim

Neovim(nvim)是 Vim 的社区重构版本,目标是可扩展、可嵌入、可维护。原生支持 Lua 配置、内置 LSP 客户端、异步任务,现代插件生态远活跃于 Vim。

# 轻量吗

维度 数值
二进制大小 ~30MB
无插件启动时间 30-50ms
空编辑器内存 10-20MB
常用插件后内存 100-200MB
VS Code 对比 500MB+

结论:nvim 本身很轻量,"重"的是插件。通过懒加载(lazy.nvim)可以保持启动速度 < 100ms。

# 安装

# macOS
brew install neovim

# 启动
nvim

# 查看版本
nvim --version
1
2
3
4
5
6
7
8

配置文件路径:~/.config/nvim/init.lua(推荐 Lua)或 init.vim。

# nvim vs vim

维度 vim nvim
配置语言 Vimscript Lua 原生支持
LSP 需插件(coc.nvim) 0.5+ 内置 LSP 客户端
异步 vim 8 后支持,API 老 原生成熟 job API
终端 有但集成一般 内置终端,可当 pane
插件生态 老旧稳定 现代插件爆发,很多 nvim 专属
启动速度 较快 通常更快
维护 缓慢维护 活跃迭代

会 vim 就会 nvim:所有快捷键、操作模式、命令 100% 兼容。

# 基础配置(init.lua)

-- 基础选项
vim.opt.number = true          -- 显示行号
vim.opt.relativenumber = true  -- 相对行号
vim.opt.tabstop = 4            -- Tab 宽度
vim.opt.shiftwidth = 4         -- 缩进宽度
vim.opt.expandtab = true       -- Tab 转空格
vim.opt.smartindent = true     -- 智能缩进
vim.opt.termguicolors = true   -- 真彩色
vim.opt.cursorline = true      -- 高亮当前行
vim.opt.mouse = 'a'            -- 启用鼠标
vim.opt.clipboard = 'unnamedplus' -- 与系统剪贴板共享
vim.opt.ignorecase = true      -- 搜索忽略大小写
vim.opt.smartcase = true       -- 搜索含大写时区分大小写
vim.opt.wrap = false           -- 不自动换行
vim.opt.swapfile = false       -- 不生成 swap 文件
vim.opt.backup = false         -- 不生成备份文件
vim.opt.undofile = true        -- 持久化撤销

-- 领导者键
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '

-- 常用快捷键
vim.keymap.set('n', '<leader>w', ':w<CR>', { desc = '保存' })
vim.keymap.set('n', '<leader>q', ':q<CR>', { desc = '退出' })
vim.keymap.set('n', '<leader>x', ':x<CR>', { desc = '保存并退出' })
vim.keymap.set('n', '<leader>h', ':nohlsearch<CR>', { desc = '清除搜索高亮' })
vim.keymap.set('n', '<C-l>', '<C-w>l', { desc = '移动到右窗口' })
vim.keymap.set('n', '<C-h>', '<C-w>h', { desc = '移动到左窗口' })
vim.keymap.set('n', '<C-j>', '<C-w>j', { desc = '移动到下窗口' })
vim.keymap.set('n', '<C-k>', '<C-w>k', { desc = '移动到上窗口' })
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# 插件管理:lazy.nvim

-- 自动安装 lazy.nvim
local lazypath = vim.fn.stdpath('data') .. '/lazy/lazy.nvim'
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({
    'git', 'clone', '--filter=blob:none',
    'https://github.com/folke/lazy.nvim.git',
    '--branch=stable', lazypath,
  })
end
vim.opt.rtp:prepend(lazypath)

-- 插件列表
require('lazy').setup({
  -- 颜色主题
  { 'folke/tokyonight.nvim', config = function() vim.cmd('colorscheme tokyonight') end },

  -- 文件树
  { 'nvim-tree/nvim-tree.lua', dependencies = { 'nvim-tree/nvim-web-devicons' },
    config = true, keys = { { '<leader>e', ':NvimTreeToggle<CR>', desc = '文件树' } } },

  -- 模糊搜索
  { 'nvim-telescope/telescope.nvim', dependencies = { 'nvim-lua/plenary.nvim' },
    keys = {
      { '<leader>ff', ':Telescope find_files<CR>', desc = '搜索文件' },
      { '<leader>fg', ':Telescope live_grep<CR>', desc = '搜索内容' },
      { '<leader>fb', ':Telescope buffers<CR>', desc = '搜索缓冲区' },
    } },

  -- LSP 配置
  { 'neovim/nvim-lspconfig' },
  { 'williamboman/mason.nvim', config = true },
  { 'williamboman/mason-lspconfig.nvim', config = true },

  -- 补全
  { 'hrsh7th/nvim-cmp', dependencies = {
    'hrsh7th/cmp-nvim-lsp', 'hrsh7th/cmp-buffer', 'hrsh7th/cmp-path',
    'L3MON4D3/LuaSnip', 'saadparwaiz1/cmp_luasnip',
  } },

  -- 快捷键提示
  { 'folke/which-key.nvim', config = true },

  -- 状态栏
  { 'nvim-lualine/lualine.nvim', config = true },

  -- 语法高亮
  { 'nvim-treesitter/nvim-treesitter', build = ':TSUpdate',
    config = function()
      require('nvim-treesitter.configs').setup({
        ensure_installed = { 'lua', 'python', 'javascript', 'typescript', 'go', 'rust', 'bash', 'json', 'yaml', 'markdown' },
        highlight = { enable = true },
      })
    end },
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

# 常用插件推荐

插件 用途
telescope.nvim 模糊搜索(文件、内容、Git)
nvim-tree.lua / neo-tree.nvim 文件树
nvim-lspconfig LSP 配置
mason.nvim LSP 服务器一键安装
nvim-cmp 补全引擎
LuaSnip 代码片段
nvim-treesitter 语法高亮(比默认更准)
which-key.nvim 快捷键提示
lualine.nvim 状态栏
bufferline.nvim 标签栏
tokyonight.nvim 颜色主题
gitsigns.nvim Git 行内标记
comment.nvim 快速注释
autopairs 自动配对括号

# LSP 配置示例

local lspconfig = require('lspconfig')
local capabilities = require('cmp_nvim_lsp').default_capabilities()

-- Python
lspconfig.pyright.setup({ capabilities = capabilities })
-- TypeScript/JavaScript
lspconfig.tsserver.setup({ capabilities = capabilities })
-- Go
lspconfig.gopls.setup({ capabilities = capabilities })
-- Rust
lspconfig.rust_analyzer.setup({ capabilities = capabilities })
-- Lua(nvim 配置专用)
lspconfig.lua_ls.setup({
  capabilities = capabilities,
  settings = { Lua = { diagnostics = { globals = { 'vim' } } } },
})

-- LSP 快捷键
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, { desc = '跳转到定义' })
vim.keymap.set('n', 'gr', vim.lsp.buf.references, { desc = '查找引用' })
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, { desc = '跳转到实现' })
vim.keymap.set('n', 'K', vim.lsp.buf.hover, { desc = '悬浮文档' })
vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, { desc = '重命名' })
vim.keymap.set('n', '<leader>ca', vim.lsp.buf.code_action, { desc = '代码操作' })
vim.keymap.set('n', '<leader>f', vim.lsp.buf.format, { desc = '格式化' })
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = '上一个诊断' })
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = '下一个诊断' })
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 内置终端

:terminal          " 打开终端
:ter               " 简写
1
2

终端模式快捷键:

  • Ctrl+\ Ctrl+n — 从终端模式回到普通模式
  • 在普通模式下按 i 或 a 回到终端交互

# 学习路径

  1. 会 vim:nvim 的操作与 vim 完全一致,先掌握 vim 基础
  2. init.lua:从基础选项开始,逐步添加配置
  3. lazy.nvim:用插件管理器管理插件
  4. LSP:配置语言服务器,获得 IDE 级体验
  5. Telescope:掌握模糊搜索,提升效率
  6. 自定义:根据自己的工作流调整快捷键和插件

推荐入门配置:kickstart.nvim (opens new window) — 官方推荐的单文件入门配置,注释详尽。

# 注意事项

  • nvim 的配置目录是 ~/.config/nvim/,与 vim 的 ~/.vimrc 不冲突,可以共存
  • 插件数据目录是 ~/.local/share/nvim/,出问题可以删除后重装
  • 第一次启动会自动安装 lazy.nvim 和插件,需要网络连接
  • LSP 服务器通过 :Mason 命令管理,图形化界面安装/更新/卸载
#tool#Shell#Linux
上次更新: 2026/09/10, 14:32:04
brew
awk

← brew awk→

最近更新
01
direnv
09-09
02
wget
09-09
03
watch
09-09
更多文章>
Theme by Vdoing | Copyright © 2019-2026 Jacky | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式