<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
  <title>红枫吟 - 全部文章</title>
    <subtitle>风落花语风落天，花落风雨花落田.</subtitle>
  <link href="https://honmaple.me/posts/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="https://honmaple.me/posts/"/>
  <generator uri="https://github.com/honmaple/snow">Snow</generator>
    <updated>Fri, 10 Jul 2026 03:44:01 +0000</updated>
  <id>https://honmaple.me</id>
    <entry xml:lang="zh">
      <title>原神深渊讨论</title>
      <link href="https://honmaple.me/posts/2026/07/talk-about-genshin-abyss/" rel="alternate"></link>
      <published>Sun, 05 Jul 2026 13:32:57 +0000</published>
      <updated>Fri, 10 Jul 2026 03:44:01 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2026/07/talk-about-genshin-abyss/" type="text/html"/>
      <id>https://honmaple.me/posts/2026/07/talk-about-genshin-abyss/</id>
      <summary type="html">&lt;blockquote&gt;
&lt;p&gt;最近在网上关于原神&lt;strong&gt;法涅斯&lt;/strong&gt;的立场和别人有了争论，事情的起因是我看到小破站的评论区里总是会有人赞同法涅斯，认为是法涅斯拯救了提瓦特，但对于原神世界观的历史来说，这确实挺奇怪的，法涅斯已经是一个非常明确的侵略者，我真的想不通为什么会有那么多人认可法涅斯的做法，于是有了以下的讨(争)论(议)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A： 法涅斯这种明确的侵略者都有人洗地啊，如果法涅斯不来，龙族的月幕计划也就是现在的虚假之天就会成功，火龙修库特尔也有抗击深渊的文本，即使是葬火之战深渊尼伯龙根归来那也是清醒的尼伯龙根，唤醒修库特尔，囚禁三月女神，改造天基武器，最后才向法涅斯宣战，你管这叫被深渊控制？最后散落在提瓦特的深渊那也是尼伯龙根战败后才掉落的深渊碎片。换句话说，就算提瓦特被毁灭，那也是人家龙族内部的事，法涅斯这个侵略怎么者在某些人口中还变得高大上起来了&lt;/p&gt;
&lt;p&gt;B： 尼伯龙根给火龙喂深渊喂的神志不清怎么不说&lt;/p&gt;
&lt;p&gt;A： 我勒个依旧幻想，官方设定里只有&quot;漆黑的龙王携带深渊力量归来&quot;&quot;火龙修库特尔后来受到深渊侵蚀...&lt;/p&gt;</summary>
      <content type="html">&lt;blockquote&gt;
&lt;p&gt;最近在网上关于原神&lt;strong&gt;法涅斯&lt;/strong&gt;的立场和别人有了争论，事情的起因是我看到小破站的评论区里总是会有人赞同法涅斯，认为是法涅斯拯救了提瓦特，但对于原神世界观的历史来说，这确实挺奇怪的，法涅斯已经是一个非常明确的侵略者，我真的想不通为什么会有那么多人认可法涅斯的做法，于是有了以下的讨(争)论(议)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A： 法涅斯这种明确的侵略者都有人洗地啊，如果法涅斯不来，龙族的月幕计划也就是现在的虚假之天就会成功，火龙修库特尔也有抗击深渊的文本，即使是葬火之战深渊尼伯龙根归来那也是清醒的尼伯龙根，唤醒修库特尔，囚禁三月女神，改造天基武器，最后才向法涅斯宣战，你管这叫被深渊控制？最后散落在提瓦特的深渊那也是尼伯龙根战败后才掉落的深渊碎片。换句话说，就算提瓦特被毁灭，那也是人家龙族内部的事，法涅斯这个侵略怎么者在某些人口中还变得高大上起来了&lt;/p&gt;
&lt;p&gt;B： 尼伯龙根给火龙喂深渊喂的神志不清怎么不说&lt;/p&gt;
&lt;p&gt;A： 我勒个依旧幻想，官方设定里只有&amp;quot;漆黑的龙王携带深渊力量归来&amp;quot;&amp;quot;火龙修库特尔后来受到深渊侵蚀&amp;quot;，并没有任何一句写&amp;quot;尼伯龙根给修库特尔喂深渊&amp;quot;。还神志不清，你以为象拟聚星是什么时候造的，即使神志不清都能造出比肩三月的东西，火龙王可太厉害了&lt;/p&gt;
&lt;p&gt;B： 那我问你修库特尔为什么会被深渊污染？&lt;/p&gt;
&lt;p&gt;A： 修库特尔被深渊污染只是结果，又不是过程，受到深渊侵蚀不等于是尼伯龙根强行给火龙注入深渊。深渊本质是什么，一切不会发生命运的恨意，你说火龙从冰封中醒来发现龙族的处境会不会产生恨意，尼伯龙根带领火龙大战法涅斯时会不会长时间与深渊接触才被深渊侵蚀。火龙的大权是智慧，会不会因为自恃本身的实力主动接触深渊。官方没有的文本和设定，不是只有对龙族不利的一面的才是真实&lt;/p&gt;
&lt;p&gt;B： 纳塔人类没崛起前是火龙一族在肘击深渊，他们研究了那么多针对深渊的东西最后没办法搞了维奇洛波奇特利准备拉着深渊爆，火龙怎么会选择自己去吃深渊。然后终北祷歌说了尼伯龙根是外出的时候被污染了，而且和法打的时候为什么会被深渊污染，法又不用深渊力量&lt;/p&gt;
&lt;p&gt;A： 尼伯龙根都被法涅斯肘翻了，难不成火龙还想着老老实实对抗深渊，然后让法涅斯坐收其成，火龙没这么伟大吧，而且这只是火龙接触深渊的一种可能。另外，与深渊并肩作战也会接触深渊，不是只有和深渊对抗才会接触，而接触了深渊就有可能被深渊侵蚀&lt;/p&gt;
&lt;p&gt;B： 你的想法最大的问题就是只有火龙王被污染了，其他火龙都没有不是吗？而且你但凡好好过了火龙支线，你就知道修库特尔对库库尔坎的做法是默许的，火龙王要真是想吃深渊拉着纳塔爆的性格为什么要默许库库尔坎去找其他方法？他准许了至高领主的不同尝试，就是因为他不知道作何选择才是对的，和你说的为了不让天理吃好处就去尝试用深渊爆完全对不上&lt;/p&gt;
&lt;p&gt;A： 不是已经说了吗，这只是火龙接触深渊的一种可能，又不是一定。大战法涅斯时其它火龙最多利用龙族科技插手，而且根据目前已知信息，修库特尔的实力几乎是七龙王之最，所以才能和尼伯龙根并肩作战，所以才可能长时间接触深渊。另外，我可从未说过是因为不想法涅斯坐收其成，所以就要拉着纳塔爆，顺序不要搞反。我从头到尾论证的只是修库特尔在尼伯龙根被法涅斯肘翻之后，是有可能主动接触深渊然后才被深渊侵蚀，毕竟深渊力量属于天外的力量，而龙王已经是提瓦特的顶点，想要战胜法涅斯，接受外来的力量的有可能的。&lt;/p&gt;
&lt;p&gt;A： 最直观的例子还有阿佩普，阿佩普在尼伯龙根被肘翻之后主动去接触深渊，却被天钉阻止，如果我说火龙修库特尔这时候也去接触了深渊，却因为没有天钉阻止成功接触深渊，这是不是也是一种可能&lt;/p&gt;
&lt;p&gt;B： 所以修库特尔根本就没有去摸深渊的理由，他后面一直在寻求的是如何让火龙一族继续延续，和你说的为了战胜法去摸深渊完全不匹配，只有草龙在目睹牢尼陨落后将深渊视作战胜天理的办法。最后根本没有火龙和尼一起去打天理的文案，换句话说如果火龙和尼一起去打天理了凭什么火龙没挨揍，一直到希巴拉克来杀火龙&lt;/p&gt;
&lt;p&gt;B： 你不要假设了，自己去看看受龙所选者支线里火龙王是一个什么样的设定，阿佩普就是被坑了去吃深渊然后一直被折磨到小草神来帮忙，火龙一族一直在抗击深渊然后你却假设火龙王带头去使用深渊&lt;/p&gt;
&lt;p&gt;A： 不是你先开始假设火龙被尼伯龙根喂了深渊吗，我才举例火龙是有可能主动接触深渊的，都是官方没有的文本和设定，总不能你的假设就是真实，我的假设就只是一个假设。绕来绕去都是要等后续的剧情文本，所以就不要把你认为的论点当成确定的结论来说&lt;/p&gt;
&lt;p&gt;B： 我后续会去看火山书到底有没有明确说是尼喂的，然后火山书里库库尔坎明确说过，阴影之敌不可饶恕，不可能火龙一族都抵抗深渊然后火龙王自己去摸，无论我对不对，你一定不对&lt;/p&gt;
&lt;p&gt;A： 何来不对呢，无论是创造维奇洛波奇特利，或是阴影之敌不可饶恕，再是想拉着纳塔一起爆，那都是修库特尔已经被深渊侵蚀之后的事了。你看再多的文本，只要官方没有明确火龙是怎样被深渊侵蚀，火龙主动接触深渊，因自身恨意被深渊侵蚀，被尼伯龙根强行喂了深渊，这都是其中的一种可能&lt;/p&gt;
&lt;p&gt;B： 因为火龙一族一直在和深渊作斗争，这么简单的理由很难理解吗？&lt;/p&gt;
&lt;p&gt;A： 因为龙族的王，最高的王，提瓦特的王已经被法涅斯这个侵略者肘翻了，想要战胜侵略者，只能依靠天外的力量，即使这个力量是深渊，这很难理解吗？&lt;/p&gt;
&lt;p&gt;B： 到最后龙族都在打深渊，你到底看没看过火山书，我受不了了&lt;/p&gt;
&lt;p&gt;A： 阿佩普主动接触深渊难不成是假的，为了得到禁忌知识与赤王做交易难不成也是假的&lt;/p&gt;
&lt;p&gt;B： 草龙就是不知道深渊的危害被坑了才吃的深渊？然后一直被折磨到小草来帮她，你看她现在怎么不吃了？&lt;/p&gt;
&lt;p&gt;A： 又是把结论当过程，草龙不知道，难道火龙就知道吗，还是说火龙明明知道却故意瞒着草龙&lt;/p&gt;
&lt;p&gt;B： 我求你去看看火山书修库特尔到底是一个怎样的形象，都说了火龙和草龙被牢尼坑了，你但凡了解过修库特尔的形象怎么会假设他会去主动吃深渊&lt;/p&gt;
&lt;p&gt;A： 修库特尔是什么形象，在龙族学者眼中它还是一个性格温和的王，但就是这个性格温和的王却把纳塔几乎所有的天使都屠杀殆尽，你说它性格温和还是性格暴虐。同样的，用龙族眼中的修库特尔形象来论证修库特尔不会主动吃深渊，不亚于用艾莉丝眼中的小可莉完全就是一个乖孩子&lt;/p&gt;
&lt;p&gt;B： 你亲眼看到巨大的双翅自外界而来，那原本光辉伟大的身形如此可悲，竟已完全沉入恐怖的阴影。 漆黑的火焰燎烧大地，以至于白树也近乎枯竭，最后的使者，其漫光的轮廓亦支离破碎，只能寄身于根脉 断绝的残叶。 你告诉我这说的是修库特尔还是尼伯龙根，尼伯龙根回来是不是被污染了，纳塔地脉被打烂，夜神龟进去修补地脉顺便躲着，深渊因为开了口子可以更方便的入侵纳塔&lt;/p&gt;
&lt;p&gt;B： 碰了深渊就一定点，修库特尔主动去吃深渊那就是坑整个纳塔的火龙，天理去圣土化会导致纳塔火龙慢慢退化，火龙一族要么开摆要么寻找方法对抗这个；你去摸深渊那就直接点，有什么好说的？&lt;/p&gt;
</content>
        <category term="Life"></category>
    </entry>
    <entry xml:lang="zh">
      <title>为内容创作者和开发者打造的轻量级静态站点生成器Snow</title>
      <link href="https://honmaple.me/posts/2026/06/snow-intro/" rel="alternate"></link>
      <published>Tue, 16 Jun 2026 14:00:00 +0000</published>
      <updated>Wed, 08 Jul 2026 11:27:13 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2026/06/snow-intro/" type="text/html"/>
      <id>https://honmaple.me/posts/2026/06/snow-intro/</id>
      <summary type="html">&lt;p&gt;如果你想搭建一个博客、技术文档站、项目主页，或者一个可以长期维护的内容网站，你可能已经尝试过许多静态站点生成器。它们功能强大，但有时也意味着复杂的依赖、繁琐的配置和不够直观的扩展方式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Snow&lt;/strong&gt; 提供了另一种选择：一个用 Go 编写的、单二进制分发的静态站点生成器。它足够轻量，也足够灵活，适合从个人博客到多语言文档站的多种场景。&lt;/p&gt;
&lt;h2 id=&quot;heading-1&quot;&gt;开箱即用，快速开始&lt;/h2&gt;
&lt;p&gt;Snow 的使用方式非常直接。你可以通过 Homebrew 安装：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install honmaple/tap/snow
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;也可以直接从源码安装：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;go install github.com...&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;</summary>
      <content type="html">&lt;p&gt;如果你想搭建一个博客、技术文档站、项目主页，或者一个可以长期维护的内容网站，你可能已经尝试过许多静态站点生成器。它们功能强大，但有时也意味着复杂的依赖、繁琐的配置和不够直观的扩展方式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Snow&lt;/strong&gt; 提供了另一种选择：一个用 Go 编写的、单二进制分发的静态站点生成器。它足够轻量，也足够灵活，适合从个人博客到多语言文档站的多种场景。&lt;/p&gt;
&lt;h2 id=&quot;heading-1&quot;&gt;开箱即用，快速开始&lt;/h2&gt;
&lt;p&gt;Snow 的使用方式非常直接。你可以通过 Homebrew 安装：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;brew install honmaple/tap/snow
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;也可以直接从源码安装：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;go install github.com/honmaple/snow@latest
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;创建新站点只需要一条命令：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;snow init myblog
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;随后进入目录，启动本地预览：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;snow server --autoload
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;--autoload&lt;/code&gt; 会监听内容、模板和静态文件变化，自动重新构建并刷新浏览器。写文章、调模板、看效果，整个流程非常顺滑。&lt;/p&gt;
&lt;p&gt;生产环境构建同样简单：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;snow build --mode publish --clean
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;Snow 支持通过 &lt;code&gt;mode&lt;/code&gt; 管理不同环境配置，例如本地开发使用 &lt;code&gt;127.0.0.1&lt;/code&gt;，发布时自动切换为正式域名。&lt;/p&gt;
&lt;h2 id=&quot;heading-2&quot;&gt;支持 Markdown、Org-mode 和 HTML&lt;/h2&gt;
&lt;p&gt;Snow 不只支持常见的 Markdown，也内置支持 Org-mode 和 HTML 内容文件。对于习惯使用 Emacs/Org-mode 管理知识库的用户来说，这一点非常友好。&lt;/p&gt;
&lt;p&gt;你可以在 &lt;code&gt;content/&lt;/code&gt; 目录下自由组织内容：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;content/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;├── about.md
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;└── posts/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;    ├── hello.md
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;    └── bundle/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;6&lt;/span&gt;&lt;span&gt;        ├── index.md
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;7&lt;/span&gt;&lt;span&gt;        └── image.png
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;Snow 支持 Page Bundle，文章和图片等资源可以放在同一个目录中，便于迁移、备份和维护。&lt;/p&gt;
&lt;h2 id=&quot;heading-3&quot;&gt;清晰的内容模型&lt;/h2&gt;
&lt;p&gt;Snow 的内容系统围绕三个核心概念构建：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Page&lt;/strong&gt;：单篇文章或页面&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Section&lt;/strong&gt;：栏目或目录，用来组织文章&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Taxonomy&lt;/strong&gt;：标签、分类、作者等归档系统&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通过 FrontMatter，你可以轻松控制标题、日期、slug、草稿状态、自定义路径、模板、标签和分类：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;title&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;我的文章&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;date&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;2024-01-15&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 4&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;tags&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 5&lt;/span&gt;&lt;span&gt;  - &lt;span style=&quot;color:#ae81ff&quot;&gt;go&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 6&lt;/span&gt;&lt;span&gt;  - &lt;span style=&quot;color:#ae81ff&quot;&gt;web&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 7&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;categories&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 8&lt;/span&gt;&lt;span&gt;  - &lt;span style=&quot;color:#ae81ff&quot;&gt;Programming/Go&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 9&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;draft&lt;/span&gt;: &lt;span style=&quot;color:#66d9ef&quot;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;10&lt;/span&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;对于博客、知识库、项目文档来说，这种模型既直观，也足够强大。&lt;/p&gt;
&lt;h2 id=&quot;heading-4&quot;&gt;多语言、分页、RSS，一应俱全&lt;/h2&gt;
&lt;p&gt;Snow 内置多语言能力，支持通过目录、文件后缀或 FrontMatter 识别语言。你可以为不同语言配置独立内容目录、翻译文件和站点参数。&lt;/p&gt;
&lt;p&gt;同时，Snow 支持 Section 和 Taxonomy 级别的分页，也支持 RSS、Atom、JSON 等自定义输出格式。无论你是在做个人博客、产品文档，还是需要生成机器可读的数据源，Snow 都能覆盖常见需求。&lt;/p&gt;
&lt;h2 id=&quot;heading-5&quot;&gt;灵活的模板系统&lt;/h2&gt;
&lt;p&gt;Snow 使用 Pongo2 模板引擎，语法接近 Django：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;{% for page in pages.OrderBy(&amp;#34;date desc&amp;#34;) %}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;  &amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;a&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;{{ page.Path }}&amp;#34;&lt;/span&gt;&amp;gt;{{ page.Title }}&amp;lt;/&lt;span style=&quot;color:#f92672&quot;&gt;a&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;{% endfor %}
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;模板中可以直接访问页面、栏目、分类、配置和多语言翻译函数。Snow 还提供了常用的列表操作能力，例如排序、分组、筛选、限制数量、上一篇/下一篇等。&lt;/p&gt;
&lt;p&gt;这意味着你可以很轻松地构建文章列表、归档页、标签页、相关推荐和自定义首页。&lt;/p&gt;
&lt;h2 id=&quot;heading-6&quot;&gt;主题可覆盖，站点可定制&lt;/h2&gt;
&lt;p&gt;Snow 支持主题系统。主题可以包含模板、静态资源和配置文件：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;themes/mytheme/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;├── theme.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;├── templates/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;├── static/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;└── i18n/
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;站点本地模板优先级高于主题模板，因此你可以先使用主题快速启动，再按需覆盖某个页面模板，而不必复制整个主题。&lt;/p&gt;
&lt;p&gt;这种设计既适合普通用户快速搭站，也适合开发者维护自己的主题体系。&lt;/p&gt;
&lt;h2 id=&quot;heading-7&quot;&gt;插件 Hook，让构建流程可扩展&lt;/h2&gt;
&lt;p&gt;Snow 内置 Hook 插件系统，可以在内容处理、模板执行、资源处理、写入输出等阶段插入自定义逻辑。&lt;/p&gt;
&lt;p&gt;目前内置插件包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;shortcode&lt;/code&gt;：在内容中嵌入可复用组件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;encrypt&lt;/code&gt;：内容加密&lt;/li&gt;
&lt;li&gt;&lt;code&gt;assets&lt;/code&gt;：静态资源处理&lt;/li&gt;
&lt;li&gt;&lt;code&gt;minify&lt;/code&gt;：输出压缩&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rewrite&lt;/code&gt;：FrontMatter 重写&lt;/li&gt;
&lt;li&gt;&lt;code&gt;filter&lt;/code&gt;：页面筛选&lt;/li&gt;
&lt;li&gt;&lt;code&gt;snakecase&lt;/code&gt;：模板上下文 snake_case 访问&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pelican&lt;/code&gt;：文档格式转换辅助&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;默认启用 &lt;code&gt;assets&lt;/code&gt;、&lt;code&gt;encrypt&lt;/code&gt; 和 &lt;code&gt;shortcode&lt;/code&gt;，其他插件可以按需开启。你还可以通过权重控制插件执行顺序，让构建流程更可控。&lt;/p&gt;
&lt;h2 id=&quot;heading-8&quot;&gt;单二进制，部署简单&lt;/h2&gt;
&lt;p&gt;Snow 使用 Go 编写，可以编译成单个二进制文件。没有复杂运行时，没有庞大的依赖链，也不需要在服务器上安装一整套前端工具。&lt;/p&gt;
&lt;p&gt;对于静态站点来说，这非常实用：本地构建，产物上传，或者直接放进 CI/CD 流程，都很干净。&lt;/p&gt;
&lt;h2 id=&quot;heading-9&quot;&gt;适合谁使用？&lt;/h2&gt;
&lt;p&gt;Snow 特别适合这些用户：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;想搭建个人博客或技术博客的开发者&lt;/li&gt;
&lt;li&gt;希望用 Markdown 或 Org-mode 管理内容的写作者&lt;/li&gt;
&lt;li&gt;需要多语言文档站的项目维护者&lt;/li&gt;
&lt;li&gt;想要轻量、可控、易部署静态站点工具的团队&lt;/li&gt;
&lt;li&gt;喜欢 Go 单二进制工具链的用户&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;heading-10&quot;&gt;总结&lt;/h2&gt;
&lt;p&gt;Snow 的优势不在于把每件事都做得庞大复杂，而在于把静态站点生成中真正重要的能力做得清晰、直接、可扩展。&lt;/p&gt;
&lt;p&gt;它支持多格式内容、多语言、分类归档、分页、自定义输出、主题覆盖、实时预览和插件扩展，同时保持了单二进制工具应有的简洁。&lt;/p&gt;
&lt;p&gt;如果你正在寻找一个轻量但不简陋、灵活但不臃肿的静态站点生成器，Snow 值得一试。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;项目地址&lt;/strong&gt;：&lt;a href=&quot;https://github.com/honmaple/snow&quot;&gt;https://github.com/honmaple/snow&lt;/a&gt;&lt;/p&gt;
</content>
        <category term="Tech"></category>
    </entry>
    <entry xml:lang="zh">
      <title>红枫笔记发布1.0.4版本</title>
      <link href="https://honmaple.me/posts/2026/03/maple-note-v0.1.4/" rel="alternate"></link>
      <published>Thu, 12 Mar 2026 12:21:16 +0000</published>
      <updated>Wed, 17 Jun 2026 15:51:37 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2026/03/maple-note-v0.1.4/" type="text/html"/>
      <id>https://honmaple.me/posts/2026/03/maple-note-v0.1.4/</id>
      <summary type="html">
&lt;p&gt;
最近红枫笔记发布了 &lt;b&gt;v1.0.4&lt;/b&gt; 版本，主要更新功能如下:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 增加&lt;b&gt;数据导出功能&lt;/b&gt;: 可将红枫笔记中的待办事项、纪念日、备忘录及其附件导出到本地
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 增加&lt;b&gt;数据导入功能&lt;/b&gt;: 支持从Flomo、Usememos，或者从红枫笔记自身导出的文件中导入笔记
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 增加&lt;b&gt;数据同步功能&lt;/b&gt;: 支持S3、Webdav的数据同步
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 增加&lt;b&gt;导航功能&lt;/b&gt;：笔记模版、远程服务等功能都能一键直达
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 远程服务增加&lt;b&gt;RSS订阅功能&lt;/b&gt;: 添加RSS链接即可在红枫云盘内查看内容
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;</summary>
      <content type="html">
&lt;p&gt;
最近红枫笔记发布了 &lt;b&gt;v1.0.4&lt;/b&gt; 版本，主要更新功能如下:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 增加&lt;b&gt;数据导出功能&lt;/b&gt;: 可将红枫笔记中的待办事项、纪念日、备忘录及其附件导出到本地
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 增加&lt;b&gt;数据导入功能&lt;/b&gt;: 支持从Flomo、Usememos，或者从红枫笔记自身导出的文件中导入笔记
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 增加&lt;b&gt;数据同步功能&lt;/b&gt;: 支持S3、Webdav的数据同步
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 增加&lt;b&gt;导航功能&lt;/b&gt;：笔记模版、远程服务等功能都能一键直达
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 远程服务增加&lt;b&gt;RSS订阅功能&lt;/b&gt;: 添加RSS链接即可在红枫云盘内查看内容
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;</content>
        <category term="Life"></category>
    </entry>
    <entry xml:lang="zh">
      <title>使用CloudFS连接本地磁盘与多种云存储</title>
      <link href="https://honmaple.me/posts/2026/03/cloudfs-intro/" rel="alternate"></link>
      <published>Tue, 10 Mar 2026 12:27:10 +0000</published>
      <updated>Thu, 18 Jun 2026 12:53:02 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2026/03/cloudfs-intro/" type="text/html"/>
      <id>https://honmaple.me/posts/2026/03/cloudfs-intro/</id>
      <summary type="html">&lt;p&gt;在应用开发中，文件存储常常不是一个“简单上传下载”的问题。&lt;/p&gt;
&lt;p&gt;你可能会遇到这些场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;开发环境使用&lt;strong&gt;本地磁盘&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;生产环境切换到 &lt;strong&gt;S3 对象存储&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;企业内网需要接入 &lt;strong&gt;SMB / SFTP&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;用户希望挂载 &lt;strong&gt;WebDAV / OneDrive / Google Drive&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;文件分发依赖 &lt;strong&gt;GitHub Release&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;后续还要支持更多云盘或私有存储服务&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果每一种存储都单独适配，业务代码很快就会被各种 SDK、认证方式、路径规则和异常处理淹没。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CloudFS 正是为了解决这个问题而生。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CloudFS 是一个 Go 语言云存储抽象库，它将&lt;strong&gt;本地磁盘、多种云盘和常见存储协议...&lt;/strong&gt;&lt;/p&gt;</summary>
      <content type="html">&lt;p&gt;在应用开发中，文件存储常常不是一个“简单上传下载”的问题。&lt;/p&gt;
&lt;p&gt;你可能会遇到这些场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;开发环境使用&lt;strong&gt;本地磁盘&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;生产环境切换到 &lt;strong&gt;S3 对象存储&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;企业内网需要接入 &lt;strong&gt;SMB / SFTP&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;用户希望挂载 &lt;strong&gt;WebDAV / OneDrive / Google Drive&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;文件分发依赖 &lt;strong&gt;GitHub Release&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;后续还要支持更多云盘或私有存储服务&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果每一种存储都单独适配，业务代码很快就会被各种 SDK、认证方式、路径规则和异常处理淹没。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CloudFS 正是为了解决这个问题而生。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;CloudFS 是一个 Go 语言云存储抽象库，它将&lt;strong&gt;本地磁盘、多种云盘和常见存储协议&lt;/strong&gt;统一到一套类似文件系统的接口中。开发者只需要面向 &lt;code&gt;cloudfs.FS&lt;/code&gt; 编程，就可以完成常见文件操作。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;// 列出目录文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;files&lt;/span&gt;, &lt;span style=&quot;color:#a6e22e&quot;&gt;err&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;fs&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;List&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;ctx&lt;/span&gt;, &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 3&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 4&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;// 读取文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;r&lt;/span&gt;, &lt;span style=&quot;color:#a6e22e&quot;&gt;err&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;fs&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Open&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;ctx&lt;/span&gt;, &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;/file.txt&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 6&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 7&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;// 创建或上传文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 8&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;w&lt;/span&gt;, &lt;span style=&quot;color:#a6e22e&quot;&gt;err&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;fs&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Create&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;ctx&lt;/span&gt;, &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;/docs/hello.txt&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 9&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;10&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;// 移动文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;11&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;err&lt;/span&gt; = &lt;span style=&quot;color:#a6e22e&quot;&gt;fs&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Move&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;ctx&lt;/span&gt;, &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;/old.txt&amp;#34;&lt;/span&gt;, &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;/archive&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;底层到底是本地目录、S3、WebDAV、SFTP、SMB、Google Drive，还是 OneDrive，对于业务代码来说不再重要。&lt;/p&gt;
&lt;h2 id=&quot;heading-1&quot;&gt;多驱动支持，存储接入更自由&lt;/h2&gt;
&lt;p&gt;CloudFS 已内置丰富的驱动支持：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Local&lt;/strong&gt;：本地文件系统&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FTP / SFTP&lt;/strong&gt;：传统文件传输协议&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;S3&lt;/strong&gt;：兼容 S3 的对象存储&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SMB&lt;/strong&gt;：企业内网文件共享&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WebDAV&lt;/strong&gt;：常见网盘与文件服务协议&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Drive / OneDrive&lt;/strong&gt;：主流云盘&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub / GitHub Release&lt;/strong&gt;：适合文件分发场景&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Upyun / Openlist / Foxel&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;115 / Quark&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这意味着你可以用同一套业务逻辑连接不同存储后端。&lt;/p&gt;
&lt;p&gt;典型使用方式包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;开发环境使用 &lt;code&gt;local&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;生产环境使用 &lt;code&gt;s3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;企业部署使用 &lt;code&gt;smb&lt;/code&gt; 或 &lt;code&gt;sftp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;个人网盘场景支持 &lt;code&gt;webdav&lt;/code&gt;、&lt;code&gt;gdrive&lt;/code&gt;、&lt;code&gt;onedrive&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;文件下载场景接入 &lt;code&gt;github-release&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;直接创建驱动：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;fs&lt;/span&gt;, &lt;span style=&quot;color:#a6e22e&quot;&gt;err&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;webdav&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;New&lt;/span&gt;(&lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;webdav&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Option&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;Endpoint&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;https://example.com/dav&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;Username&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;Password&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;pass&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;})
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;也可以通过统一工厂动态创建：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;fs&lt;/span&gt;, &lt;span style=&quot;color:#a6e22e&quot;&gt;err&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;driver&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;New&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;webdav&amp;#34;&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;map&lt;/span&gt;[&lt;span style=&quot;color:#66d9ef&quot;&gt;string&lt;/span&gt;]&lt;span style=&quot;color:#66d9ef&quot;&gt;any&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;endpoint&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;https://example.com/dav&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;username&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;pass&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;})
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;如果配置已经是 JSON，还可以使用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;driver.NewFromString&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;driver.Exists&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;driver.VerifyOption&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这对于&lt;strong&gt;配置化系统、后台管理平台、插件化应用&lt;/strong&gt;非常友好。&lt;/p&gt;
&lt;h2 id=&quot;heading-2&quot;&gt;中间件机制，让文件系统能力可以组合&lt;/h2&gt;
&lt;p&gt;CloudFS 不只是封装驱动，它还提供了&lt;strong&gt;可组合的中间件机制&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;你可以像搭积木一样增强文件系统能力：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;缓存中间件&lt;/strong&gt;：缓存目录列表和文件信息，减少远端请求&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;限流中间件&lt;/strong&gt;：控制访问频率，避免触发服务限制&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;压缩中间件&lt;/strong&gt;：写入时压缩，读取时自动解压&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;加密中间件&lt;/strong&gt;：支持文件内容、文件名、目录名加密&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hook 中间件&lt;/strong&gt;：支持路径映射、文件过滤、自定义处理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prefix 中间件&lt;/strong&gt;：将某个目录前缀映射为文件系统根路径&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;示例：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;fs&lt;/span&gt;, &lt;span style=&quot;color:#a6e22e&quot;&gt;err&lt;/span&gt; = &lt;span style=&quot;color:#a6e22e&quot;&gt;cloudfs&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;New&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;fs&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;middleware&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;PrefixFS&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;/data&amp;#34;&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;middleware&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;CacheFS&lt;/span&gt;(&lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;middleware&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;CacheOption&lt;/span&gt;{}),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 id=&quot;heading-3&quot;&gt;像操作文件系统一样操作云端资源&lt;/h2&gt;
&lt;p&gt;CloudFS 的核心接口非常直观：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;type&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;FS&lt;/span&gt; &lt;span style=&quot;color:#66d9ef&quot;&gt;interface&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;List&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;context&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Context&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;string&lt;/span&gt;, &lt;span style=&quot;color:#f92672&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;ListOption&lt;/span&gt;) ([]&lt;span style=&quot;color:#a6e22e&quot;&gt;FileInfo&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;error&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 3&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;Move&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;context&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Context&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;string&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;string&lt;/span&gt;) &lt;span style=&quot;color:#66d9ef&quot;&gt;error&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 4&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;Copy&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;context&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Context&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;string&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;string&lt;/span&gt;) &lt;span style=&quot;color:#66d9ef&quot;&gt;error&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 5&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;Rename&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;context&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Context&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;string&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;string&lt;/span&gt;) &lt;span style=&quot;color:#66d9ef&quot;&gt;error&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 6&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;Remove&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;context&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Context&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;string&lt;/span&gt;) &lt;span style=&quot;color:#66d9ef&quot;&gt;error&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 7&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;MakeDir&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;context&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Context&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;string&lt;/span&gt;) &lt;span style=&quot;color:#66d9ef&quot;&gt;error&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 8&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;Stat&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;context&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Context&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;string&lt;/span&gt;) (&lt;span style=&quot;color:#a6e22e&quot;&gt;FileInfo&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;error&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 9&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;Open&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;context&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Context&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;string&lt;/span&gt;) (&lt;span style=&quot;color:#a6e22e&quot;&gt;File&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;error&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;10&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;Create&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;context&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Context&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;string&lt;/span&gt;) (&lt;span style=&quot;color:#a6e22e&quot;&gt;FileWriter&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;error&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;11&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;Close&lt;/span&gt;() &lt;span style=&quot;color:#66d9ef&quot;&gt;error&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;12&lt;/span&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;它保留了 Go 开发者熟悉的接口风格：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;io.Reader&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;io.Seeker&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;io.Closer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;io.WriteCloser&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;io/fs.FileInfo&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此，CloudFS 很容易和现有 Go 生态集成。&lt;/p&gt;
&lt;p&gt;文件信息也在标准 &lt;code&gt;io/fs.FileInfo&lt;/code&gt; 基础上增加了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Path()&lt;/code&gt;：完整路径&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Type()&lt;/code&gt;：文件类型&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ExtraInfo()&lt;/code&gt;：驱动额外元数据&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;既保留标准语义，也给不同存储驱动留下扩展空间。&lt;/p&gt;
&lt;h2 id=&quot;heading-4&quot;&gt;快速开始&lt;/h2&gt;
&lt;p&gt;安装 CloudFS：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;go get github.com/honmaple/cloudfs
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;只引入需要的驱动：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;github.com/honmaple/cloudfs/driver/webdav&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;或者一次性注册全部内置驱动：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;import&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;_&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;github.com/honmaple/cloudfs/driver/all&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;完整示例：&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;package&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;import&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 4&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;context&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 5&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;io&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 6&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;strings&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 7&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 8&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;github.com/honmaple/cloudfs/driver/local&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 9&lt;/span&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;10&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;11&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;func&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;12&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;fs&lt;/span&gt;, &lt;span style=&quot;color:#a6e22e&quot;&gt;err&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;local&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;New&lt;/span&gt;(&lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;local&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Option&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;13&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#a6e22e&quot;&gt;Path&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;/tmp/cloudfs&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;14&lt;/span&gt;&lt;span&gt;    })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;15&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#66d9ef&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;err&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color:#66d9ef&quot;&gt;nil&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;16&lt;/span&gt;&lt;span&gt;        panic(&lt;span style=&quot;color:#a6e22e&quot;&gt;err&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;17&lt;/span&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;18&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#66d9ef&quot;&gt;defer&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;fs&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;19&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;20&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;ctx&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;context&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Background&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;21&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;22&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;_&lt;/span&gt; = &lt;span style=&quot;color:#a6e22e&quot;&gt;fs&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;MakeDir&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;ctx&lt;/span&gt;, &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;/docs&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;23&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;24&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;w&lt;/span&gt;, &lt;span style=&quot;color:#a6e22e&quot;&gt;_&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;fs&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Create&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;ctx&lt;/span&gt;, &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;/docs/hello.txt&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;25&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;_&lt;/span&gt;, &lt;span style=&quot;color:#a6e22e&quot;&gt;_&lt;/span&gt; = &lt;span style=&quot;color:#a6e22e&quot;&gt;io&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Copy&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;w&lt;/span&gt;, &lt;span style=&quot;color:#a6e22e&quot;&gt;strings&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;NewReader&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;hello cloudfs&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;26&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;_&lt;/span&gt; = &lt;span style=&quot;color:#a6e22e&quot;&gt;w&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Close&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;27&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;28&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;files&lt;/span&gt;, &lt;span style=&quot;color:#a6e22e&quot;&gt;_&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;fs&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;List&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;ctx&lt;/span&gt;, &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;/docs&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;29&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#66d9ef&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;_&lt;/span&gt;, &lt;span style=&quot;color:#a6e22e&quot;&gt;file&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;:=&lt;/span&gt; &lt;span style=&quot;color:#66d9ef&quot;&gt;range&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;files&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;30&lt;/span&gt;&lt;span&gt;        println(&lt;span style=&quot;color:#a6e22e&quot;&gt;file&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Path&lt;/span&gt;(), &lt;span style=&quot;color:#a6e22e&quot;&gt;file&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Name&lt;/span&gt;(), &lt;span style=&quot;color:#a6e22e&quot;&gt;file&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;Size&lt;/span&gt;())
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;31&lt;/span&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;32&lt;/span&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 id=&quot;heading-5&quot;&gt;适合哪些项目？&lt;/h2&gt;
&lt;p&gt;CloudFS 特别适合这些场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;网盘系统&lt;/strong&gt;：统一管理本地、WebDAV、S3、云盘等资源&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文件管理器&lt;/strong&gt;：用一套接口浏览和操作多种存储&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;备份系统&lt;/strong&gt;：在不同存储后端之间归档与迁移&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;同步工具&lt;/strong&gt;：屏蔽不同云服务之间的接口差异&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;内容分发服务&lt;/strong&gt;：对接 GitHub Release、S3、WebDAV 等下载源&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;企业内部工具&lt;/strong&gt;：同时支持 SMB、SFTP、本地目录等环境&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;插件化平台&lt;/strong&gt;：通过动态驱动注册和 JSON 配置创建文件系统&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你正在为不同存储后端写重复的适配代码，&lt;strong&gt;CloudFS 可以把复杂度收束到一套清晰、统一、可组合的 Go 接口里。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;heading-6&quot;&gt;总结&lt;/h2&gt;
&lt;p&gt;CloudFS 的核心价值可以概括为三点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;统一接口&lt;/strong&gt;：用一套 &lt;code&gt;cloudfs.FS&lt;/code&gt; 操作不同存储&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多驱动支持&lt;/strong&gt;：覆盖本地、协议、对象存储和主流云盘&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;中间件组合&lt;/strong&gt;：缓存、限流、压缩、加密、路径映射灵活叠加&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于需要多存储支持的 Go 项目来说，&lt;strong&gt;CloudFS 是一个轻量、清晰、可扩展的基础库&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;项目地址&lt;/strong&gt;：&lt;a href=&quot;https://github.com/honmaple/cloudfs&quot;&gt;https://github.com/honmaple/cloudfs&lt;/a&gt;&lt;/p&gt;
</content>
        <category term="Tech"></category>
    </entry>
    <entry xml:lang="zh">
      <title>ubuntu24.04环境配置</title>
      <link href="https://honmaple.me/posts/2026/01/ubuntu-note/" rel="alternate"></link>
      <published>Fri, 02 Jan 2026 18:51:48 +0000</published>
      <updated>Sun, 22 Feb 2026 22:20:06 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2026/01/ubuntu-note/" type="text/html"/>
      <id>https://honmaple.me/posts/2026/01/ubuntu-note/</id>
      <summary type="html">
&lt;blockquote&gt;
&lt;p&gt;
最近我在腾讯云的服务器快过期了，但是续费又太贵，所以趁着活动又买了一台3年的轻量云。其实这台服务器上也没有什么服务，主要还是因为有一个已经备案的域名需要保一下，否则备案掉了之后再次备案太过麻烦。
&lt;/p&gt;

&lt;p&gt;
我之前的服务器还在用着 &lt;b&gt;ubuntu18.04 LTS&lt;/b&gt;，此次迁移准备升级一下系统到 &lt;b&gt;ubuntu24.04 LTS&lt;/b&gt;，故此记录
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
注意: 以下命令以 &lt;code&gt;#&lt;/code&gt; 开头则使用的是root账户，以 &lt;code&gt;$&lt;/code&gt; 开头则为普通账户
&lt;/p&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;系统设置&lt;/h2&gt;
&lt;h3 id=&quot;heading-1.1&quot;&gt;修改主机名称&lt;/h3&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;# hostnamectl set-hostname [名称]&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-1.2&quot;&gt;创建新用户&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 删除已存在的用户
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;# deluser --remove-home ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2...&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;</summary>
      <content type="html">
&lt;blockquote&gt;
&lt;p&gt;
最近我在腾讯云的服务器快过期了，但是续费又太贵，所以趁着活动又买了一台3年的轻量云。其实这台服务器上也没有什么服务，主要还是因为有一个已经备案的域名需要保一下，否则备案掉了之后再次备案太过麻烦。
&lt;/p&gt;

&lt;p&gt;
我之前的服务器还在用着 &lt;b&gt;ubuntu18.04 LTS&lt;/b&gt;，此次迁移准备升级一下系统到 &lt;b&gt;ubuntu24.04 LTS&lt;/b&gt;，故此记录
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
注意: 以下命令以 &lt;code&gt;#&lt;/code&gt; 开头则使用的是root账户，以 &lt;code&gt;$&lt;/code&gt; 开头则为普通账户
&lt;/p&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;系统设置&lt;/h2&gt;
&lt;h3 id=&quot;heading-1.1&quot;&gt;修改主机名称&lt;/h3&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;# hostnamectl set-hostname [名称]&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-1.2&quot;&gt;创建新用户&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 删除已存在的用户
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;# deluser --remove-home ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;# deluser --remove-home lighthouse&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 添加新用户
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;# adduser myuser&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
      用户信息比如全名、房间号等，这些可以直接按 &lt;code&gt;Enter&lt;/code&gt; 跳过
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 添加sudo权限
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;# usermod -aG sudo myuser&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 添加公钥
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;# su - 用户名
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;$ mkdir ~/.ssh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;$ chmod 700 ~/.ssh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;$ vi ~/.ssh/authorized_keys
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;$ chmod 600 ~/.ssh/authorized_keys&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;heading-1.3&quot;&gt;连接数限制&lt;/h3&gt;
&lt;p&gt;
    编辑文件 &lt;code&gt;/etc/security/limits.conf&lt;/code&gt;，在文件末尾添加以下内容：
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;* soft nofile 65535
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;* hard nofile 65535
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;* soft nproc 20480
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;* hard nproc 20480&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
    注：&lt;b&gt;nofile&lt;/b&gt; 是文件打开数，&lt;b&gt;nproc&lt;/b&gt; 是最大进程数。&lt;code&gt;*&lt;/code&gt; 代表除 &lt;b&gt;root&lt;/b&gt; 外的所有用户，如果需要添加 &lt;b&gt;root&lt;/b&gt;，则增加
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;root soft nofile 65535
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;root hard nofile 65535&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-1.4&quot;&gt;交换内存&lt;/h3&gt;
&lt;p&gt;
    默认的 &lt;code&gt;vm.swappiness&lt;/code&gt; 为 &lt;b&gt;60&lt;/b&gt;，表示内存使用率超过 &lt;b&gt;100%-60%=40%&lt;/b&gt; 时就开始使用交换分区
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 查看当前swappiness
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ cat /proc/sys/vm/swappiness&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 临时修改
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ sudo sysctl vm.swappiness=10
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;$ cat /proc/sys/vm/swappiness&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 永久修改
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ echo &amp;#34;vm.swappiness=10&amp;#34; | sudo tee -a /etc/sysctl.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;$ sudo sysctl -p&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;heading-1.5&quot;&gt;启用BBR&lt;/h3&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ echo &amp;#34;net.core.default_qdisc=fq&amp;#34; | sudo tee -a /etc/sysctl.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;$ echo &amp;#34;net.ipv4.tcp_congestion_control=bbr&amp;#34; | sudo tee -a /etc/sysctl.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;$ sudo sysctl -p&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h2 id=&quot;heading-2&quot;&gt;系统服务&lt;/h2&gt;
&lt;h3 id=&quot;heading-2.1&quot;&gt;motd&lt;/h3&gt;
&lt;p&gt;
    禁用终端广告
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;sudo sed -i &amp;#39;s/ENABLED=1/ENABLED=0/&amp;#39; /etc/default/motd-news&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-2.2&quot;&gt;pro&lt;/h3&gt;
&lt;p&gt;
    禁用 &lt;b&gt;pro&lt;/b&gt; 和 &lt;b&gt;esm&lt;/b&gt; 的相关提示
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ sudo chmod -x /etc/update-motd.d/10-help-text
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;$ sudo chmod -x /etc/update-motd.d/91-contract-ua-esm-status
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;$ sudo chmod -x /etc/update-motd.d/90-updates-available&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
    只清空，不删除文件
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;sudo truncate -s 0 /etc/apt/apt.conf.d/20apt-esm-hook.conf&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-2.3&quot;&gt;ssh&lt;/h3&gt;
&lt;p&gt;
    修改配置 &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 修改端口
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;Port 22&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
      取消注释并修改为想要的端口，然后在腾讯云控制台防火墙添加放行策略
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 禁用root登陆
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;PermitRootLogin no&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
      请在添加完成&lt;b&gt;普通用户&lt;/b&gt;后再操作
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 重启服务
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ sudo systemctl restart ssh&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
      如果修改 &lt;code&gt;sshd_config&lt;/code&gt; 不生效
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ sudo systemctl stop ssh.socket
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;$ sudo systemctl disable ssh.socket
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;$ sudo systemctl restart ssh&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;heading-2.4&quot;&gt;unattended-upgrades&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 停止服务
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ sudo systemctl stop unattended-upgrades
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;$ sudo systemctl disable unattended-upgrades&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 卸载
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ sudo apt remove --purge unattended-upgrades&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;heading-2.5&quot;&gt;snap&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 停止服务
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ sudo systemctl stop snapd.service
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;$ sudo systemctl disable snapd.service
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;$ sudo systemctl mask snapd.service&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 查看已安装软件
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ snap list&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 卸载安装软件(把使用 &lt;b&gt;snap&lt;/b&gt; 安装的软件依次卸载)
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ sudo snap remove --purge [软件名称]&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 卸载 &lt;b&gt;snap&lt;/b&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ sudo apt autoremove --purge snapd&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
      清理目录
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;$&lt;/span&gt; sudo rm &lt;span style=&quot;color:#f92672&quot;&gt;-&lt;/span&gt;rf &lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;cache&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;snapd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;$&lt;/span&gt; sudo rm &lt;span style=&quot;color:#f92672&quot;&gt;-&lt;/span&gt;rf &lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;snap
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;$&lt;/span&gt; sudo rm &lt;span style=&quot;color:#f92672&quot;&gt;-&lt;/span&gt;rf &lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;var&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;lib&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;snapd&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 阻止 &lt;b&gt;snapd&lt;/b&gt; 被自动重新安装
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ sudo cat &amp;lt;&amp;lt;EOF | sudo tee /etc/apt/preferences.d/nosnap.pref
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;Package: snapd
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;Pin: release a=*
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;Pin-Priority: -10
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;heading-3&quot;&gt;其它服务&lt;/h2&gt;
&lt;h3 id=&quot;heading-3.1&quot;&gt;docker&lt;/h3&gt;
&lt;p&gt;
    官方文档: &lt;a href=&quot;https://docs.docker.com/engine/install/ubuntu/&quot;&gt;https://docs.docker.com/engine/install/ubuntu/&lt;/a&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 设置apt仓库
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;$&lt;/span&gt; sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;$&lt;/span&gt; sudo apt install ca&lt;span style=&quot;color:#f92672&quot;&gt;-&lt;/span&gt;certificates curl
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;$&lt;/span&gt; sudo install &lt;span style=&quot;color:#f92672&quot;&gt;-&lt;/span&gt;m &lt;span style=&quot;color:#ae81ff&quot;&gt;0755&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;-&lt;/span&gt;d &lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;apt&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;keyrings
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 4&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;$&lt;/span&gt; sudo curl &lt;span style=&quot;color:#f92672&quot;&gt;-&lt;/span&gt;fsSL https:&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;download&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;docker&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;com&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;linux&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;ubuntu&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;gpg &lt;span style=&quot;color:#f92672&quot;&gt;-&lt;/span&gt;o &lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;apt&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;keyrings&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;docker&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;asc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;$&lt;/span&gt; sudo chmod a&lt;span style=&quot;color:#f92672&quot;&gt;+&lt;/span&gt;r &lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;apt&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;keyrings&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;docker&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;asc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 6&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;$&lt;/span&gt; sudo tee &lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;apt&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;sources&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;list&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;d&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;docker&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;sources &lt;span style=&quot;color:#f92672&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 7&lt;/span&gt;&lt;span&gt;Types: deb
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 8&lt;/span&gt;&lt;span&gt;URIs: https:&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;download&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;docker&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;com&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;linux&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 9&lt;/span&gt;&lt;span&gt;Suites: &lt;span style=&quot;color:#f92672&quot;&gt;$&lt;/span&gt;(&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;os&lt;span style=&quot;color:#f92672&quot;&gt;-&lt;/span&gt;release &lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; echo &lt;span style=&quot;color:#e6db74&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${UBUNTU_CODENAME:-$VERSION_CODENAME}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;10&lt;/span&gt;&lt;span&gt;Components: stable
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;11&lt;/span&gt;&lt;span&gt;Signed&lt;span style=&quot;color:#f92672&quot;&gt;-&lt;/span&gt;By: &lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;etc&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;apt&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;keyrings&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;docker&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;asc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;12&lt;/span&gt;&lt;span&gt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;13&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;$&lt;/span&gt; sudo apt update&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 安装
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 普通用户权限
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ sudo usermod -aG docker [用户名]&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 镜像
      由于官方仓库无法连接，修改 &lt;code&gt;/etc/docker/daemon.json&lt;/code&gt; 添加下面配置
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;registry-mirrors&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;https://mirror.ccs.tencentyun.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;    ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
      然后重启docker即可
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ sudo systemctl restart docker&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;heading-3.2&quot;&gt;other&lt;/h3&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ sudo apt install tree&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3 id=&quot;heading-3.3&quot;&gt;腾讯云组件&lt;/h3&gt;
&lt;p&gt;
    卸载腾讯云内置的组件
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;$ sudo /usr/local/qcloud/monitor/barad/admin/uninstall.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;$ sudo /usr/local/qcloud/stargate/admin/uninstall.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;$ sudo /usr/local/qcloud/YunJing/uninst.sh&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;</content>
        <category term="Linux"></category>
    </entry>
    <entry xml:lang="zh">
      <title>让Eglot支持tailwindcss以及多个LSP服务</title>
      <link href="https://honmaple.me/posts/2026/01/eglot-multi-lsp-language-server/" rel="alternate"></link>
      <published>Fri, 02 Jan 2026 00:39:44 +0000</published>
      <updated>Tue, 14 Jul 2026 16:59:40 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2026/01/eglot-multi-lsp-language-server/" type="text/html"/>
      <id>https://honmaple.me/posts/2026/01/eglot-multi-lsp-language-server/</id>
      <summary type="html">
&lt;h2 id=&quot;heading-1&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;
   虽然我不是专业的前端开发人员，但偶尔还是会写一下 &lt;code&gt;HTML/CSS/Javascript&lt;/code&gt; 或者&lt;code&gt;Vue&lt;/code&gt;。在一个 &lt;b&gt;HTML&lt;/b&gt; 文件中，我需要使用多个 &lt;b&gt;LSP服务&lt;/b&gt;，比如使用 &lt;code&gt;vscode-html-language-server&lt;/code&gt; 补全css样式，使用&lt;code&gt;tailwindcss-language-server&lt;/code&gt; 补全tailwindcss的class名称，使用 &lt;code&gt;vscode-eslint-language-server&lt;/code&gt; 检查语法
&lt;/p&gt;

&lt;p&gt;
   但我目前使用的Emacs lSP客户端 &lt;b&gt;Eglot&lt;/b&gt; 一直不支持多个LSP服务，目前的解决方式有两种，一是把...&lt;/p&gt;</summary>
      <content type="html">
&lt;h2 id=&quot;heading-1&quot;&gt;前言&lt;/h2&gt;
&lt;p&gt;
   虽然我不是专业的前端开发人员，但偶尔还是会写一下 &lt;code&gt;HTML/CSS/Javascript&lt;/code&gt; 或者&lt;code&gt;Vue&lt;/code&gt;。在一个 &lt;b&gt;HTML&lt;/b&gt; 文件中，我需要使用多个 &lt;b&gt;LSP服务&lt;/b&gt;，比如使用 &lt;code&gt;vscode-html-language-server&lt;/code&gt; 补全css样式，使用&lt;code&gt;tailwindcss-language-server&lt;/code&gt; 补全tailwindcss的class名称，使用 &lt;code&gt;vscode-eslint-language-server&lt;/code&gt; 检查语法
&lt;/p&gt;

&lt;p&gt;
   但我目前使用的Emacs lSP客户端 &lt;b&gt;Eglot&lt;/b&gt; 一直不支持多个LSP服务，目前的解决方式有两种，一是把 &lt;b&gt;Eglot&lt;/b&gt; 更换为 &lt;b&gt;lsp-mode&lt;/b&gt; 或者 &lt;b&gt;lsp-bridge&lt;/b&gt;， 二是使用第三方命令行代理服务，比如:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;a href=&quot;https://github.com/thefrontside/lspx&quot;&gt;https://github.com/thefrontside/lspx&lt;/a&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;a href=&quot;https://github.com/joaotavora/rassumfrassum&quot;&gt;https://github.com/joaotavora/rassumfrassum&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   &lt;b&gt;lspx&lt;/b&gt; 是因为我的电脑上没有相关环境，无法编译，&lt;b&gt;rass&lt;/b&gt; 是由 &lt;b&gt;Eglot&lt;/b&gt; 的作者开发，不过看情况他是准备把 &lt;b&gt;rass&lt;/b&gt; 作为一个通用的LSP代理，所以配置文件会单独放置到 &lt;b&gt;HOME&lt;/b&gt; 目录，这一点我不是很喜欢
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
   算了，找来找去还不如自己写一个(轮子+1)，&lt;a href=&quot;https://github.com/honmaple/eglot-lspx&quot;&gt;eglot-lspx&lt;/a&gt;，一个多LSP代理服务，用于解决 &lt;b&gt;Eglot&lt;/b&gt; 无法使用 &lt;code&gt;tailwindcss&lt;/code&gt; 以及不支持多个LSP服务的问题
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;heading-2&quot;&gt;如何使用？&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 编译
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;git clone https://github.com/honmaple/eglot-lspx
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;cd eglot-lspx
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;go build .&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
     然后把编译好的 &lt;code&gt;eglot-lspx&lt;/code&gt; 文件放到可执行路径下，比如我放到了 &lt;code&gt;~/.emacs.d/bin&lt;/code&gt; 目录，并添加路径到Emacs配置
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;(add-to-list &amp;#39;exec-path (expand-file-name &amp;#34;bin&amp;#34; user-emacs-directory) t)&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 配置Eglot
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;(defvar eglot-lspx-command (executable-find &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;eglot-lspx&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 3&lt;/span&gt;&lt;span&gt;(when eglot-lspx-command
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 4&lt;/span&gt;&lt;span&gt;  (add-to-list &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;eglot-server-programs&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;`&lt;/span&gt;((web-mode :language-id &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 5&lt;/span&gt;&lt;span&gt;                                        &lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt; (&lt;span style=&quot;color:#f92672&quot;&gt;,&lt;/span&gt;eglot-lspx-command
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 6&lt;/span&gt;&lt;span&gt;                                           &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;vscode-html-language-server&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;--stdio&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 7&lt;/span&gt;&lt;span&gt;                                           &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;tailwindcss-language-server&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;--stdio&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 8&lt;/span&gt;&lt;span&gt;  (add-to-list &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;eglot-server-programs&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;`&lt;/span&gt;((vue-mode :language-id &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 9&lt;/span&gt;&lt;span&gt;                                        &lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt; (&lt;span style=&quot;color:#f92672&quot;&gt;,&lt;/span&gt;eglot-lspx-command
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;10&lt;/span&gt;&lt;span&gt;                                           &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;vue-language-server&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;--stdio&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;11&lt;/span&gt;&lt;span&gt;                                           &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;vscode-html-language-server&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;--stdio&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;12&lt;/span&gt;&lt;span&gt;                                           &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;tailwindcss-language-server&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;--stdio&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;13&lt;/span&gt;&lt;span&gt;                                           :initializationOptions
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;14&lt;/span&gt;&lt;span&gt;                                           (lambda (server) (&lt;span style=&quot;color:#a6e22e&quot;&gt;list&lt;/span&gt; :vue-language-server (eglot-volar-options server)))))))&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 合并补全信息
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;--provider completion=0,tailwindcss-language-server&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
     可以使用LSP服务名或者索引名，使用逗号分隔，索引名即第n个LSP服务，从0开始，未设置将合并全部
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;heading-3&quot;&gt;示例&lt;/h2&gt;
&lt;p&gt;
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2026/01/eglot-lspx-02.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2026/01/eglot-lspx-02.png-thumb&quot;
         alt=&quot;eglot-lspx-02.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;https://honmaple.me/libs/glightbox/glightbox.min.css&quot;&gt;
  &lt;script src=&quot;https://honmaple.me/libs/vanilla-lazyload/lazyload.min.js&quot; defer&gt;&lt;/script&gt;
  &lt;script src=&quot;https://honmaple.me/libs/glightbox/glightbox.min.js&quot; defer&gt;&lt;/script&gt;
    &lt;script src=&quot;https://honmaple.me/js/lazyload.js&quot; defer&gt;&lt;/script&gt;
    &lt;script src=&quot;https://honmaple.me/js/lightbox.js&quot; defer&gt;&lt;/script&gt;

   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2026/01/eglot-lspx-01.png-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2026/01/eglot-lspx-01.png-thumb&quot;
         alt=&quot;eglot-lspx-01.png&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;</content>
        <category term="Tech/Linux/Emacs"></category>
    </entry>
    <entry xml:lang="zh">
      <title>博客SEO优化</title>
      <link href="https://honmaple.me/posts/2025/11/博客SEO优化/" rel="alternate"></link>
      <published>Mon, 24 Nov 2025 21:22:57 +0000</published>
      <updated>Mon, 24 Nov 2025 22:02:35 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2025/11/博客SEO优化/" type="text/html"/>
      <id>https://honmaple.me/posts/2025/11/博客SEO优化/</id>
      <summary type="html">
&lt;p&gt;
博客已经建立十多年了，SEO优化还是头一次。事情起因是我想要禁止Google索引首页以外的分页内容，比如：&lt;code&gt;index2.html&lt;/code&gt;、&lt;code&gt;index3.html&lt;/code&gt;，所以我询问了 &lt;b&gt;Gemini&lt;/b&gt; 如何在 &lt;code&gt;robots.txt&lt;/code&gt; 里实现该功能，&lt;b&gt;Gemini&lt;/b&gt; 确实给了我相应的解决方式
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;User-agent: *
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;Allow: /index.html$
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;Disallow: /index*.html&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
但同时它也建议我不要这么做，&lt;b&gt;⚠️ 重要SEO风险提示&lt;/b&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
虽然这样做能满足你“禁止索引分页”的技术需求，但在 SEO 策略上...&lt;/p&gt;&lt;/blockquote&gt;</summary>
      <content type="html">
&lt;p&gt;
博客已经建立十多年了，SEO优化还是头一次。事情起因是我想要禁止Google索引首页以外的分页内容，比如：&lt;code&gt;index2.html&lt;/code&gt;、&lt;code&gt;index3.html&lt;/code&gt;，所以我询问了 &lt;b&gt;Gemini&lt;/b&gt; 如何在 &lt;code&gt;robots.txt&lt;/code&gt; 里实现该功能，&lt;b&gt;Gemini&lt;/b&gt; 确实给了我相应的解决方式
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;User-agent: *
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;Allow: /index.html$
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;Disallow: /index*.html&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
但同时它也建议我不要这么做，&lt;b&gt;⚠️ 重要SEO风险提示&lt;/b&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
虽然这样做能满足你“禁止索引分页”的技术需求，但在 SEO 策略上，&lt;b&gt;直接在 robots.txt 禁止分页通常是不推荐的&lt;/b&gt;，原因如下：
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;导致孤岛页面（Orphan Pages）&lt;/b&gt;： 如果爬虫无法访问 &lt;code&gt;/index2.html&lt;/code&gt;，它就无法抓取第 2 页上列出的&lt;b&gt;文章或商品链接&lt;/b&gt;。这意味着你网站第 2 页之后的所有内容可能都无法被搜索引擎发现和收录。
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;权重无法传递&lt;/b&gt;： 分页通常用于传递网站权重。阻断爬虫会导致权重无法流动到深层页面。
&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;b&gt;更好的替代方案&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
如果你只是不希望分页出现在搜索结果中，但希望爬虫能抓取分页里的内容，建议使用 &lt;code&gt;meta&lt;/code&gt; 标签 而不是 &lt;code&gt;robots.txt&lt;/code&gt;：
&lt;/p&gt;

&lt;p&gt;
在 &lt;code&gt;/index2.html&lt;/code&gt;, &lt;code&gt;/index3.html&lt;/code&gt; 等页面的 &lt;code&gt;head&lt;/code&gt; 区域加入：
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;robots&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;noindex, follow&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;
其它需要添加的 &lt;code&gt;meta&lt;/code&gt; 标签（&lt;b&gt;以下内容基于Gemini的回答&lt;/b&gt;）
&lt;/p&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;基础核心类 (Technical &amp; SEO)&lt;/h2&gt;
&lt;p&gt;
   这些是网站正常运行和被收录的基础，缺一不可。
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;字符编码 (Charset)&lt;/b&gt;: 防止网页出现乱码，确保浏览器正确识别中文。
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;charset&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;UTF-8&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;视口设置 (Viewport)&lt;/b&gt;: 这是移动端 &lt;b&gt;SEO&lt;/b&gt; 的核心。 它告诉浏览器如何调整页面的尺寸和缩放。如果不加，手机打开网页字体会非常小，Google 会判定为“移动端不友好”而降低排名。
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;viewport&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;width=device-width, initial-scale=1.0&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;页面描述 (Description)&lt;/b&gt;: 这是搜索结果中标题下方的那段黑色小字。
      &lt;b&gt;要点&lt;/b&gt;： 包含品牌名、核心业务、优势，并带有号召性用语。长度控制在 150 字符（英文）或 80 字（中文）左右。
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;description&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;[品牌名]是全球领先的在线教育平台，提供编程、设计、营销等实战课程。新用户注册立享7天免费试学，立即开启你的职业进阶之路！&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;爬虫控制 (Robots)&lt;/b&gt;:
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;robots&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;index, follow&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;code&gt;index&lt;/code&gt;: 允许收录本页。
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;code&gt;follow&lt;/code&gt;: 允许顺着本页链接爬取更多页面。
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;heading-2&quot;&gt;社交分享类 (Open Graph &amp; Twitter)&lt;/h2&gt;
&lt;p&gt;
   当你的首页链接被分享到 &lt;b&gt;微信&lt;/b&gt;、&lt;b&gt;Facebook&lt;/b&gt;、&lt;b&gt;Twitter&lt;/b&gt;、&lt;b&gt;Discord&lt;/b&gt; 时，这些标签决定了显示的&lt;b&gt;卡片样式&lt;/b&gt;（标题、简介、缩略图）。如果没有这些，分享出去可能只有一个光秃秃的链接。
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;Open Graph (通用协议)&lt;/b&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;property&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;og:title&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;[品牌名] - 让学习更简单的在线课堂&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;property&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;og:description&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;加入超过100万学员的社区，探索500+门专业课程。&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;property&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;og:url&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;https://www.example.com/&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;property&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;og:image&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;https://www.example.com/images/share-cover.jpg&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;property&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;og:type&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;website&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;Twitter Card (推特专用)&lt;/b&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;twitter:card&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;summary_large_image&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;twitter:title&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;[品牌名] - 官方网站&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;twitter:description&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;这里填入简短的品牌介绍...&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;twitter:image&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;https://www.example.com/images/twitter-share.jpg&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;heading-3&quot;&gt;极其重要的辅助标签&lt;/h2&gt;
&lt;p&gt;
   虽不是 &lt;code&gt;meta&lt;/code&gt;，但必须放在 &lt;code&gt;head&lt;/code&gt; 里
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;规范链接 (Canonical Link)&lt;/b&gt;
&lt;/p&gt;

&lt;p&gt;
      这是首页 SEO 的救命稻草。 首页通常有多个入口，比如：
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;code&gt;example.com&lt;/code&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;code&gt;www.example.com&lt;/code&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;code&gt;www.example.com/index.html&lt;/code&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
      如果不加 &lt;code&gt;canonical&lt;/code&gt; 标签，搜索引擎可能认为这是三个重复的网站，分散权重。
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;link&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;rel&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;canonical&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;https://www.example.com/&amp;#34;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
      注意：必须指向你希望作为唯一标准的那个 URL（通常带 &lt;code&gt;https&lt;/code&gt; 和 &lt;code&gt;www&lt;/code&gt;，且不带 &lt;code&gt;index.html&lt;/code&gt;）。
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;网站图标 (Favicon)&lt;/b&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;link&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;rel&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;icon&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;/favicon.ico&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;image/x-icon&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;heading-4&quot;&gt;不需要添加的标签 (避坑指南)&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;meta&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;keywords&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;SEO, 优化, 排名...&amp;#34;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
   &lt;b&gt;原因&lt;/b&gt;： Google 早在 10 多年前就宣布完全忽略这个标签。现在添加它不仅没用，还等于把你的关键词策略直接暴露给竞争对手看。
&lt;/p&gt;</content>
        <category term="Life"></category>
    </entry>
    <entry xml:lang="zh">
      <title>博客增加闲言碎语页面</title>
      <link href="https://honmaple.me/posts/2025/11/博客增加闲言碎语页面/" rel="alternate"></link>
      <published>Wed, 12 Nov 2025 17:37:49 +0000</published>
      <updated>Sat, 11 Jul 2026 01:29:20 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2025/11/博客增加闲言碎语页面/" type="text/html"/>
      <id>https://honmaple.me/posts/2025/11/博客增加闲言碎语页面/</id>
      <summary type="html">
&lt;blockquote&gt;
&lt;p&gt;
主要用于记录一些短文或吐槽，这些内容不适合作为博客文章出现，该功能类似我很久之前实现过的&lt;b&gt;时间轴&lt;/b&gt;，但上次更新&lt;b&gt;时间轴&lt;/b&gt;已经是6年前的事情了，而且&lt;b&gt;时间轴&lt;/b&gt;所使用的后端服务还是我十年前写的一个基于 &lt;code&gt;Python+Flask&lt;/code&gt; 的博客。近几年我一直在使用 &lt;a href=&quot;https://github.com/usememos/memos&quot;&gt;usememos&lt;/a&gt; 作为个人朋友圈的替代品，此次也是准备将 &lt;code&gt;memos&lt;/code&gt; 利用起来，在博客内嵌入一个新的&lt;b&gt;闲言碎语&lt;/b&gt;的页面
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;实现&lt;/h2&gt;
&lt;p&gt;
   我使用的博客系统是我自己写的 &lt;a href=&quot;https://github.com/honmaple/snow&quot;&gt;Snow静态博客生成器&lt;/a&gt;，所以实现也很方便。
&lt;/p&gt;

&lt;p&gt;
   首先添加一个新的页面 &lt;code&gt;content/pages/memos.org&lt;/code&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;#+TITLE&lt;/span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;: 闲言碎语&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;#+PROPERTY&lt;/span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;: SLUG...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;</summary>
      <content type="html">
&lt;blockquote&gt;
&lt;p&gt;
主要用于记录一些短文或吐槽，这些内容不适合作为博客文章出现，该功能类似我很久之前实现过的&lt;b&gt;时间轴&lt;/b&gt;，但上次更新&lt;b&gt;时间轴&lt;/b&gt;已经是6年前的事情了，而且&lt;b&gt;时间轴&lt;/b&gt;所使用的后端服务还是我十年前写的一个基于 &lt;code&gt;Python+Flask&lt;/code&gt; 的博客。近几年我一直在使用 &lt;a href=&quot;https://github.com/usememos/memos&quot;&gt;usememos&lt;/a&gt; 作为个人朋友圈的替代品，此次也是准备将 &lt;code&gt;memos&lt;/code&gt; 利用起来，在博客内嵌入一个新的&lt;b&gt;闲言碎语&lt;/b&gt;的页面
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;heading-1&quot;&gt;实现&lt;/h2&gt;
&lt;p&gt;
   我使用的博客系统是我自己写的 &lt;a href=&quot;https://github.com/honmaple/snow&quot;&gt;Snow静态博客生成器&lt;/a&gt;，所以实现也很方便。
&lt;/p&gt;

&lt;p&gt;
   首先添加一个新的页面 &lt;code&gt;content/pages/memos.org&lt;/code&gt;
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;#+TITLE&lt;/span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;: 闲言碎语&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;#+PROPERTY&lt;/span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;: SLUG memos&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 3&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;#+PROPERTY&lt;/span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;: COMMENT True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 4&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 5&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;#+begin_export &lt;/span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;html&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 6&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;div&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;memos&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;data-src&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;https://memos.libforest.com&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 7&lt;/span&gt;&lt;span&gt;  &amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;div&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;entry-loading&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 8&lt;/span&gt;&lt;span&gt;    &amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;i&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;fa fa-spinner fa-spin&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&quot;color:#f92672&quot;&gt;i&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 9&lt;/span&gt;&lt;span&gt;    &amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;span&lt;/span&gt;&amp;gt;加载中...&amp;lt;/&lt;span style=&quot;color:#f92672&quot;&gt;span&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;10&lt;/span&gt;&lt;span&gt;  &amp;lt;/&lt;span style=&quot;color:#f92672&quot;&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;11&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;span style=&quot;color:#f92672&quot;&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;12&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;https://s.libforest.com/static/js/marked.min.js&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&quot;color:#f92672&quot;&gt;script&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;13&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style=&quot;color:#f92672&quot;&gt;script&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;/static/js/memos.js&amp;#34;&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&quot;color:#f92672&quot;&gt;script&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;14&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#75715e&quot;&gt;#+end_export&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
   使用 &lt;code&gt;data-src&lt;/code&gt; 设置后端 &lt;b&gt;memos&lt;/b&gt; 的服务接口，而 &lt;b&gt;memos&lt;/b&gt; 的开放接口是 &lt;code&gt;https://{api}/api/v1/memo&lt;/code&gt;,  返回数据如下
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;memos&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 3&lt;/span&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 4&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;memos/GorXqRpEUPCE3jVjY9pp8W&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 5&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;state&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;NORMAL&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 6&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;createTime&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;2025-11-11T08:57:38Z&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 7&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;updateTime&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;2025-11-11T08:57:38Z&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 8&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;测试图片&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 9&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;pinned&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#66d9ef&quot;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;10&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;resources&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;11&lt;/span&gt;&lt;span&gt;                {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;12&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;resources/VPqiT6yFj2nBgyGsKtUWjj&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;13&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;filename&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;02.png&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;14&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;image/png&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;15&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;size&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;1107605&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;16&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;memo&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;memos/GorXqRpEUPCE3jVjY9pp8W&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;17&lt;/span&gt;&lt;span&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;18&lt;/span&gt;&lt;span&gt;            ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;19&lt;/span&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;20&lt;/span&gt;&lt;span&gt;    ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;21&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#f92672&quot;&gt;&amp;#34;nextPageToken&amp;#34;&lt;/span&gt;: &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;CAoQCg==&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;22&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
   使用&lt;code&gt;JS&lt;/code&gt;请求就是
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;document.&lt;span style=&quot;color:#a6e22e&quot;&gt;addEventListener&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;DOMContentLoaded&amp;#34;&lt;/span&gt;, &lt;span style=&quot;color:#66d9ef&quot;&gt;async&lt;/span&gt; () =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#66d9ef&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;dom&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; document.&lt;span style=&quot;color:#a6e22e&quot;&gt;querySelector&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;#memos&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#66d9ef&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;api&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;dom&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;getAttribute&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;data-src&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#66d9ef&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color:#a6e22e&quot;&gt;api&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;api&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&amp;#34;&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#66d9ef&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;resp&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#66d9ef&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;fetch&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;/api/v1/memos&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;6&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#66d9ef&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;data&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#66d9ef&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;resp&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;json&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;7&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#a6e22e&quot;&gt;console&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;log&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;data&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;memos&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;8&lt;/span&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;9&lt;/span&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
   &lt;b&gt;注意：&lt;/b&gt;
   我正在使用的memos版本在查询接口上的参数需要进行一层转换，必须使用生成的&lt;code&gt;protobuf&lt;/code&gt;文件才行，这在单独的JS文件中不好实现，所以暂不支持添加参数查询，目前也只是显示第一页总共10条的数据，这对于我来说已经足够了，如果有需要&lt;code&gt;下一页&lt;/code&gt;  ，可以利用返回数据里的 &lt;code&gt;nextPageToken&lt;/code&gt;，将其作为查询参数添加到请求URL中
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;`${api}/api/v1/memos?page_token=${nextPageToken}`&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
   获取到数据后就能转换成 &lt;code&gt;HTML&lt;/code&gt;
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;内容处理&lt;/b&gt;: &lt;b&gt;memos&lt;/b&gt; 的内容基于&lt;code&gt;Markdown&lt;/code&gt;，所以我引入了 &lt;code&gt;marked.js&lt;/code&gt; 作为解析库，同时还需要对标签进行解析和渲染
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;memoTag&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;extensions&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;:&lt;/span&gt; [{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 3&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;memoTag&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 4&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#a6e22e&quot;&gt;level&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;inline&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 5&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#a6e22e&quot;&gt;start&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt;) { &lt;span style=&quot;color:#66d9ef&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;indexOf&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;#&amp;#39;&lt;/span&gt;); },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 6&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#a6e22e&quot;&gt;tokenizer&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 7&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#66d9ef&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;rule&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;/^#([^\s#]+)(\s*)/&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 8&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#66d9ef&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;match&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;rule&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;exec&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 9&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#66d9ef&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color:#a6e22e&quot;&gt;match&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;10&lt;/span&gt;&lt;span&gt;                &lt;span style=&quot;color:#66d9ef&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;html&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;lt;span class=&amp;#34;memo-tag&amp;#34;&amp;gt;#&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;match&lt;/span&gt;[&lt;span style=&quot;color:#ae81ff&quot;&gt;1&lt;/span&gt;]&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;11&lt;/span&gt;&lt;span&gt;                &lt;span style=&quot;color:#66d9ef&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color:#a6e22e&quot;&gt;match&lt;/span&gt;[&lt;span style=&quot;color:#ae81ff&quot;&gt;2&lt;/span&gt;].&lt;span style=&quot;color:#a6e22e&quot;&gt;endsWith&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;)) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;12&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#a6e22e&quot;&gt;html&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;lt;br /&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;13&lt;/span&gt;&lt;span&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;14&lt;/span&gt;&lt;span&gt;                &lt;span style=&quot;color:#66d9ef&quot;&gt;return&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;15&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#a6e22e&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#39;memoTag&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;16&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#a6e22e&quot;&gt;raw&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;match&lt;/span&gt;[&lt;span style=&quot;color:#ae81ff&quot;&gt;0&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;17&lt;/span&gt;&lt;span&gt;                    &lt;span style=&quot;color:#a6e22e&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;html&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;18&lt;/span&gt;&lt;span&gt;                };
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;19&lt;/span&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;20&lt;/span&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;21&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#a6e22e&quot;&gt;renderer&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;token&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;22&lt;/span&gt;&lt;span&gt;            &lt;span style=&quot;color:#66d9ef&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;token&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;html&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;23&lt;/span&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;24&lt;/span&gt;&lt;span&gt;    }],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;25&lt;/span&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;26&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;marked&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;setOptions&lt;/span&gt;({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;27&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;breaks&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:#66d9ef&quot;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;28&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#a6e22e&quot;&gt;smartypants&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color:#66d9ef&quot;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;29&lt;/span&gt;&lt;span&gt;});
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;30&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;marked&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;use&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;memoTag&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;31&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;console&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;log&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;marked&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;parse&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;memo&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 &lt;b&gt;资源处理&lt;/b&gt;: 资源应该是包括图片、音频、视频等多种类型的，目前我只处理了图片类型，这也是基于我的需求
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 1&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;renderContent&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;memo&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 2&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#66d9ef&quot;&gt;let&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;resources&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;memo&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;resources&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;map&lt;/span&gt;((&lt;span style=&quot;color:#a6e22e&quot;&gt;r&lt;/span&gt;) =&amp;gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 3&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#66d9ef&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;/file/&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;r&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;r&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;filename&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;?thumbnail=true&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 4&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#66d9ef&quot;&gt;const&lt;/span&gt; &lt;span style=&quot;color:#a6e22e&quot;&gt;style&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;max-height: 16rem;border-radius: 0.5rem;object-fit: contain;&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 5&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#66d9ef&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;lt;a href=&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34; data-fancybox=&amp;#34;image&amp;#34;&amp;gt;&amp;lt;img data-src=&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34; class=&amp;#34;lazyload&amp;#34; style=&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34; /&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 6&lt;/span&gt;&lt;span&gt;    });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 7&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#66d9ef&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color:#a6e22e&quot;&gt;resources&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;length&lt;/span&gt; &lt;span style=&quot;color:#f92672&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color:#ae81ff&quot;&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 8&lt;/span&gt;&lt;span&gt;        &lt;span style=&quot;color:#66d9ef&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;lt;div&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;marked&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;parse&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;memo&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;)&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt; 9&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;            &amp;lt;div style=&amp;#34;display: flex;gap: 0.5rem; align-items: baseline;&amp;#34;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;resources&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;join&lt;/span&gt;(&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&amp;#34;&lt;/span&gt;)&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;10&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;            &amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;11&lt;/span&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;12&lt;/span&gt;&lt;span&gt;    &lt;span style=&quot;color:#66d9ef&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;lt;div&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#a6e22e&quot;&gt;marked&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;parse&lt;/span&gt;(&lt;span style=&quot;color:#a6e22e&quot;&gt;memo&lt;/span&gt;.&lt;span style=&quot;color:#a6e22e&quot;&gt;content&lt;/span&gt;)&lt;span style=&quot;color:#e6db74&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;`&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;13&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
   或许可以把该功能作为 &lt;code&gt;shortcodes&lt;/code&gt; 使用， 完整代码可以在 &lt;a href=&quot;https://honmaple.me/static/js/memos.js&quot;&gt;memos.js&lt;/a&gt; 查看
&lt;/p&gt;

&lt;h2 id=&quot;heading-2&quot;&gt;其它&lt;/h2&gt;
&lt;p&gt;
   如果需要一个 &lt;b&gt;memos&lt;/b&gt; 客户端，可以试试我写的 &lt;a href=&quot;https://apps.apple.com/cn/app/红枫笔记/id6743336280?platform=iphone&quot;&gt;红枫笔记&lt;/a&gt;，除了支持本地笔记外，还支持 memos、blinko等远程服务的管理
&lt;/p&gt;

&lt;div class=&quot;gallery gallery-grid&quot;&gt;
  
&lt;p&gt;
   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2025/10/maple-note-06.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2025/10/maple-note-06.jpg-thumb&quot;
         alt=&quot;maple-note-06.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;https://honmaple.me/libs/glightbox/glightbox.min.css&quot;&gt;
  &lt;script src=&quot;https://honmaple.me/libs/vanilla-lazyload/lazyload.min.js&quot; defer&gt;&lt;/script&gt;
  &lt;script src=&quot;https://honmaple.me/libs/glightbox/glightbox.min.js&quot; defer&gt;&lt;/script&gt;
    &lt;script src=&quot;https://honmaple.me/js/lazyload.js&quot; defer&gt;&lt;/script&gt;
    &lt;script src=&quot;https://honmaple.me/js/lightbox.js&quot; defer&gt;&lt;/script&gt;

   
  &lt;a class=&quot;mx-auto block w-fit max-w-full no-underline&quot; href=&quot;https://s.libforest.com/images/2025/10/maple-note-07.jpg-show&quot; data-img-lightbox data-gallery=&quot;page-images&quot; data-type=&quot;image&quot;&gt;
    &lt;img data-src=&quot;https://s.libforest.com/images/2025/10/maple-note-07.jpg-thumb&quot;
         alt=&quot;maple-note-07.jpg&quot;
         decoding=&quot;async&quot;
         class=&quot;lazy mx-auto cursor-zoom-in rounded-md &quot;&gt;
  &lt;/a&gt;

&lt;/p&gt;

&lt;/div&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://honmaple.me/css/gallery.css&quot;&gt;</content>
        <category term="Life"></category>
    </entry>
    <entry xml:lang="zh">
      <title>关于B站上传视频缓慢问题</title>
      <link href="https://honmaple.me/posts/2025/10/关于B站上传视频缓慢问题/" rel="alternate"></link>
      <published>Sun, 19 Oct 2025 14:21:49 +0000</published>
      <updated>Sun, 19 Oct 2025 14:30:23 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2025/10/关于B站上传视频缓慢问题/" type="text/html"/>
      <id>https://honmaple.me/posts/2025/10/关于B站上传视频缓慢问题/</id>
      <summary type="html">
&lt;p&gt;
网上找到一种解决方式
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 打开 &lt;a href=&quot;https://member.bilibili.com/preupload?r=ping&quot;&gt;https://member.bilibili.com/preupload?r=ping&lt;/a&gt; 进行测速，找到上传速度最快的地址，比如
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;https:&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;member&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;bilibili&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;com&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;platform&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;upload&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;video&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;frame&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#960050;background-color:#1e0010&quot;&gt;?&lt;/span&gt;os&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;upos&lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&lt;/span&gt;zone&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;cs&lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&lt;/span&gt;upcdn&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;attx&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 复制参数 &lt;code&gt;&amp;upcdn=attx&lt;/code&gt; 到原上传地址，比如原地址为
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;https:&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;member...&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;</summary>
      <content type="html">
&lt;p&gt;
网上找到一种解决方式
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;
 打开 &lt;a href=&quot;https://member.bilibili.com/preupload?r=ping&quot;&gt;https://member.bilibili.com/preupload?r=ping&lt;/a&gt; 进行测速，找到上传速度最快的地址，比如
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;https:&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;member&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;bilibili&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;com&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;platform&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;upload&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;video&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;frame&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#960050;background-color:#1e0010&quot;&gt;?&lt;/span&gt;os&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;upos&lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&lt;/span&gt;zone&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;cs&lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&lt;/span&gt;upcdn&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;attx&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 复制参数 &lt;code&gt;&amp;upcdn=attx&lt;/code&gt; 到原上传地址，比如原地址为
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;https:&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;member&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;bilibili&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;com&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;platform&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;upload&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;video&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;frame&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
   修改后为
&lt;/p&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;https:&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;member&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;bilibili&lt;span style=&quot;color:#f92672&quot;&gt;.&lt;/span&gt;com&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;platform&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;upload&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;video&lt;span style=&quot;color:#f92672&quot;&gt;/&lt;/span&gt;frame&lt;span style=&quot;color:#f92672&quot;&gt;&amp;amp;&lt;/span&gt;upcdn&lt;span style=&quot;color:#f92672&quot;&gt;=&lt;/span&gt;attx&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
 然后就可以上传视频了
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;</content>
        <category term="Life"></category>
    </entry>
    <entry xml:lang="zh">
      <title>Windows优化记录</title>
      <link href="https://honmaple.me/posts/2025/10/windowsyou-hua-ji-lu/" rel="alternate"></link>
      <published>Sat, 11 Oct 2025 19:09:27 +0000</published>
      <updated>Sat, 11 Oct 2025 19:19:38 +0000</updated>
      <author>
        <name>honmaple</name>
      </author>
      <link rel="alternate" href="https://honmaple.me/posts/2025/10/windowsyou-hua-ji-lu/" type="text/html"/>
      <id>https://honmaple.me/posts/2025/10/windowsyou-hua-ji-lu/</id>
      <summary type="html">&lt;h2 id=&quot;heading-1&quot;&gt;去除快捷方式小箭头&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;reg add &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /v 29 /d &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;%systemroot%&lt;span style=&quot;color:#e6db74&quot;&gt;\system32\imageres.dll,197&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /t reg_sz /f
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;taskkill /f /im explorer.exe
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;attrib -s -r...&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;</summary>
      <content type="html">&lt;h2 id=&quot;heading-1&quot;&gt;去除快捷方式小箭头&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;reg add &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /v 29 /d &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;%systemroot%&lt;span style=&quot;color:#e6db74&quot;&gt;\system32\imageres.dll,197&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /t reg_sz /f
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;taskkill /f /im explorer.exe
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;attrib -s -r -h &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;%userprofile%&lt;span style=&quot;color:#e6db74&quot;&gt;\AppData\Local\iconcache.db&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;del&lt;/span&gt; &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;%userprofile%&lt;span style=&quot;color:#e6db74&quot;&gt;\AppData\Local\iconcache.db&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /f /q
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;5&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;start&lt;/span&gt; explorer
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 id=&quot;heading-2&quot;&gt;恢复快捷方式小箭头&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;reg delete &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /v 29 /f
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;taskkill /f /im explorer.exe
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#66d9ef&quot;&gt;start&lt;/span&gt; explorer
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 id=&quot;heading-3&quot;&gt;交换大写锁定和右CTRL&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;Windows Registry Editor Version 5.00
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;Scancode Map&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;=hex:00,00,00,00,00,00,00,00,03,00,00,00,1d,00,3a,00,3a,00,1d,e0,00,00,00,00
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;使用方法: 更改拓展名为&lt;code&gt;.reg&lt;/code&gt;, 双击运行&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1d,00,3a,00 表示将Caps键替换为Left Ctl&lt;/li&gt;
&lt;li&gt;3a,00,1d,e0表示将RightCtrl替换为Caps&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;heading-4&quot;&gt;恢复大写锁定和右CTRL&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;Windows Registry Editor Version 5.00
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;3&lt;/span&gt;&lt;span&gt;[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Keyboard Layout]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;4&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;Scancode Map&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;=-
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 id=&quot;heading-5&quot;&gt;恢复windows10右键菜单&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;reg add &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /f /ve
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;taskkill /f /im explorer.exe &amp;amp; &lt;span style=&quot;color:#66d9ef&quot;&gt;start&lt;/span&gt; explorer.exe
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 id=&quot;heading-6&quot;&gt;恢复windows11右键菜单&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;reg delete &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /f
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;2&lt;/span&gt;&lt;span&gt;taskkill /f /im explorer.exe &amp;amp; &lt;span style=&quot;color:#66d9ef&quot;&gt;start&lt;/span&gt; explorer.exe
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h2 id=&quot;heading-7&quot;&gt;windows11暂停更新&lt;/h2&gt;
&lt;pre style=&quot;color:#f8f8f2;background-color:#272822;-webkit-text-size-adjust:none;&quot;&gt;&lt;span style=&quot;display:flex;&quot;&gt;&lt;span style=&quot;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&quot;&gt;1&lt;/span&gt;&lt;span&gt;reg add &lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings&lt;/span&gt;&lt;span style=&quot;color:#e6db74&quot;&gt;&amp;#34;&lt;/span&gt; /v FlightSettingsMaxPauseDays /t reg_dword /d 9999 /f
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;</content>
        <category term="Tech"></category>
    </entry>
</feed>
