从Vim到Neovim:模式编辑与LSP配置打造高效开发环境
1. 从抗拒到拥抱一个编辑器如何改变工作流一年前当我决定把主力编辑器从那些图形化、功能丰富的现代IDE切换到Vim并最终稳定在Neovim时身边不少同事都觉得我有点“自虐”。毕竟在鼠标点点、自动补全、图形化调试一应俱全的今天去用一个诞生于上世纪、以命令行和模式切换著称的文本编辑器听起来就像是用算盘挑战计算器。但今天在深度使用Vim/Neovim超过一年后我想分享的绝不是一份“劝退指南”而是一份真实的、从挣扎到熟练再到依赖的体验报告。这不仅仅是在学习一个工具更像是在重构自己与代码、与文本交互的思维方式。如果你也对效率提升、对键盘流操作、对打造一个完全属于自己的编辑环境感兴趣那么我的这些感受或许能给你一些真实的参考。Vim和它的现代化分支Neovim核心魅力在于其高度的可定制性和以键盘为中心的操作哲学。它不像VS Code或IntelliJ IDEA那样开箱即用而是提供了一套强大的原语命令、动作、文本对象让你可以像搭积木一样组合出任何你想要的编辑操作。这一年我从一个连:wq都要查半天的新手到如今可以流畅地使用各种组合命令在代码间“舞蹈”这个过程充满了挑战但回报是巨大的代码编辑速度的显著提升、注意力的高度集中以及一个被打磨得无比趁手的“数字瑞士军刀”。无论你是Linux系统管理员、全栈开发者还是经常需要处理大量文本的数据分析师深入理解Vim都能为你打开一扇新的大门。2. 核心理念拆解为什么是Vim/Neovim2.1 模式编辑反直觉背后的高效逻辑几乎所有Vim新手遇到的第一个也是最大的障碍就是“模式”。普通模式、插入模式、可视模式、命令行模式……刚开始时你总会不小心在普通模式下狂按字母打出一堆乱码或者想在插入模式下移动光标却纹丝不动。这种“反直觉”的设计恰恰是Vim效率的基石。它的逻辑在于分离“思考”和“输入”。在普通模式Normal Mode下你不是在输入内容而是在“指挥”文本。这时每一个按键都是一个命令j/k下移/上移w/b向前/向后跳一个单词dd删除一行yy复制一行。你的双手无需离开键盘中心区就能完成所有导航和编辑操作。当你需要真正输入文字时按iinsert进入插入模式此时它就像一个普通的文本编辑器。输入完毕按Esc回到普通模式继续指挥。这种分离让你在编辑时心流更连贯导航、思考、修改、再导航整个过程行云流水完全避免了在键盘和鼠标之间来回切换带来的注意力损耗。实操心得度过模式适应期的关键是强迫自己记住任何非输入状态都默认待在普通模式。把Esc键想象成“回家”的键。很多玩家会映射CapsLock为Esc因为它的位置更顺手。在Neovim中我甚至映射jk这个几乎不会连续输入的组合键到Esc让模式切换更加无缝。2.2 动词名词的组合语法编辑的语言如果说模式是基础语法那么Vim的“动词名词”编辑模型就是其强大的表达语言。这类似于英语的语法结构让你可以用简单的“单词”组合成复杂的“句子”。动词操作比如d删除、c修改即删除并进入插入模式、y复制、v可视选择。名词文本对象/移动比如w一个单词、$行尾、t直到某个字符、iinside内部、aaround包含周围空白。通过组合你可以表达出极其精确的编辑意图dw删除一个单词delete word。c$修改从光标到行尾的内容change to end of line。yit复制一对HTML/XML标签内部的内容yank inside tag。da”删除一个双引号字符串包括引号本身delete around “。这种组合性带来了巨大的威力。你不需要为“删除括号内的所有内容”或“复制到下一个句号”这类操作记忆单独的快捷键。你只需要掌握有限的动词和名词就能通过组合应对无穷的场景。一年下来我的大脑已经形成了肌肉记忆看到一段文本脑子里瞬间就能编译出对应的Vim命令序列。2.3 Neovim的现代化演进不止于Vim如果你搜索“vim nvim 插件”会发现Neovim的社区异常活跃。Neovim并非要取代Vim而是它的一个激进分叉旨在解决Vim长期积累的一些历史包袱并为未来扩展提供更好的基础。内置LSPLanguage Server Protocol支持这是Neovim相比原生Vim最大的飞跃之一。LSP是微软发起的一个协议它让编辑器客户端可以与专门的语言服务器通信从而获得精准的代码补全、定义跳转、悬停提示、重构等IDE级功能。在Neovim中通过安装nvim-lspconfig等插件配合像sumneko_luaLua、pyrightPython、tsserverTypeScript这样的语言服务器你可以获得不输于VS Code的智能感知体验而且这一切都运行在你高度定制的Vim环境中。Lua作为一等公民的配置语言Vim的配置语言是Vimscript功能强大但语法怪异调试困难。Neovim深度集成Lua其核心配置和大量现代插件都用Lua编写。Lua更简洁、性能更好也更容易被广大开发者理解和编写。这意味着你的配置文件通常是~/.config/nvim/init.lua不再是黑魔法而是结构清晰、可维护的代码。更强大的异步处理与APINeovim从架构上就支持真正的异步这使得插件可以在不阻塞编辑器主线程的情况下运行长时间任务如代码格式化、文件搜索、语法检查。你再也感受不到因为一个插件搜索而导致的界面卡顿。丰富的API也催生了像Telescope.nvim模糊查找器、Neo-tree文件树这样体验堪比GUI应用的高质量插件。3. 实战配置与插件生态打造你的专属IDE3.1 配置管理从.vimrc到结构化Lua模块使用Vim/Neovim一年你的配置文件就是你编辑器的“灵魂”。一开始你可能只有一个杂乱的~/.vimrc文件所有设置和插件调用都堆在一起。随着深入你会渴望更清晰的结构。在Neovim的Lua配置体系中一种良好的实践是模块化组织~/.config/nvim/ ├── init.lua -- 主入口文件 ├── lua/ │ ├── core/ -- 核心设置 │ │ ├── options.lua -- 基础选项行号、缩进等 │ │ ├── keymaps.lua -- 自定义快捷键 │ │ └── autocmds.lua -- 自动命令 │ ├── plugins/ -- 插件管理 │ │ ├── init.lua -- 插件列表声明 │ │ ├── setup/ -- 各个插件的配置 │ │ │ ├── lsp.lua │ │ │ ├── telescope.lua │ │ │ └── ... │ └── config.lua -- 加载所有模块在init.lua中你可能只需要几行代码来引导加载这些模块。这种结构让管理成百上千行配置成为可能也便于版本控制如用Git管理你的整个nvim配置目录。注意事项插件配置的加载顺序有时很关键。例如确保颜色主题插件在状态栏插件之前加载可以避免显示问题。使用像lazy.nvim或packer.nvim这样的现代插件管理器它们支持依赖声明和条件加载能很好地管理这些复杂性。3.2 核心插件选型与配置心得插件世界浩瀚如海但有几个类别是构建现代Neovim体验的基石。以下是我经过一年筛选后认为最值得投入时间配置的插件类型及代表插件类别核心价值代表插件个人配置要点插件管理器插件的安装、更新、加载lazy.nvim,packer.nvimlazy.nvim性能极佳采用“懒加载”机制只有用到时才会加载插件极大加快启动速度。文件导航与查找快速定位文件、内容、定义Telescope.nvim,neo-tree.nvimTelescope是模糊查找的瑞士军刀配合ripgrep和fd工具找文件、搜代码、查命令历史快到飞起。我映射leaderff找文件leaderfg实时全局搜索。语法与LSP代码理解、补全、跳转nvim-lspconfig,nvim-cmpnvim-lspconfig用于配置LSP服务器。nvim-cmp是补全引擎核心需要搭配LuaSnip代码片段和各类源如LSP源、缓冲区源。配置稍复杂但一旦配好补全体验脱胎换骨。语法高亮更精准、更美观的代码着色nvim-treesitter它使用Tree-sitter解析器进行语法分析高亮能力远超传统正则表达式方式能识别嵌套语法、注释中的代码等复杂情况。是Neovim的“眼睛”。状态栏与标签栏信息集中展示与导航lualine.nvim,bufferline.nvimlualine可以高度自定义状态栏显示Git分支、LSP状态、文件编码等信息。bufferline以标签页形式展示缓冲区切换文件更直观。版本控制集成在编辑器内进行Git操作gitsigns.nvim,lazygit.nvimgitsigns在行号列显示增删改标记并能预览更改。lazygit通过浮动窗口集成强大的终端Git工具Lazygit。关于“手机刷网课16倍速插件下载”等热词的联想这反映了用户对“效率工具”的极致追求。在Vim世界里这种追求体现在对“移动速度”和“编辑速度”的优化上。比如你可以用/搜索快速跳转用f/t命令行内精准跳跃用C-d/C-u半页跳转配合zz将当前行居中在代码文件中的导航效率远超鼠标滚动。这何尝不是一种“代码浏览的倍速播放”3.3 个性化快捷键映射效率的倍增器Vim默认的快捷键已经很强但真正的威力来自于根据自己习惯进行的重映射Key Mapping。我的原则是将最常用的操作映射到最顺手的位置。Leader键这是一个前缀键用于触发自定义命令序列。我将其设为空格键Space因为它拇指按起来最方便。于是Space s可以保存文件Space /可以清除搜索高亮Space e打开文件树。窗口管理Vim可以分割窗口:sp水平:vsp垂直。我映射C-h/j/k/l在窗口间切换模仿TMux或屏幕阅读器的方向键实现纯键盘无缝跳转。插入模式下的便捷操作我映射C-h/C-l在插入模式下左右移动一个字符避免频繁按方向键映射C-j/C-k在插入模式下新建下行/上行这些小幅优化能显著提升连续输入的舒适度。命令模式快捷映射;为:因为冒号需要按Shift而分号就在小拇指原位输入命令更快。-- 示例在Neovim的Lua配置中设置快捷键 vim.g.mapleader -- 设置Leader键为空格 local keymap vim.keymap.set -- 保存文件 keymap(n, leaders, :wCR, { desc Save file }) -- 用Telescope查找文件 keymap(n, leaderff, cmdTelescope find_filesCR, { desc Find files }) -- 窗口切换 keymap(n, C-h, C-wh, { desc Go to left window }) keymap(n, C-j, C-wj, { desc Go to lower window })4. 学习曲线与持续进阶如何坚持下来并享受其中4.1 必经的四个阶段与应对策略回顾这一年学习Vim/Neovim大致经历了四个心理阶段挫败与困惑期第1周-第1个月最基本的保存退出都成问题编辑效率断崖式下跌。策略接受倒退。这段时间只用于编辑简单的配置文件如~/.bashrc、写笔记或修改简单的脚本。核心目标是熟悉普通模式下的移动h/j/k/l,w/b,$/^和最基本的编辑命令i,a,dd,yy,p。可以开启vimtutor输入这个命令完成官方教程。基础熟练与依赖期第2-3个月基本移动和编辑形成肌肉记忆开始感受到在单个文件内操作的流畅感。开始尝试搜索/,?、替换:%s/old/new/g和可视化模式。策略将Vim设置为其他地方的默认编辑器比如Git的提交信息编辑器git config --global core.editor “nvim”、系统环境变量export EDITOR”nvim”增加曝光率。插件探索与配置期第3-6个月不满足于原生功能开始疯狂搜索“最佳Vim插件”陷入配置泥潭。策略切忌一次性安装太多插件。从一个痛点开始比如先解决文件查找安装Telescope再解决代码补全配置LSP和nvim-cmp。每添加一个插件花时间彻底理解它的配置和快捷键。备份你的配置文件心智模型融合与效率巅峰期6个月后Vim的操作方式成为本能。你不仅在Neovim里用还会在任何支持Vim模式的地方启用它VS Code的Vim插件、浏览器插件、甚至JetBrains IDE。你思考编辑任务的方式变成了“动词名词”的组合。策略开始阅读更高级的Vim技巧学习宏Macro来录制重复操作学习使用更复杂的文本对象如i/a配合括号、标签。4.2 利用现有资源如何高效搜索与学习当遇到问题比如想实现“Ubuntu Vim 整块代码注释”时高效搜索是关键。Vim注释代码通常不用鼠标选中而是用命令。例如Ctrlv进入块可视模式选中多行然后I大写i在行首插入输入//或#按Esc所选行全部被注释。或者在普通模式下对指定行范围操作:10,20s/^/# /在第10到20行行首添加#。搜索时关键词组合很重要“vim comment multiple lines”, “neovim lsp setup python”, “how to exit vim”这是个经典玩笑。多关注Reddit的r/neovim、r/vim社区以及GitHub上星标高的插件仓库的Issue和Discussion里面充满了真知灼见。4.3 常见问题与故障排查实录即使配置了一年依然会遇到各种“坑”。这里记录几个典型问题及其解决思路问题启动Neovim变慢有时卡顿好几秒。排查使用命令nvim --startuptime startup.log启动会生成一个详细的时间日志文件。查看哪个插件或配置项耗时最长。解决大概率是某个插件或脚本同步加载导致。使用lazy.nvim这类支持懒加载的插件管理器将非核心插件配置为事件触发如event “BufRead”或命令触发cmd “Telescope”。禁用或优化耗时长的插件。问题LSP代码补全不工作或者提示“No LSP server attached”。排查运行:LspInfo命令查看当前缓冲区关联的LSP服务器状态。检查是否安装了对应的语言服务器如pyright需要通过npm或pip安装。解决确保nvim-lspconfig已正确配置该语言服务器。检查文件类型是否正确:set ft?。有时需要手动运行:LspStart或重启Neovim。问题自定义快捷键不生效或者与其他插件冲突。排查使用:map your-key命令查看该快捷键当前被映射到了什么功能。可能是被其他插件覆盖了。解决在映射时使用{ noremap true, silent true }选项Lua中noremap可以防止递归映射silent不显示命令。对于可能冲突的键考虑更换为更独特的组合如leader前缀。问题复制yank的内容无法粘贴到系统剪贴板或其他应用。排查Vim有多个寄存器。系统剪贴板对应的是寄存器。运行:reg查看寄存器内容看复制的内容是否在或*寄存器里。解决首先确保你的Neovim版本支持剪贴板编译时带有clipboard特性通常官方发行版都有。在Linux上可能需要安装xclip或wl-clipboardWayland。然后在复制时使用“y可视模式下来复制到系统剪贴板或直接设置vim.opt.clipboard “unnamedplus”让默认复制粘贴都使用系统剪贴板。5. 超越编辑器Vim哲学带来的思维改变使用Vim/Neovim一年后我发现自己收获的远不止一个高效的编辑器。它潜移默化地改变了我处理数字工作的思维方式。对“可组合性”的深刻理解Vim的“动词名词”模式是一种强大的抽象。这让我在设计软件或自动化脚本时也会思考如何将功能拆解成可组合的、原子化的模块然后通过简单的接口将它们组装起来而不是编写一个庞大、僵硬的单体程序。对键盘流的依赖与享受尽可能减少对鼠标的依赖不仅仅是速度的提升更重要的是保持了注意力的连续性。你的眼睛始终聚焦在代码上思路不会因为抬手去摸鼠标而中断。这种沉浸感是提升深度工作效率的关键。对“自己的工具”的拥有感你的Neovim配置是你亲手搭建的城堡每一个插件、每一个快捷键映射都符合你的心意和习惯。它不会因为一次版本更新就改变你熟悉的界面也不会强加给你不需要的功能。这种完全的控制感和定制自由在现代软件越来越追求“开箱即用”但同时也越来越臃肿和同质化的今天显得尤为珍贵。它不仅仅是一个工具更像是你思维的一个外延。最后是否要投入时间学习Vim/Neovim我的感受是如果你满足以下任何一点都值得尝试你每天有大量时间在与文本或代码打交道你对效率有极致的追求并不满足于现有编辑器的速度你享受折腾和定制喜欢让工具百分百贴合自己或者你只是对一种不同的、历经时间考验的交互哲学感到好奇。它的学习曲线确实存在但一旦翻过那个坡顶你会发现一片更广阔、更高效的数字天地。这条路我走了一年并且会毫不犹豫地继续走下去。

相关新闻

Rimraf:Node.js开发中高效删除node_modules等顽固目录的终极方案

Rimraf:Node.js开发中高效删除node_modules等顽固目录的终极方案

1. 从一次“删库”事故说起:为什么需要Rimraf? 那天下午,我正忙着清理一个积压已久的本地Node.js项目,准备把 node_modules 和一堆编译生成的 dist 文件夹删掉,给硬盘腾点空间。像往常一样,我选中文件夹…

2026/10/12 17:53:50 阅读更多 →
PyCharm新手入门:从零配置到第一个Python项目实战

PyCharm新手入门:从零配置到第一个Python项目实战

1. 从“Hello World”到第一个项目:为什么是PyCharm? 如果你刚刚接触Python,或者正准备开始学习,那么“如何运行第一个Python程序”就是你遇到的第一个,也是最关键的一个坎。你可能已经尝试过在记事本里写代码&#xf…

2026/10/4 21:32:25 阅读更多 →
ESP32-Camera 摄像头驱动库完整上手指南:从零驱动摄像头到输出视频流

ESP32-Camera 摄像头驱动库完整上手指南:从零驱动摄像头到输出视频流

ESP32-Camera 摄像头驱动库完整上手指南:从零驱动摄像头到输出视频流 【免费下载链接】esp32-camera 项目地址: https://gitcode.com/gh_mirrors/es/esp32-camera 如果你做过物联网视觉项目,大概率经历过这样的尴尬:买回来的摄像头模…

2026/10/12 20:08:17 阅读更多 →

最新新闻

如何安全调整Meta广告预算:meta-ads-mcp 预算管理与预算排期工具清单

如何安全调整Meta广告预算:meta-ads-mcp 预算管理与预算排期工具清单

【免费下载链接】meta-ads-mcp Meta Ads (Facebook/Instagram) MCP server for Claude, ChatGPT, Perplexity & Cursor — the Meta node of Pipeboard’s 5-platform family ( Google, TikTok, Snap, Reddit). Hosted remote MCP, badged Meta Business Partner, free pla…

2026/10/12 20:08:22 阅读更多 →
三相MMC并网逆变器:拓扑、控制与调试要点全解析

三相MMC并网逆变器:拓扑、控制与调试要点全解析

入行电力电子这几年,接触过的拓扑不算少,但三相MMC(模块化多电平换流器)并网逆变器第一次跑通仿真时,我还是忍不住想多说几句——它用一串低压子模块就叠出了中高压等级的输出波形,完全绕开了“单个管子硬扛…

2026/10/12 20:08:22 阅读更多 →
为什么高斯点要用Morton码排序?揭秘splat-transform的空间局部性技巧

为什么高斯点要用Morton码排序?揭秘splat-transform的空间局部性技巧

【免费下载链接】splat-transform CLI tool and library for 3D Gaussian splat processing and conversion 项目地址: https://gitcode.com/gh_mirrors/sp/splat-transform 点击查看 免费下载 如果你处理过大型 3D 高斯 splat 文件,大概率遇到过这样的…

2026/10/12 20:08:22 阅读更多 →
Kanidm OAuth2 Refresh Token 设计解析:NIB 机制、重放检测与复制一致性

Kanidm OAuth2 Refresh Token 设计解析:NIB 机制、重放检测与复制一致性

后端认证鉴权安全 【免费下载链接】kanidm Kanidm: A simple, secure, and fast identity management platform 项目地址: https://gitcode.com/gh_mirrors/ka/kanidm 点击查看 免费下载 本文围绕 Kanidm 身份管理平台中 OAuth2 刷新令牌(refresh token…

2026/10/12 20:08:22 阅读更多 →
Cats Free Monad 实战指南:用嵌入式 DSL 构建可组合、可重定向的纯函数式程序

Cats Free Monad 实战指南:用嵌入式 DSL 构建可组合、可重定向的纯函数式程序

后端 【免费下载链接】cats Lightweight, modular, and extensible library for functional programming. 项目地址: https://gitcode.com/gh_mirrors/ca/cats 点击查看 免费下载 本文是 Cats 函数式编程库中 cats-free 模块的完整技术指南。自由单子(F…

2026/10/12 20:08:21 阅读更多 →
可靠性数据统计方法与R语言实战:从配套数据集到Weibull建模

可靠性数据统计方法与R语言实战:从配套数据集到Weibull建模

简介:《Statistical Methods for Reliability Data》配套数据集面向可靠性建模学习者和从业者,是这本经典著作的实操补充。包内围绕寿命分布、生存分析、故障率函数、可靠性增长、多组件系统可靠性、寿命试验设计与统计推断等核心知识点,提供…

2026/10/12 20:07:21 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →