<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Vim on Yang's Notes</title><link>https://yanghu.github.io/zh/tags/vim/</link><description>Recent content in Vim on Yang's Notes</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><managingEditor>yang@yhu.me (Yang Hu)</managingEditor><webMaster>yang@yhu.me (Yang Hu)</webMaster><copyright>© 2026 Yang Hu</copyright><lastBuildDate>Mon, 06 Apr 2026 22:30:00 +0800</lastBuildDate><atom:link href="https://yanghu.github.io/zh/tags/vim/index.xml" rel="self" type="application/rss+xml"/><item><title>与 AI 的 Neovim 现代化折腾纪实 (2026版)</title><link>https://yanghu.github.io/zh/posts/coding/neovim-chat-summary-2026/</link><pubDate>Mon, 06 Apr 2026 22:30:00 +0800</pubDate><author>yang@yhu.me (Yang Hu)</author><guid>https://yanghu.github.io/zh/posts/coding/neovim-chat-summary-2026/</guid><description>&lt;p&gt;太久没写代码，重拾 Neovim 时发现不仅肌肉记忆有些生疏，而且因为插件生态的“疯狂内卷”，原来的配置报出了一连串的错误。于是和 AI 结结实实地“折腾”了一番，完成了一次 Neovim 架构的现代化升级。&lt;/p&gt;
&lt;p&gt;这篇博客是我和 AI 聊天复盘的摘要记录，方便以后如果又断档了，可以快速接上思路。&lt;/p&gt;

&lt;h2 class="relative group"&gt;1. 认知转换：从“极客生存手册”到“现代 IDE”
 &lt;div id="1-认知转换从极客生存手册到现代-ide" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-%e8%ae%a4%e7%9f%a5%e8%bd%ac%e6%8d%a2%e4%bb%8e%e6%9e%81%e5%ae%a2%e7%94%9f%e5%ad%98%e6%89%8b%e5%86%8c%e5%88%b0%e7%8e%b0%e4%bb%a3-ide" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;在重新梳理快捷键和工作流时，AI 敏锐地指出我之前的旧文档思维还停留在原生 Vim 时代。而我现在的配置，其实已经是一个极其现代化的 IDE，工具其实在主动配合直觉：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;搜索与查找&lt;/strong&gt;：从敲命令退化到了全屏互动（全面拥抱 &lt;code&gt;fzf-lua&lt;/code&gt;，支持代码预览和悬浮窗）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;精准跳转&lt;/strong&gt;：不再依赖盲按 &lt;code&gt;j/k&lt;/code&gt; 或者原生的标记，而是依靠视觉反馈的 &lt;code&gt;Leap&lt;/code&gt; (&lt;code&gt;s&lt;/code&gt; 瞬移) 和 &lt;code&gt;Flash&lt;/code&gt; (&lt;code&gt;S&lt;/code&gt; 语法树节点选择)。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多文件管理&lt;/strong&gt;：用 &lt;code&gt;Grapple&lt;/code&gt; (&lt;code&gt;&amp;lt;leader&amp;gt;ma&lt;/code&gt; 打标, &lt;code&gt;&amp;lt;leader&amp;gt;n&lt;/code&gt; 轮切) 替代了需要心智负担的数字 Buffer 管理，只把核心文件钉在书签里。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;大纲与排错&lt;/strong&gt;：用 &lt;code&gt;Trouble&lt;/code&gt; 和 &lt;code&gt;Aerial&lt;/code&gt; 侧边栏替代了底部的纯文本 Quickfix 列表。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;2. 踩坑纪实：Treesitter 0.10+ 断代大迁移
 &lt;div id="2-踩坑纪实treesitter-010-断代大迁移" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2-%e8%b8%a9%e5%9d%91%e7%ba%aa%e5%ae%9etreesitter-010-%e6%96%ad%e4%bb%a3%e5%a4%a7%e8%bf%81%e7%a7%bb" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;这次遇到了 Neovim 社区目前最大的一个“断层更新”巨坑。因为我使用了 Neovim 0.12.0，核心 API 的变化导致了连环爆炸：&lt;/p&gt;</description></item><item><title>Neovim 工作流</title><link>https://yanghu.github.io/zh/posts/coding/neovim-workflow/</link><pubDate>Tue, 07 May 2024 12:58:05 -0700</pubDate><author>yang@yhu.me (Yang Hu)</author><guid>https://yanghu.github.io/zh/posts/coding/neovim-workflow/</guid><description>&lt;p&gt;与 Vim 相比，Neovim 内置了许多实用插件和功能，Lua 配置也更易读、更强大。以下是一些在 Nvim 中编写代码的实用技巧。&lt;/p&gt;

&lt;h2 class="relative group"&gt;搜索（文件、文本、诊断、帮助）
 &lt;div id="搜索文件文本诊断帮助" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%90%9c%e7%b4%a2%e6%96%87%e4%bb%b6%e6%96%87%e6%9c%ac%e8%af%8a%e6%96%ad%e5%b8%ae%e5%8a%a9" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;与 &lt;a href="https://yanghu.github.io/zh/posts/search-in-vim/" &gt;search-in-vim&lt;/a&gt; 中介绍的技巧类似，我们可以在文件中搜索文本，或通过过滤文件名来查找文件。在 Neovim 中，我们使用 &lt;code&gt;fzf-lua&lt;/code&gt;，与 &lt;code&gt;fzf.vim&lt;/code&gt; 非常相似。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;使用 FZF 选择器&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;FZF 的界面由一个&lt;strong&gt;选择器&lt;/strong&gt;（对条目列表进行模糊搜索）和一个&lt;strong&gt;预览&lt;/strong&gt;窗口组成。在选择器中，使用 &lt;code&gt;c-j/k/n/p&lt;/code&gt;（或 &lt;code&gt;c-u/d&lt;/code&gt;）&lt;strong&gt;移动&lt;/strong&gt;。&lt;code&gt;Tab&lt;/code&gt;/&lt;code&gt;S-Tab&lt;/code&gt; 用于&lt;strong&gt;选择&lt;/strong&gt;文件。默认操作（&lt;code&gt;Enter&lt;/code&gt;）是编辑文件或发送到 qflist，具体取决于选中数量。若要&lt;strong&gt;编辑&lt;/strong&gt;多个文件，使用 &lt;code&gt;c-e&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;另一个实用命令是&amp;quot;恢复&amp;quot;（&lt;code&gt;&amp;lt;Leader&amp;gt;sr&lt;/code&gt;），可以继续上次的 FZF 搜索。&lt;/p&gt;

&lt;h3 class="relative group"&gt;模糊匹配查找文件
 &lt;div id="模糊匹配查找文件" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%a8%a1%e7%b3%8a%e5%8c%b9%e9%85%8d%e6%9f%a5%e6%89%be%e6%96%87%e4%bb%b6" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;用途&lt;/th&gt;
 &lt;th&gt;快捷键&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;em&gt;当前目录&lt;/em&gt; 中的文件&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Leader&amp;gt;f&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;PWD&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;最近文件（MRU）&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Leader&amp;gt;o&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;非常适合搜索之前打开过的文件&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;em&gt;缓冲区&lt;/em&gt; 的同级文件&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Leader&amp;gt;s.&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;也包含子目录中的文件&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;项目范围的文件（&lt;em&gt;git&lt;/em&gt;）&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Leader&amp;gt;gf&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;只显示 git 跟踪的文件&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;以 &lt;em&gt;缓冲区目录&lt;/em&gt; 为起点的任意路径&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Leader&amp;gt;sf&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;按 &lt;code&gt;Enter&lt;/code&gt; 前可以修改路径&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 class="relative group"&gt;搜索文本
 &lt;div id="搜索文本" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%90%9c%e7%b4%a2%e6%96%87%e6%9c%ac" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;

&lt;h4 class="relative group"&gt;在文件中 Grep
 &lt;div id="在文件中-grep" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%9c%a8%e6%96%87%e4%bb%b6%e4%b8%ad-grep" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h4&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;用途&lt;/th&gt;
 &lt;th&gt;快捷键&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;当前目录中的文件&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;使用 &lt;code&gt;keyword -- glob&lt;/code&gt; 过滤文件（&lt;code&gt;!&lt;/code&gt; 表示排除模式）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Git 根目录&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;g/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;同上&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;当前 word/WORD&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;w&lt;/code&gt;/&lt;code&gt;W&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;w&lt;/code&gt; 在可视模式下也有效&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;实时 grep&lt;/strong&gt;：两个快捷键都使用&amp;quot;实时 grep&amp;quot;，即每次按键都会运行一条新的 &lt;code&gt;ripgrep&lt;/code&gt; 命令并更新结果，可以即时测试 grep 表达式。&lt;/p&gt;</description></item><item><title>在 Vim 中搜索</title><link>https://yanghu.github.io/zh/posts/search-in-vim/</link><pubDate>Sun, 09 May 2021 11:33:39 -0700</pubDate><author>yang@yhu.me (Yang Hu)</author><guid>https://yanghu.github.io/zh/posts/search-in-vim/</guid><description>&lt;p&gt;搜索是开发中最常用也是最重要的操作之一。Vim 提供了非常高效和方便的搜索功能。
这篇笔记记录了一些常用的搜索命令、例子以及自定义的 key mapping。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 ripgrep 搜索文件内容（&lt;code&gt;:Rg2&lt;/code&gt; 或 &lt;code&gt;,gg&lt;/code&gt;，&lt;code&gt;,gw&lt;/code&gt;/&lt;code&gt;,gW&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;使用 git-grep 搜索 git branch/commit，以及使用 fzf 显示 git grep 的结果（&lt;code&gt;:Ggrep&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;使用 fzf/coc list 搜索当前文件/buffers 中的行，实现快速定位/跳转&lt;/li&gt;
&lt;li&gt;使用 quickfix lists 快速访问上述搜索的结果，以及利用 &lt;code&gt;:cdo&lt;/code&gt;/&lt;code&gt;:cfdo&lt;/code&gt; 等命令对结果进行批量操作&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;在文件中通用搜索
 &lt;div id="在文件中通用搜索" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%9c%a8%e6%96%87%e4%bb%b6%e4%b8%ad%e9%80%9a%e7%94%a8%e6%90%9c%e7%b4%a2" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;Ripgrep 与 fzf
 &lt;div id="ripgrep-与-fzf" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#ripgrep-%e4%b8%8e-fzf" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;fzf.vim&lt;/code&gt; 提供了 &lt;code&gt;:Rg&lt;/code&gt; 命令来调用 ripgrep 搜索当前目录。不过，我构建了一个更实用的变体，支持指定路径并向 ripgrep 传递其他参数，映射到快捷键 &lt;code&gt;&amp;lt;Leader&amp;gt;gg&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>Vim 技巧</title><link>https://yanghu.github.io/zh/posts/vim-tips/</link><pubDate>Thu, 15 Apr 2021 00:01:16 -0700</pubDate><author>yang@yhu.me (Yang Hu)</author><guid>https://yanghu.github.io/zh/posts/vim-tips/</guid><description>&lt;h2 class="relative group"&gt;搜索与处理多个文件
 &lt;div id="搜索与处理多个文件" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%90%9c%e7%b4%a2%e4%b8%8e%e5%a4%84%e7%90%86%e5%a4%9a%e4%b8%aa%e6%96%87%e4%bb%b6" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;搜索
 &lt;div id="搜索" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%90%9c%e7%b4%a2" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;关于在文件中搜索词语/符号，请参见 &lt;a href="https://yanghu.github.io/zh/posts/search-in-vim/" &gt;search-in-vim&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;要快速按文件名查找并打开文件，我使用 &lt;code&gt;fzf&lt;/code&gt; 和 &lt;code&gt;coc-list&lt;/code&gt;，以及以下按键绑定。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;通用搜索&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;要在_工作目录_（而非当前文件/缓冲区目录）中打开文件，使用 &lt;code&gt;:Files&lt;/code&gt; 或 &lt;code&gt;,lc&lt;/code&gt;（&lt;em&gt;l&lt;/em&gt;ist &lt;em&gt;c&lt;/em&gt;urrent，列出当前目录）。&lt;/p&gt;
&lt;p&gt;我还创建了快捷命令 &lt;code&gt;,lf&lt;/code&gt;（&lt;em&gt;l&lt;/em&gt;ist &lt;em&gt;f&lt;/em&gt;ile，列出文件），从当前缓冲区所在目录开始，可以在开始搜索前输入路径。&lt;/p&gt;
&lt;p&gt;此外，还有 &lt;code&gt;:Buffers&lt;/code&gt; / &lt;code&gt;,b&lt;/code&gt; 用于列出已打开的缓冲区，方便快速跳转。当打开了很多文件时非常有用。不过，使用 quickfix 列表、标记，或 &lt;code&gt;:Lines&lt;/code&gt; / &lt;code&gt;,l*&lt;/code&gt; 精确跳转到某一行往往更高效。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Git 相关&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;要打开当前 &lt;em&gt;git&lt;/em&gt; 仓库中的文件，使用 &lt;code&gt;:GFiles&lt;/code&gt; 或 &lt;code&gt;,gc&lt;/code&gt;（&lt;em&gt;g&lt;/em&gt;it &lt;em&gt;c&lt;/em&gt;ontent），这使用 &lt;code&gt;git ls-files&lt;/code&gt; 的文件列表，会遵循 &lt;code&gt;.gitignore&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;要只查看已修改的文件，使用 &lt;code&gt;GFiles?&lt;/code&gt; 或 &lt;code&gt;,gs&lt;/code&gt;（&lt;em&gt;g&lt;/em&gt;it &lt;em&gt;s&lt;/em&gt;tatus）。&lt;/p&gt;</description></item></channel></rss>