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

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
Latest news
Latest news
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
AI
AI
阮一峰的网络日志
阮一峰的网络日志
量子位
Project Zero
Project Zero
Know Your Adversary
Know Your Adversary
Google Online Security Blog
Google Online Security Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Schneier on Security
大猫的无限游戏
大猫的无限游戏
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
K
Kaspersky official blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
Spread Privacy
Spread Privacy
C
CERT Recently Published Vulnerability Notes
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
W
WeLiveSecurity
博客园 - Franky
Last Week in AI
Last Week in AI
博客园 - 聂微东
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
IT之家
IT之家
I
Intezer
The Cloudflare Blog
月光博客
月光博客
N
News | PayPal Newsroom
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
博客园_首页
罗磊的独立博客
NISL@THU
NISL@THU
爱范儿
爱范儿
Jina AI
Jina AI
有赞技术团队
有赞技术团队
The Hacker News
The Hacker News
A
Arctic Wolf
Scott Helme
Scott Helme
Engineering at Meta
Engineering at Meta
P
Proofpoint News Feed

/home/rook1e

AI 编码小记 1 | /home/rook1e 被 CGO 交叉编译折磨的一个周末 | /home/rook1e 独立开发备忘录 | /home/rook1e 使用 Cline + Gemini 2.5 Pro 来做 Vibe coding | /home/rook1e RawWeb 更新:SimHash 和 Meilisearch | /home/rook1e RawWeb.org 的前三次技术栈迭代 | /home/rook1e 配置轻量级 Linux 远程开发环境(Fedora 38) | /home/rook1e 我的透明代理方案 1.0 | /home/rook1e 深入理解 Linux TProxy | /home/rook1e 我的初代 NAS | /home/rook1e 劫持 Golang 编译 | /home/rook1e 初探 Golang 代码混淆 | /home/rook1e 「SF」子域名搜集工具开发小结 | /home/rook1e Code-Breaking 2020 Bashinj | /home/rook1e 浅谈 HTTP 请求走私 | /home/rook1e 从 Material-T 到 Fluid | /home/rook1e
Neovim、终端和生产力 | /home/rook1e
Yuan (rook1e) · 2025-03-30 · via /home/rook1e
目录

我有一个「终身技能」清单,其中包含了我认为可以获得超过 20 年复利的技能,比如写作、Vim。

我对 Vim 的热情在观看 devaslife 的视频后急速升温,他使用 Vim 编辑代码的高效和优雅让我印象深刻。终于在 2023 年五月的一个下午,我开始学习 Vim/Neovim。

从使用 Neovim 开始,我逐步升级了自己的工作流,在终端中度过了一段快乐时光,但最终还是选择在 VS Code 中使用 Neovim。

初试 Neovim

我的目标不是成为 Vim 大师并用从零开始构造一个 IDE,而是提高自己的文本编辑效率。

vimtutor 是一个很好的开始,包含了所有必学的基础操作。之后我开始寻找一套合适的配置,避免自己为了让配置更完美而花费太多时间(虽然后来仍投入了几十个小时)。尝试了 Astro、Lunar 等热门的配置后,我留在了 LazyVim。巧的是之后不久 devaslife 也切换到了 LazyVim,侧面印证了 LazyVim 的质量。

LazyVim 是一套各方面都十分优秀的配置,极易上手,预设键位符合人体力学(这些键位已经成了我对 vim 的初始记忆)。它集成了几乎一个代码编辑器需要的所有功能,同时又让人感到十分清爽。

得益于 Language Server Protocol 和 Tree-sitter,Neovim 中的代码补全、语法高亮能力与 VS Code 是一致的。只需要像插件一样安装对应的包,就可以获得对各种语言的支持。

一两个星期后,常用 Vim 操作已经进入了肌肉记忆,结合 LazyVim 预设的 space spacesfggspace e 等键位,我明显感受到 Vim 或者说 LazyVim 带来的效率提升,开始体会到纯键盘操作一切的快感。

终端工作流

使用了 Neovim 就自然地会想要优化终端工作流。经过一段时间的探索,我目前的常用工具如下:

  • Wezterm:一个 Rust 实现的支持 GPU 加速的终端模拟器,支持使用 Lua 作为配置
  • zsh + pure:我对 shell 没有太多要求,但是得兼容 Debian 上默认的 sh/bash,所以没有使用 fish。zsh 没有过多配置,简单写了个函数做插件管理器,安装了 fzf-tab、zoxide、direnv,以及 zsh-users 系列必装的自动补全和语法高亮,最终 .zshrc 就一百多行,然后用 pure 这套简单的提示符配置替换了 oh-my-zsh
  • 现代版工具
    • fd:更好的 find
    • ripgrep:更好的 grep
    • fzf:模糊搜索,可以与 history、ctrl+r 等结合,提升搜索质量
    • bat:带语法高亮的 cat
  • lazygit:非常好用的 Git 工具,现在除了 rebase、解决合并冲突等情况,我都会用它而不是手敲命令
  • stow:管理上述工具的配置文件

这些工具构成了符合我核心需求的终端环境,并且干净简单。

我也尝试过引入更复杂的工具,比如 tmux/zellij、平铺式窗口管理器。但最终意识到我需要的只是横/纵向分屏,给 Wezterm 添加几个类似 item2 的快捷键就够了。

Neovim -> VS Code + Neovim

高度的自定义能力带给人无穷的想象空间。每天打开 Neovim,我的第一反应不是项目,而是 Neovim 还有哪里可以再配置一下。即使有意地避免自定义配置,不知不觉中我也投入了太多时间在 Neovim Lua API 文档、插件文档、YouTube 相关视频。

除了忍不住追求更好的插件,Neovim 社区中的开发者勤奋且才华横溢,这些插件往往也具有超高的更新频率,不免带来稳定性上的隐患。项目的突然停止维护则可能导致已有的配置、依赖的插件都要更改,意味着用户又要投入大量时间来适应,比如 null-ls 停止维护

当再次花了几小时优化配置后,我突然意识到自己在试图构造一个 VS Code,这违背了学习 Vim 的初衷。于是我开始寻求在 VS Code 上复现这套 Neovim 配置。

VS Code 中有两个流行的 Vim 插件,其中 vscode-neovim 是将用户行为代理到本机上的 Neovim 中,理论上有更好的性能和稳定性。而在 Neovim 配置文件中可以设置当通过 VS Code 使用时不激活 LazyVim,比如:

if vim.g.vscode then
  -- yank to system's clipboard
  vim.opt.clipboard:append("unnamedplus")

  -- undo/REDO via vscode
  -- https://github.com/vscode-neovim/vscode-neovim/issues/1139
  vim.keymap.set("n", "u", "<Cmd>call VSCodeNotify('undo')<CR>")
  vim.keymap.set("n", "<C-r>", "<Cmd>call VSCodeNotify('redo')<CR>")
else
  require("config.lazy")
end

这样我可以在终端中使用 LazyVim,在 VS Code 中使用裸 Neovim。偶尔 VS Code 会丢失与 Neovim 的同步,运行 “Reload Window” 即可修复。

这种方案结合了 VS Code 和 Neovim 的优势,但我也非常怀念在 Neovim 中使用 ctrl+hjkl 移动到任意窗口,以及通过悬浮窗使用 telescope 和 lazygit,一切都是那么自然流畅。

由此 Vim 完全融入了我的开发流,在一次次的键盘敲击中为我节省了大量时间。

反思

技术人对生产力的追求永不停息,但应当时刻提醒自己目标是获得更多产出或节省更多时间,当意识到自己的关注点聚焦在提升生产力本身上,或许就应该停下来了。