惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
V
Vulnerabilities – Threatpost
博客园_首页
GbyAI
GbyAI
Martin Fowler
Martin Fowler
S
Secure Thoughts
Help Net Security
Help Net Security
Attack and Defense Labs
Attack and Defense Labs
大猫的无限游戏
大猫的无限游戏
量子位
腾讯CDC
博客园 - 叶小钗
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Microsoft Security Blog
Microsoft Security Blog
Cisco Talos Blog
Cisco Talos Blog
V
V2EX
P
Proofpoint News Feed
T
Tailwind CSS Blog
U
Unit 42
A
Arctic Wolf
PCI Perspectives
PCI Perspectives
B
Blog
F
Fortinet All Blogs
B
Blog RSS Feed
H
Hacker News: Front Page
P
Privacy & Cybersecurity Law Blog
Scott Helme
Scott Helme
G
GRAHAM CLULEY
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
H
Heimdal Security Blog
人人都是产品经理
人人都是产品经理
Forbes - Security
Forbes - Security
TaoSecurity Blog
TaoSecurity Blog
N
Netflix TechBlog - Medium
aimingoo的专栏
aimingoo的专栏
Security Archives - TechRepublic
Security Archives - TechRepublic
Y
Y Combinator Blog
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Latest news
Latest news
P
Privacy International News Feed
SecWiki News
SecWiki News
L
LINUX DO - 最新话题
M
MIT News - Artificial intelligence
W
WeLiveSecurity
博客园 - 聂微东
T
Tor Project blog
T
Troy Hunt's Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Engineering at Meta
Engineering at Meta

咸糖 - 自律者自由

2025 年终总结:降噪、重构与长期主义 在新加坡和新山吃过最好的食物(持续更新) 写给还在迷茫的你:我的三本大学回忆 2024 年终总结 Neovim: No Crash Incremental Selection 2022 年终总结 shell 是一个不错的生产力工具 使用二八法则省力地学习 awk 肉身翻墙新加坡安顿指南 使用 Docker Compose 建立你自己的开发环境 关于编写可维护的代码的一些实践与想法 我为什么使用双向链接做笔记? 关于焦虑和拖延症 Golang: 如何处理日渐膨胀的 interface 使用番茄工作法来更好的利用你的时间 Unix 如何杀死一个进程和它的子孙进程? Golang: 让你的零值更有用 使用 Mock 和 Interface 进行 Golang 单测 关于 Golang Slice 的一些细节 总结一些计算机常用的原则 重新学习英语语法 上班族近期小半年入门投资基金组合的学习与实践经历 疫情期间的肉身翻墙新加坡指南 About me 软技能:大厂底层员工打工指南 软技能:我是如何获取知识与信息的? 分布式的令牌桶算法的实现 实现一个AtomicInteger GC root 在哪里? 什么是 Minor GC/Major GC 漏桶算法的设计与实现 剑指offer 单例模式 TCP 针对面试学习 Actor 如何处理阻塞消息 Akka 源码解析 How to learn scala AES 需要限制 SEED 长度 Java 如何区分==与.equals()方法 2018年年度总结 Java 集合扩容
使用 neovim 作为 PDE(个性化开发环境)
xiantang · 2022-10-29 · via 咸糖 - 自律者自由

【注意】最后更新于 December 29, 2025,文中内容可能已过时,请谨慎使用。

本文不会告诉你如何一步一步地配置 neovim,而是告诉你一些关于 PDE 的 “道”, 不是具体实践的 “术”。

看到 TJ 的youtube 介绍了 neovim 作为 PDE 的使用,感觉很有意思,于是就自己也尝试了一下,感觉还不错,所以就记录一下。

什么是 neovim

neovim 是一个 vim 的分支,vim 是一个文本编辑器,neovim 是 vim 的一个分支,它的目标是提供一个更好的 vim,而不是 vim 的替代品。

neovim 和 vim 有什么区别呢? 区别在于 neovim 重构了 vim 的代码,在兼容 vimscipt 的基础上,支持了 lua 脚本作为配置语言。同时 neovim 在 Github 上比 vim 的社区更加活跃。neovim 有更用的 lsp 服务器,可以理解 neovim 是 vim 的超集。

什么是 PDE

PDE 是个性化开发环境,指的是在满足基础的开发需求的基础上,用户能够对自己使用的开发环境做一些脚本化,自定义化的行为, 从而提升用户的开发体验和效率。

当你不断地能够解决你开发环境中的痛点,你的开发效率会越来越高,你的开发体验会越来越好,这就是 PDE 的魅力所在。

你也能从中不断学到新的东西,在这个过程中,你也会从中获得成就感。

需要满足的基础需求

定义你的 PDE 需要满足的基础需求,比如:

  • 高亮
  • lsp
    • 基础的重构 rename
    • 快速跳转
  • lint
  • 代码建议
  • code snippet
  • debugging
  • 快速找到最近文件

因为只有满足的这些最基础的需求,你才能保证你不会返回到你的老的编辑器中。在此之上不断地找到你自己的痛点,然后解决它,你就会越来越快越来越来越掌握这个工具。

个性化的需求

有些时候我总有一些有趣的需求, 我就简单举一个例子吧:

比如说我很多时候会同时修改多个项目在 vim 中, 但是 nerdtree 的 NERDTreeFind 只会从当前树里面找,并且树的根目录总是错的,我的需求是想要在 nerdtree 的 bookmarks 里面找到这个文件,并且根目录是第一个匹配到的 bookmark.

show off

可以参考我的实现:

https://github.com/xiantang/nvim-conf/blob/dev/lua/nerdtree.lua

基本上所有你想要的功能都可以通过修改 lua 来达成, 或者通过使用 nvim 系列的插件。

  1. 比如说快速唤出一个 terminal 或者一个笔记 txt
  2. 添加一些自定义的 snippet
  3. 等等…

更好的配置管理

其实大家在使用 neovim 来制作自己的 PDE 的时候会发现,你很容易就会把自己的 neovim 搞坏,因为你的配置中会有很多插件,而这些插件是很多时候不兼容的。所以下面两点至关重要:

  1. 快速回滚配置到稳定的版本
  2. 快速找到是哪个版本引入的问题

使用 git 做为 neovim 的配置管理

这个其实很简单,你只需要把你的配置文件放到一个 git 仓库中.

你可以把你最稳定的分枝作为master, 然后你平时修修改改都在 dev 分枝上,当你想要一个功能,就可以在 dev 分枝上修改,然后自己使用一段时间,当功能稳定就将它合并到 master 中。

倘若 master 分枝的稳定版本出现来问题,我推荐一个 git 的神器命令 git-bisect, 你可以通过设置一个行为错误版本,和一个历史的行为正确的版本,这个命令会采用二分法的方式帮助你找到是哪个版本引入来这个问题。

Troubleshooting

主要有几个命令吧:

checkhealth 会检查你的 neovim 的健康状况,比如说你的 neovim 是否支持 lua,是否支持 python, 插件依赖以及是否成功安装等等。 nvim --startuptime 会记录你的 neovim 启动的时间,你可以通过这个来找到是哪个插件导致了你的 neovim 启动变慢。 你也可以通过 Startuptime 这个插件来查看你的 neovim 启动时间。 verbose <map type> <key> 会显示你的按键映射的详细信息,比如说你的按键映射是否成功,是否有冲突等等。 lua =vim.inspect(var) 会打印你需要的变量的信息。

不需要突然地转换, 可以使用 ideavim 然后慢慢切换

如果你不是很熟悉 (neo)vim 的话,我建议你可以先尝试运行 vimtutor 这个命令,来学习一下 vim 的基本操作。 然后你可以在 jetbrains 使用 ideavim 来使用 vim 的快捷键,这样你就可以慢慢的切换到 neovim 中来。 纯 vim 开发其实不是一蹴而就的,需要一段时间的适应,但是我相信你会爱上它的。

不要无脑去直接使用 他人的配置

另外 neovim 其实有很多衍生的发行版本,我的建议是如果你不是很熟悉 neovim 的话,不要直接使用他人的配置,因为你可能会遇到很多问题,但是这些问题你不一定能自己解决,所以如果要使用就尽量从别人的 Minimal 模版中去建立自己的配置吧

有趣的事

  • 使用 firenvim 作为浏览器的编辑器来刷 leetcode twitter
  • 使用 grammarly 作为 英语的language server 来检查你的语法错误

END

你的 PDE 只是最适合你的环境, 本文章不提供作者的配置, 适合我的不一定适合你.

参考

文章作者 xiantang

上次更新 2025-12-29 (4c152d04)