“caveman”这个词,最近在技术圈里被反复提起。你可能在刷 GitHub、看 YouTube 视频、或者逛 Reddit 的时候见过它。乍一看像是“原始人”的调侃,但实际指向的是一套追求极致、硬核、甚至有点“返祖”的开发环境方案——特别是围绕 Neovim 构建的极简可执行配置体系。在这股风潮里,不装花哨的插件,不追求完整 IDE 那样的图形界面,而是用最直接、最暴力的方式把编辑器变成身体的一部分。这套方案的关键词是:极简、键盘驱动、低延迟、完全掌控。
今天这篇东西,就是把我自己从“IDE 重度依赖者”切换到“caveman 模式”的完整过程、踩过的坑、以及最后沉淀下来的配置逻辑,原原本本分享出来。如果你想了解为什么越来越多人抛弃鼠标、抛弃厚重 GUI,回到纯文本终端里写代码;或者你想自己动手配一套能用、够快、不折腾的 Neovim 环境,这篇文章应该能给你一个清晰且有参考价值的答案。
1. 内容整体设计与思路拆解
1.1 “Caveman”到底指的是什么
要理解这套东西,得先弄明白“caveman”这个符号在开发者社区里的隐喻。技术圈用它来描述一种工作习惯:像洞穴人一样,只保留最原始、最必需的工具,不依赖现代 IDE 的层层抽象。
现实点说,就是:
- 不用 VS Code,不靠鼠标点选,甚至尽量减少图形界面依赖。
- 在终端里搞定一切:写代码、看差异、搜文件、切分支、跑测试。
- 编辑器配置尽量精简,但每个键位都必须“打得准、回应快”。
- 常驻在 Neovim 里,终端里有一个可用的 shell 就够了。
- 启动速度动辄 10 毫秒级别,而不是等待 Electron 大军缓缓苏醒。
你可能觉得这是炫技、是折腾。但实际体验一圈后你会发现,这套模式背后有一套很自洽的逻辑:去掉一切不必要的层级和噪音,让注意力只停留在代码本身。简单说,caveman 不是“简陋”,而是“刻意删减后的精准”。
1.2 为什么我会从 IDE 转向 Caveman 模式
我之前的开发主力工具是 IDEA 和 VS Code,按说功能完整、生态齐全,为什么会想不开去“原始社会”?
直接原因是两个:性能焦虑 + 注意力分散。
先说性能。我手头有几个不小的 TypeScript 和 Rust 项目,VS Code 打开后内存吃掉两个 G 是常态,切个文件偶尔还要转圈。即使换到 M 系列芯片的机器,Electron 应用先天资源占用就是高,纯粹写代码却要承担编辑器本身的开销,总觉得浪费。
再说注意力。IDE 把大量界面元素堆在你眼前:侧边栏、状态栏、面包屑、迷你地图、调试面板……信息越多,大脑过滤负担越大。而我实际需要的,就是一个光标、一段内容、一个能随时呼出的文件树。
Neovim 本身的异步机制、内嵌终端、原生 LSP 支持,加上 Lua 配置的灵活度,恰好能满足这种“只留核心”的想法。而真正让我下决心的,是在看到某些作者的 caveman 配置视频之后——一顿操作下来全程没有鼠标移动,切文件、跳变量、看报错、改代码,行云流水。那个效率感非常直观。
1.3 方案选型:为什么选 Neovim 而不是其他
既然要“回到洞穴”,可选的工具也不少:Vim、Emacs、Kakoune、Helix 都在范围内。为什么最终落到 Neovim?三个原因:
第一,Neovim 是现代 Vim 的一次彻底重构。它保留了 Vim 的编辑模型和肌肉记忆,但底层架构完全革新。内置 LSP 客户端、内置终端、原生 Lua 支持、异步任务,这些在旧 Vim 里要么靠补丁要么靠 hack,在 Neovim 里都是第一公民。
第二,Lua 配置比 Vimscript 友好太多。Vimscript 是一种能让你写吐的语言,运算符和函数调用容易让人晕头转向。而 Lua 简单清晰,学习成本低。这意味着你不仅是“使用”一套配置,而是真的能读懂它、改它、思考它。
第三,插件生态的现代转向。如今最活跃的编辑器插件社区,很多都在 Neovim 这边。从 Telescope 到 Lazy.nvim,从 nvim-cmp 到 gitsigns,不夸张地说,Neovim 正处在自己的“文艺复兴时期”。
选型结论非常明确:如果想极简又不想牺牲现代编辑体验,Neovim 是当下最平衡的答案。
2. 核心细节解析与实操要点
如果把 caveman 配置比作盖房子,那么柱子和承重墙只有几根,但每根都必须够硬。下面这五个部分就是我反复试验后觉得最核心、最不能省的。
2.1 插件管理:只保留 Lazy.nvim 一根柱子
插件管理器是所有配置的地基。在 2024 年的节点上,这个选择几乎不需要犹豫,直接用Lazy.nvim。
Lazy.nvim 的几个按钮级优势:
- 插件延迟加载(lazy loading)做得极其优雅,不用的插件绝不启动。
- 自带 UI 面板,输入
:Lazy就能看到插件状态、更新情况、健康检查。 - 配置粒度细,可以按文件类型、命令、按键事件等条件来触发加载。
一个参考的配置文件骨架长这样:
-- ~/.config/nvim/init.lua 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("plugins")上面这段代码里,require("lazy").setup("plugins")的意思是让 Lazy 自动加载~/.config/nvim/lua/plugins.lua或者lua/plugins/目录下所有配置。按目录拆分配置,结构清晰,维护成本低。
提示:不建议用 Vim-Plug 或 Packer 这类老牌工具。不是说它们不行,而是在现代 Neovim 环境下,Lazy.nvim 对性能的优化和社区维护的活跃度都明显更好。既然从零开始,没必要在一开始就给自己埋下未来迁移的隐患。
2.2 基础选项:用 Vim 的方式关掉杂音
所谓“杂音”,指的是那些模拟 IDE 体验但实际影响心智的默认行为。Caveman 哲学在这里的体现是:改掉 Vim 原本拖沓的部分,保留它高效的核心。
下面这几行,是我每台新机器必填的基础配置:
-- 用户体验关键项 vim.opt.number = true -- 显示相对行号,方便跳转 vim.opt.relativenumber = true -- 相对行号:5j 就是往下5行,不用算 vim.opt.mouse = "a" -- 允许鼠标操作,但不会依赖它 vim.opt.clipboard = "unnamedplus" -- 系统剪贴板互通,yank 直接进系统 vim.opt.swapfile = false -- 关闭 swap 文件,减少磁盘噪音 vim.opt.undofile = true -- 持久化撤销历史,核心中的核心 vim.opt.scrolloff = 8 -- 光标上下各保留8行视野 vim.opt.updatetime = 250 -- 默认4000ms太慢,改成250让 UI 响应更快 vim.opt.timeoutlen = 400 -- 键序列等待时间,避免延迟感这里着重解释两个容易被忽略但影响巨大的选项:
updatetime。这个值决定 Neovim 每隔多久触发一次某些事件,比如更新 CursorHold、刷新 Git 状态、触发自动命令。默认 4000ms,4 秒才更新一次,很多插件刷新慢的元凶就是它。改成 250ms 后体感会明显变快,文档里也明确建议不要低于 100ms。
timeoutlen。控制的是按下键序列时等待组合键的时间。如果你设置过jk作为退出插入模式的快捷键,那timeoutlen就是控制这个组合是否灵敏的阀门。太短按快了会触发失败,太长按慢了会有延迟。400ms 是我个人试下来最舒适的平衡点。
2.3 快捷键设计:把高频操作缩到最短路径
Caveman 配置风格的核心特征之一,就是Leader 键和快捷键的密度很高。但注意,高密度不等于乱绑定——每个快捷键都要有记忆锚点,最好一看就能回想起功能。
我的 Leader 键设为空格键:
vim.g.mapleader = " "这样一来,所有自定义操作都以空格作为前缀,不用再去够Ctrl或Alt,小拇指和无名指的负担大减。
高频操作路径建议如下表:
| 操作目标 | 快捷键 | 记忆锚点 |
|---|---|---|
| 快速打开文件搜索 | <Leader>ff | f = file |
| 全局字符串搜索 | <Leader>fg | g = grep |
| 打开 Buffer 列表 | <Leader>bb | b = buffer |
| 保存文件 | <Leader>w | w = write |
| 关闭当前 Buffer | <Leader>x | x = close |
| 打开文件树 | <Leader>e | e = explore |
| 格式化工整代码 | <Leader>fm | fm = format |
| 打开 LSP 符号表 | <Leader>cs | cs = call symbols |
这套映射的设计原则非常简单:首字母联想 + 单键优先。不需要记一堆语义化的单词,手指按下去,大脑自然反应出来的是“我要找文件”而不是“我要按什么快捷键”。
一个我强烈推荐的细节:把jk设为退出插入模式。
vim.keymap.set("i", "jk", "<Esc>", { desc = "Exit insert mode with jk" })这会彻底改变你的输入节奏——不需要伸小拇指去够Esc,两个食指顺带一碰就能回到 Normal 模式。我大概用了三天就完全离不开它了。
2.4 文件树和模糊搜索:caveman 也能高效导航
很多人以为“原始人”配置就是不用文件树,靠:e硬敲路径。真那样做就矫枉过正了。Caveman 模式的核心是“不靠鼠标点击完成操作”,而不是“拒绝一切导航工具”。
文件树我选Neo-tree,没有任何稀奇的理由——它是目前 Neovim 生态里最稳定、最接近现代 IDE 文件树体验的插件。支持文件操作、Git 状态图标、浮动窗口模式。
{ "nvim-neo-tree/neo-tree.nvim", keys = { { "<Leader>e", "<Cmd>Neotree toggle<CR>", desc = "Toggle file tree" }, }, opts = { filesystem = { follow_current_file = { enabled = true }, use_relative_paths = false, }, }, }模糊搜索选Telescope。它不只是找文件,还能做字符串搜索、Git 提交记录浏览、LSP 符号搜索、甚至终端命令补全,是 Neovim 生态里当之无愧的“搜索瑞士军刀”。
{ "nvim-telescope/telescope.nvim", dependencies = { "nvim-lua/plenary.nvim" }, keys = { { "<Leader>ff", "<Cmd>Telescope find_files<CR>", desc = "Find files" }, { "<Leader>fg", "<Cmd>Telescope live_grep<CR>", desc = "Live grep" }, { "<Leader>bb", "<Cmd>Telescope buffers<CR>", desc = "List buffers" }, }, }Telescope 值得花心思调的几个点:
find_files支持隐藏文件过滤。默认不显示.gitignore里的文件,对大型项目来说非常清爽。live_grep默认使用 ripgrep,搜大项目速度碾压传统 grep。安装命令很简单:macOS 上brew install ripgrep,Linux 上apt install ripgrep。- Preview 窗口延迟加载。大文件预览如果卡顿,可以调
sorting_strategy配合layout_config改成右侧预览,体感会好很多。
这些导航工具都是“按需打开、用完即走”的,不会长期霸占屏幕,保持了纯代码编辑区的整洁。
2.5 LSP 与补全:离线也能有智能提示
“Caveman”不是连智能提示都不要了,而是要那种不抢注意力、不闪烁、不卡顿的提示。Neovim 原生 LSP 加上一套轻量的补全组件就能实现。
现状是,Neovim 内置的vim.lsp已经非常成熟,我们只需要做配置而不是从零搭建。
-- mason: 管理 LSP server 本体 { "williamboman/mason.nvim", opts = {}, } -- mason-lspconfig: 自动配置 server 与 Neovim LSP 的桥接 { "williamboman/mason-lspconfig.nvim", opts = { ensure_installed = { "ts_ls", "rust_analyzer", "lua_ls", "pyright" }, }, } -- nvim-lspconfig: 启动特定语言 server { "neovim/nvim-lspconfig", event = { "BufReadPre", "BufNewFile" }, config = function() local lspconfig = require("lspconfig") lspconfig.ts_ls.setup({}) lspconfig.rust_analyzer.setup({}) lspconfig.lua_ls.setup({}) lspconfig.pyright.setup({}) end, }这段配置的逻辑链条是:Mason 负责下载语言服务器二进制,mason-lspconfig 负责把下载好的 server 和 Neovim 的 LSP 客户端对接,nvim-lspconfig 提供每个语言的具体配置入口。
补全部分我用的是nvim-cmp,配合 LuaSnip 做片段补全:
{ "hrsh7th/nvim-cmp", dependencies = { "hrsh7th/cmp-nvim-lsp", "hrsh7th/cmp-buffer", "hrsh7th/cmp-path", "L3MON4D3/LuaSnip", }, config = function() local cmp = require("cmp") cmp.setup({ snippet = { expand = function(args) require("luasnip").lsp_expand(args.body) end, }, mapping = { ["<C-n>"] = cmp.mapping.select_next_item(), ["<C-p>"] = cmp.mapping.select_prev_item(), ["<C-e>"] = cmp.mapping.abort(), ["<CR>"] = cmp.mapping.confirm({ select = true }), }, sources = cmp.config.sources({ { name = "nvim_lsp" }, { name = "buffer" }, { name = "path" }, }), }) end, }这里有一个具体的用户体验细节:补全菜单弹出时机。默认 nvim-cmp 会在你输入is的时候也弹出一堆无关的 buffer 单词。我的建议是调整完sources顺序后,把 buffer 来源的keyword_length设成 3 或 4,再配合cmp.config.window.bordered()改一下菜单样式。宁可少提示,也不要一输入字母就打岔。
注意:LSP server 的数量不是越多越好。对于前端项目,
ts_ls一个足够;写 Rust 就配rust_analyzer;写 Python 用pyright。每多一个语言服务器,都意味着内存占用和多出的配置成本。既然是 caveman,就要克制。
3. 实操过程与核心环节实现
3.1 从零到一:搭建一套可用的 Caveman Neovim
这一节,我会把整个过程按“最小可行”的顺序走一遍。你可以把它当作一个 checklist,照着往下执行即可。
第一步:安装 Neovim 0.9 以上版本
Neovim 版本决定一切。Lazy.nvim、nvim-cmp 这些现代插件都依赖 0.9+ 的 API。macOS 用户:
brew install neovimUbuntu 用户直接apt install neovim通常版本太老,建议用官方提供的 AppImage 或者编译安装。检查版本:
nvim --version第二步:创建配置目录结构
~/.config/nvim/ ├── init.lua ├── lua/ │ ├── plugins.lua # 所有插件声明 │ ├── core/ │ │ ├── options.lua # 基础选项 │ │ ├── keymaps.lua # 快捷键 │ │ └── autocmds.lua # 自动命令 │ ├── lsp/ │ │ └── init.lua # LSP 配置 │ └── cmp/ │ └── init.lua # 补全配置先别管别的,init.lua里只需要三行:
require("core.options") require("core.keymaps") require("plugins")选项、快捷键、插件,三大块各司其职。后面每加一块都往对应的文件里塞,不会乱。
第三步:装一个核心插件来练手
先别一次配完所有东西。以 Telescope 为例,在plugins.lua里加:
{ "nvim-telescope/telescope.nvim", dependencies = { "nvim-lua/plenary.nvim" }, -- 先不配任何快捷键,启动 Neovim 后 :Telescope find_files }重启 Neovim,输入:Lazy看插件是否安装成功,再:Telescope find_files试试效果。确认通了之后再继续加别的模块。
第四步:让核心功能“可见”
Caveman 配置里,状态栏也要精简。我用lualine.nvim,因为它轻量、美观、不喧嚣。设置成默认就好,甚至都不需要刻意做太多定制:
{ "nvim-lualine/lualine.nvim", opts = { options = { theme = "auto", section_separators = { left = "", right = "" }, component_separators = { left = "", right = "" }, }, }, }关掉分隔符,状态栏就只显示文件路径、Git 分支和 LSP 状态。信息少一点,人反而更专注。
3.2 顺手可用的能力:终端老朋友 tmux 和 Git
编辑器配好了,终端的基建也不能拖后腿。Caveman 模式重度依赖终端,而终端的两个关键设施是tmux和Git alias。
tmux 的存在意义:没有它,你在 Neovim 内嵌终端里切出去跑命令、再切回来时,上下文就丢了。有了 tmux,你的整个开发会话变成一个可任意断点续传的持久化工作台。这点上我自己的体验是,tmux 和 Neovim 是天生一对,谁都不能缺席。
基础配置:
# ~/.tmux.conf set -g prefix C-a # 把前缀改成 C-a,避免和 Neovim 的 Ctrl-b 冲突 set -g mouse on set -sg escape-time 10 # 降低 ESC 延迟 bind -n M-1 select-window -t 1 # Alt+1 切到第一个窗口 bind -n M-2 select-window -t 2 bind -n M-3 select-window -t 3 set -g default-terminal "screen-256color" set -g focus-events onescape-time是 tmux 老玩家一定会调整的参数,默认 500ms 会导致 Vim 里按Esc后有可见延迟。改成 10ms 后,进入和退出插入模式的手感会干脆不少。
Git 的快捷键思维。不用图形客户端,全靠 alias 减少打字:
git config --global alias.co checkout git config --global alias.br branch git config --global alias.st status git config --global alias.lg "log --oneline --graph --all --decorate"配合 Neovim 里的gitsigns.nvim插件,可以在行号区域显示 Git 增删改标记,按]c跳到下一个改动点。这种“改哪儿了、我要看什么”的粒度,刚好贴合写代码时的原生活力。
3.3 参数计算与调优记录
配置完成后,不要急着下结论,先用体感验证一下延迟到底怎么样。我提供一个最简单可行的量化指标:从敲下nvim到出现正常可编辑界面的时间。
在配置里加一行启动耗时显示:
-- lua/core/options.lua local start_time = vim.fn.reltime() vim.api.nvim_create_autocmd("UIEnter", { callback = function() local elapsed = vim.fn.reltimefloat(vim.fn.reltime(start_time)) * 1000 vim.notify(string.format("Startup took %.2f ms", elapsed), vim.log.levels.INFO) end, })我自己的实测数据:装完所有 LSP 相关插件后的完整启动耗时约为 118ms。删掉冗余的 dashboard 插件、关闭自动加载一部分插件后,降到 61ms。配置了按文件类型延迟加载后,稳定在 35ms 左右。
这个数字的意义很直接:第一次启动都只要几十毫秒,后面每次操作都在毫秒级响应,根本不存在等待感。而同样场景下 VS Code 从启动到可编辑基本要 2 到 5 秒。差距不是一个量级,是两个。
所以整个调优过程的思路是:
- 先看启动耗时,找到哪些插件是 No.1 耗时大户。
- 再观察高频操作(保存、格式化、跳转定义)是否卡顿。
- 如果出现卡顿,优先怀疑 LSP 和补全,使用
:Lazy profile查看插件加载耗时。
3.4 实操现场:一次完整的 Caveman 开发循环
理论说多了,直接模拟一个真实开发场景。假设我正在改一个 React 项目里的App.tsx,任务是把某个组件的 props 类型改掉。
打开终端,nvim一闪即入。按<Leader>ff,Telescope 弹出来,输入App.tsx回车进入。
光标落到需要修改的类型定义处,按下gd直接跳转到定义——这是 LSP 的默认映射。发现类型名字要改,按ciw(change inner word)输入新名字。
改完后遇到报错信息,按<Leader>fg打开 live_grep,搜相关关键词,检索所有引用项。<C-n>在补全菜单里快速选到需要的变量名,回车确认。
所有修改完成后,<Leader>fm执行格式化,<Leader>w保存。再按:!npm run test在内嵌终端里跑测试。
整个过程里,没有一个动作需要鼠标,没有任何一次等待超过半秒,所有工具都在一个终端窗口里闭环。体验非常自然。
4. 常见问题与排查技巧实录
这部分记录我实际踩过的坑,从频率最高到最低。新人不一定每个都会遇到,但遇到了可以回来查。
4.1 常见问题速查表
| 问题 | 症状 | 原因 | 解决方案 |
|---|---|---|---|
| 启动慢 | nvim要 500ms 以上才进来 | 插件未配置 lazy loading | 使用:Lazy profile找出耗时大户,按 filetype 延迟加载 |
| LSP 不生效 | gd没有反应 | server 未安装 / LSP 未 attach | :LspInfo查看;Mason 里确认 server 已安装 |
| 剪贴板不通 | yank 后系统粘贴没反应 | clipboard 选项未设置 | 设置clipboard = "unnamedplus",确认:checkhealth通过 |
| 补全太吵 | 打字总是弹菜单打断思路 | buffer 来源触发过于频繁 | 提高keyword_length,或关闭 buffer source |
| Tmux 下 ESC 卡顿 | 按Esc要卡一下才退出 | tmux 的 escape-time 过长 | set -sg escape-time 10 |
| 文件树对 Git 状态显示异常 | 图标不对或状态刷新慢 | Neo-tree 依赖git和nvim-web-devicons | 确认 git 在 PATH 里,补装 devicons 插件 |
| 高亮颜色诡异 | 主题花里胡哨看不清 | 主题设置和终端配色冲突 | 换成tokyonight或catppuccin,并调整终端为 truecolor |
4.2 排查思路:先看健康检查
所有基于 Neovim 的问题,第一步永远先跑:
:checkhealth这个命令会扫描当前环境,检测各种外部依赖是否可用的,比如 Python、Node、Lua、ripgrep、fd、git 等。大部分 LSP 不生效、补全失效的根因都能在这里看到头绪。
第二步是:Lazy health,它会检查所有插件的依赖状态和加载情况。
第三步是针对 LSP 的:LspInfo,看当前 buffer 是否 attach 了 server,以及 server 的启动日志。
这三步走完,90% 的基础设施问题都能定位。剩下的就大概率是配置写法的问题了。
4.3 两个独家避坑技巧
第一个:升级插件后立刻出问题,先查插件 tag 和 commit 而不是手改配置。Neovim 插件社区迭代非常快,一个插件大版本更新可能直接改变配置写法。遇到 bug,先看 GitHub 仓库的 README 和最近的 issue,大概率有人已经在讨论同一个问题。我见过太多人升级插件后忙着改自己的配置,最后发现是插件自己的 bug。
第二个:不要盲目抄别人的配置。网上的 caveman 配置仓库很多,什么 nvimdots、kickstart.nvim 都有。可以下载学习,但不要直接拿来用。因为它里面包含的键位映射和插件选择,都是别人按照自己习惯设计的。直接套用,你多半会在某个地方迷路。正确做法是:理解核心,手写一个最小配置,按需去搜插件。时间成本看似高了,但配出来的东西你才真正拥有。
4.4 性能调优实测参考
再给一个更具体的性能记录,方便你自己对比判断。
我目前的完整插件列表有 16 个插件,包括 LSP、补全、文件树、Telescope、Git 标识、主题、状态栏、自动括号等。在 Apple Silicon 机器上的启动耗时是 35ms 左右。
而这个配置的 RAM 占用,nvim主进程大约在 75MB 到 120MB 之间。作为对比,VS Code 打开同样项目时,光编辑器主进程就是 400MB 起,还不算若干个工作区进程和语言服务器进程。
所以对老机器或者带不动 Electron 的轻薄本来说,caveman 的配置在性能维度上的意义是:你可以写代码写到很晚,电脑风扇不转的那种。
5. 扩展思路与个人体会
5.1 从编辑器延伸到整个工作流
配完 Neovim 之后,你可能会发现整个终端环境的使用习惯都会跟着变化。以下几个方向可以作为后续延展:
终端启动器:zellij 或 tmux。把终端窗口打成一个持久化的开发工作台。多个项目会话互不干扰,断开会话后重接回来,所有窗口状态原样恢复。
文件管理器:lf 或 yazi。在终端里用文件管理器和编辑器联动,处理文件复制、移动、重命名时不再切出 GUI。yazi 是较新的选择,界面好看、速度快。
终端主题与字体。给终端配上 Nerd Fonts,装一个顺眼的颜色主题。这会直接影响 Neovim 里代码高亮的观感,值得 10 分钟调一下。
提交信息强化:commitizen 或 gitlint作为 pre-commit 钩子。Caveman 不是不写文档、不写信息规范,而是把规范自动化到 Git 流程里,强制执行,省心。
5.2 每个人都值得试一次 Caveman 模式
我个人试下来的感觉是,caveman 模式最大的价值不是让你“不用鼠标”,而是帮你重新理解工具和效率的关系。
在一个什么都可以自动化的年代,愿意花时间把编辑器压缩到极致、把每个快捷键打磨得顺手,本质上是在对抗“工具复杂度”的熵增。当你清楚地知道自己的编辑器里每个插件是干什么的、每段配置解决什么问题,你对整个开发流程是有掌控感的。
这种掌控感不会让你的代码变得更好,但会让你写代码的心情变得很不一样。就像洞穴人坐在火堆边削石头,削的不是速度,是那种“这个东西是我的手和脑的延伸”的踏实。
5.3 复盘与建议
如果你准备尝试,我的建议是从最简单的一套开始:Neovim 基础配置 + Telescope + LSP + 补全。先运行两周不要再加新东西。这两周里,你会逐渐感受到哪些操作是顺手的、哪些卡手的。两周后,再决定要不要加文件树、要不要加 dashboard、要不要加自动会话。
Caveman 的核心精神是“迟来而非早来”。配置不是一次到位的,它会跟着你的习惯生长。你现在看这篇文章拿到的只是一个骨架,真正让它血肉丰满的,是你每天敲下的那些键。