<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Emacs on 映屿</title>
    <link>https://blog.verdant.ee/tags/emacs/</link>
    <description>Recent content in Emacs on 映屿</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    
      <managingEditor>i@glowisle.me (五葉地錦)</managingEditor>
    
    
      <webMaster>i@glowisle.me (五葉地錦)</webMaster>
    
    
    
    <lastBuildDate>Sun, 15 Feb 2026 01:23:54 +0800</lastBuildDate>
    
    
    <atom:link href="http://blog.verdant.ee/tags/emacs/atom.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>我与Emacs</title>
      <link>https://blog.verdant.ee/posts/emacs-and-i/</link>
      <pubDate>Sun, 15 Feb 2026 01:23:54 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/emacs-and-i/</guid>
      <description>&lt;p&gt;如果你翻看我的博客，你会找到一小部分有关Emacs的文章。在138篇文章，16万字中，一共出现了125次Emacs，一半以上都是尝试入门Emacs记录的。直到去年的11月，我正式&lt;a href=&#34;https://blog.verdant.ee/posts/emacs-i-am-back/&#34;&gt;入门了Emacs&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;我与vi&#34;&gt;我与Vi&lt;/h2&gt;&#xA;&lt;p&gt;关于Emacs，这就要从Vi说起了。&lt;/p&gt;&#xA;&lt;p&gt;也许是因为看了TheCW的&lt;a href=&#34;https://www.bilibili.com/video/BV1az4y1f77A/&#34;&gt;Vim综合征&lt;/a&gt;，或者是看了Mars的&lt;a href=&#34;https://www.bilibili.com/video/BV1UQ4y1z7q5/&#34;&gt;这个视频&lt;/a&gt;，总之有一个视频对我有一些影响，让我开始折腾代码编辑器。&lt;/p&gt;&#xA;&lt;p&gt;在2024年十二月或更早一些，一个链表都写不利索，甚至不知道什么是链表，甚至没写过任何一行数据结构的菜鸟开始配置自己的Vim。当时我用的是Windows10，你绝对想象不到在Windows上用Vim是一种什么样的体验，首先从安装开始就非常折磨。你需要去Vim那又老旧，引导又差的官网上找到适配你CPU的文件，运行那个文件进行安装，安装过程中好像会有一些选项，最后配置环境变量。&lt;/p&gt;&#xA;&lt;p&gt;不仅安装麻烦，配置也很折磨，Windows下的Vim配置文件并不像GNU/Linux下那样好找，它在：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;USERPROFILE%\AppData\Roaming\vim\vim74&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;是的，就是这么个位置。你要进五层目录，然后终端的提示符中就有了冗长的路径，这也是我使用GNU/Linux的原因之一，我受不了Windows的丑。&lt;/p&gt;&#xA;&lt;p&gt;一开始我想的是一下午搞定，让它和IDEA一样能流畅地写代码，写我的Java代码。但显然我太天真了，当时我根本不懂那些配置有什么作用，只是去网上抄代码，出错了也不会调试，就半途而废了，但这次还是有收获的，我学会了使用&lt;code&gt;:wq&lt;/code&gt;来退出Vim。&lt;/p&gt;&#xA;&lt;p&gt;之后不知道又经过了几次尝试，也用过Neovim和Lazyvim。在Lazyvim上花费的时间是最多的，因为它非常适合根本不懂配置，也不愿意折腾太多配置的人，有一段时间我使用Arch Linux，貌似也使用Lazyvim。谈起Arch Linux，也是一次激进的尝试。这里可以和代码编辑器放到一起说，我都是被花里胡哨的配置所吸引的，如果你是出于兴趣在用GNU/Linux，你一定折腾过桌面美化，那种半透明终端、二次元壁纸、Dock栏、Mac主题、窗口果冻特效破碎特效的美化。我折腾Neovim和KDE美化几乎是同时进行的。在那个时候我基本不会写代码，也不想写代码，只是觉得「啊，我的桌面真好看！」「啊！我的Neovim真帅！」等等。&lt;/p&gt;&#xA;&lt;p&gt;有从Vim迁移到Neovim的，但你一定没见到过从Neovim迁回Vim的——我就是那个人。&lt;/p&gt;&#xA;&lt;p&gt;说实话，我不喜欢Lua。一门编程语言首先要让代码看起来顺眼。比如纯C或者Go，但Lua实在背离我的审美点，并且它的模块加载机制很奇怪，至少我当时没弄懂，我也有很长时间没碰过Lua了。我甚至觉得Lua比Vimscript还难写，所以就用回Vim了。如果大学开设「折腾代码编辑器而不写一行有用的代码」这门课程，我毫无疑问可以胜任教授，除了Vi系，我还折腾过VSCode。&lt;/p&gt;&#xA;&lt;p&gt;我也许是想，既然这么多编辑器都玩过了，为什么不试试Emacs呢？我大概抱着这样天真的想法，就开始尝试Emacs。&lt;/p&gt;&#xA;&lt;p&gt;你可以发现一件非常好笑的事，我的博客里有 &lt;a href=&#34;https://blog.verdant.ee/posts/%E5%88%9D%E6%8A%98%E8%85%BEemacs%E8%AE%B0%E5%BD%95/&#34;&gt;《初折腾Emacs记录》&lt;/a&gt;、&lt;a href=&#34;https://blog.verdant.ee/posts/%E6%88%91%E8%BF%98%E6%98%AF%E6%94%BE%E4%B8%8D%E4%B8%8Bemacs/&#34;&gt;《我还是放不下Emacs！》&lt;/a&gt;、&lt;a href=&#34;https://blog.verdant.ee/posts/emacs-i-am-back/&#34;&gt;《Emacs，我又回来了！》&lt;/a&gt;这样的黑历史，我多次尝试Emacs，这说明Emacs真的很困难。我当时既不喜欢Lisp，又几乎对Emacs一无所知。在使用Doom Emacs后，才算是把我留住。&lt;/p&gt;&#xA;&lt;h2 id=&#34;我为什么选择emacs&#34;&gt;我为什么选择Emacs&lt;/h2&gt;&#xA;&lt;p&gt;你也许会觉得我要说「可定制性」「神的编辑器」这样的话，但如果问当时的自己：「你为什么要选择Emacs？」就像上文所述，只有四个字：脑子一热。&lt;/p&gt;&#xA;&lt;p&gt;我脑子一热做过很多事，比如学编程、写博客、弹贝斯、写周刊……总是有一个念头：「诶，感觉不错啊！」然后手就自己动起来开始做了，除了写作业。&lt;/p&gt;&#xA;&lt;p&gt;如果仔细分析，Emacs确实有很多迷人的点，但最吸引我的是全键盘工作流。我从新建这篇文章到说了这么多口水话，一次鼠标都没有动过，它甚至离我很远。当然，我要承认的是，适度用用鼠标是有益身体健康的。至少不会让你的手指和胳膊特别疲劳。&lt;/p&gt;&#xA;&lt;p&gt;全键盘哲学当然要说说Vi(Vim/Neovim)，用Vi不只是用编辑器，而是用一种围绕Vi快捷键的生态。初次使用Vi，你可能觉得&lt;code&gt;HJKL&lt;/code&gt;移动光标很反人类，但这能让你手指几乎不移动地灵活操作，在适应后就离不开了。我有装了Vi键位的浏览器，也用过&lt;a href=&#34;https://github.com/jarun/nnn&#34;&gt;nnn&lt;/a&gt;，&lt;a href=&#34;https://yazi-rs.github.io/&#34;&gt;yazi&lt;/a&gt;等支持Vi快捷键的终端文件管理器，你几乎可以在GNU/Linux的任何地方找到&lt;code&gt;HJKL&lt;/code&gt;的哲学，支持方向键的地方基本就支持&lt;code&gt;HJKL&lt;/code&gt;，比如Archinstall脚本。我甚至尝试了一段时间用HJKL玩Minecraft。&lt;/p&gt;&#xA;&lt;p&gt;但Vi系编辑器可以做的事，终究只是编辑代码。Emacs的可定制性让它几乎可以完成所有事。&lt;/p&gt;&#xA;&lt;p&gt;可定制性是Emacs最大的特点，你几乎可以改动任何一个让你不爽的细节，除了修改源代码那种硬核的方式以外，可以通过Emacs Lisp来配置，这可能也是拦住很多人使用Emacs的一点。Lisp这门语言在没有接触过的人看来，简直是其丑无比、臭不可闻，因为它完全是由括号组成的，但当你熟悉了之后，这也是Lisp最讨人喜欢的地方：一切都是列表，整个宇宙都是列表，代码即数据。&lt;/p&gt;&#xA;&lt;p&gt;Emacs鼓励用户进行定制，提供了很多方便的函数，比如&lt;code&gt;describe-key&lt;/code&gt;这样查看某个按键组合详细信息的函数，我在前阵子也自己从零开始配置了Emacs，写了很多ELisp代码，你可以在&lt;a href=&#34;https://codeberg.org/verdant/emacs.d&#34;&gt;这里&lt;/a&gt;查看我的Emacs配置。&lt;/p&gt;&#xA;&lt;p&gt;我也用Emacs实现了&lt;a href=&#34;https://github.com/yingyu5658/niwa&#34;&gt;自己的数字花园&lt;/a&gt;，这个项目只有Emacs Lisp和Shell脚本组成，没有任何外部依赖，全靠Emacs强大的Org-mode。它还被收录于2026-02-09期的&lt;a href=&#34;https://sachachua.com/blog/2026/02/2026-02-09-emacs-news/&#34;&gt;Emacs news&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;这也是Emacs教徒们经常拿来传教的一句话：只要你想，没有Emacs做不到的。你甚至可以在Emacs里写代码！&lt;/p&gt;&#xA;&lt;h2 id=&#34;百年emacs&#34;&gt;百年Emacs&lt;/h2&gt;&#xA;&lt;p&gt;除了可定制性外，Emacs悠久的历史也很吸引我。这个天杀的操作系统竟然1984年就诞生了，比我爸岁数还大，由于它极高的可定制性，社区依然保持活跃，在Melpa的仓库中，每周都有新的PR提交新的Package。同时Emacs也有非常多的分支变种，比如Linus在用的&lt;a href=&#34;https://github.com/torvalds/uemacs&#34;&gt;Uemacs(MicroEMACS)&lt;/a&gt;。让我没想到的是，这位最早提交在16年前，但是三周前Linus还发布了一个&lt;a href=&#34;https://github.com/torvalds/uemacs/commit/fbb23f2467e6367d6580a4e37ebacc26282c97c0&#34;&gt;补丁&lt;/a&gt;的老爷子，编译安装后竟然能无痛支持中文字符，或许是我终端配置过的原因吧，我相信Linus一个美国人、芬兰人，不会在终端碰见中文字符的。&lt;/p&gt;&#xA;&lt;p&gt;扯远了……说回历史这个话题。Gen Z的特点之一就是怀念早期互联网，不知道2011年出生还能不能算Gen Z，但我真的莫名怀念早期互联网。但我到底怀念的是什么东西呢？可以简单用一些关键词来概括：C, Unix, Linux, Newsgroup(Usenet), Email ,邮件列表。或者Windows的IE浏览器、PHP大行其道的年代，我应该赶上了这个尾巴，记得小时候还有当年我爸学PHP买的书，当然早丢了，他可能也只看了目录。&lt;/p&gt;&#xA;&lt;p&gt;Emacs自然在Usenet流行的时候广为人知，在《UNIX痛恨者手册》这本书里就多次提到，当时大家都用Gnus看邮件、订阅新闻组和邮件列表。由于年代太过久远，中文互联网能找到的资料太少，我就在看了上古教程和Gnu.org的手册后，拼凑出&lt;a href=&#34;https://blog.verdant.ee/posts/gnus-guide/&#34;&gt;一篇教程&lt;/a&gt;，这可能是中文互联网最新的有关Gnus的信息。大家可能现在都用mu4e，但那个东西的界面我实在不喜欢，我更喜欢Gnus开屏那头丑到爆炸的牛。&lt;/p&gt;&#xA;&lt;h2 id=&#34;少即是多的使用哲学&#34;&gt;少即是多的使用哲学&lt;/h2&gt;&#xA;&lt;p&gt;虽然Emacs可以做几乎任何事，但我现在没有像一些Emacs用户，或者说玩家一样，给Emacs装一堆包。虽然Emacs有Emac OS的称号，但它就是那种什么都能干，但又什么都干不好的典型。就拿浏览器来说，或许是因为我用Firefox而不是Chrome，不能导入Cookie，这就让我很少使用Eaf的浏览器。性能问题绝对是Emacs GUI跨不过去的坎，而且Eaf的浏览器好像还是用Python实现的，非常有创意，非常有技术，但性能肯定比不上专业的浏览器。最近我也把Eaf整个插件都从我的配置文件中移除了。&lt;/p&gt;&#xA;&lt;p&gt;我使用Emacs的需求极其简单，无非就是写Markdown和org、写C代码、写一点前端，甚至不是Vue或者什么其他框架，就是纯原生的前端三件套，我做的那点东西也不太需要LSP，但有一个总归是舒服的。还有收发邮件什么的。&lt;/p&gt;&#xA;&lt;p&gt;所以核心包只有LSP，顶多加一个markdown的优化插件，这就足够了，其他的就是ivy等优化体验的插件，虽然我喜欢考古，但在2026年没必要过古人的生活。我近乎偏执的数字洁癖，让我恨不得重新编译Emacs，关掉我不需要的选项才好。&lt;/p&gt;&#xA;&lt;p&gt;但扯了那么多，最终还是要写代码的。最好的编辑器应该不挡你写代码，甚至应该忘掉编辑器这个事，眼睛里只有代码，所以我希望装更少的包，让Emacs干自己该干的事，干好该干的事，让它更稳定，不至于在写代码的时候因为某个包的错误而崩溃。就像我某篇文章的副标题说的：为不折腾而折腾，才是折腾的终极目标。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>2026年，一个普通Emacs用户如何把Gnus跑起来</title>
      <link>https://blog.verdant.ee/posts/gnus-guide/</link>
      <pubDate>Tue, 10 Feb 2026 18:34:00 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/gnus-guide/</guid>
      <description>&lt;p&gt;Emacs中有众多的邮件管理工具，目前比较流行的是&lt;a href=&#34;https://github.com/emacsmirror/mu4e&#34;&gt;mu4e&lt;/a&gt;，但如果你和我一样，不喜欢它的操作逻辑和界面，或者同样有怀旧情怀，一定会想玩玩Gnus。然而这个在Emacs中自带的包，居然在中文互联网上几乎没有任何讨论度，甚至能用中文搜索到的配置教程是写于2012年的博客园文章。几乎找不到近些年的帖子或文章。所以我写下这篇文章，为同样想折腾Gnus的，使用中文的Emacser指路。&lt;/p&gt;&#xA;&lt;p&gt;本篇文章不是《Emacs完全上手指南/圣经/官方文档》，不能做到全面、无误，但可以保证是中文互联网上较新的资料，如有错误，欢迎邮件或在评论区指出。&lt;/p&gt;&#xA;&lt;p&gt;Gnus是一个多功能的信息聚合器，邮件只是它的功能之一，本篇文章主要配置邮件功能。&lt;/p&gt;&#xA;&lt;h2 id=&#34;getting-started&#34;&gt;Getting started&lt;/h2&gt;&#xA;&lt;p&gt;Gnus的配置文件默认在&lt;code&gt;~/.gnus&lt;/code&gt;，Emacs会将它当作elisp文件读取，网上也有一些说法是&lt;code&gt;~/.gnus.el&lt;/code&gt;其实只是加载顺序的不同，如果你此前有尝试，请备份并删除以前的文件。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;touch ~/.gnus&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;gnus-select-method&#34;&gt;gnus-select-method&lt;/h2&gt;&#xA;&lt;p&gt;Gnus的后端选择，对于imap协议，一般选择&lt;code&gt;nnimap&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-elisp&#34; data-lang=&#34;elisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#d699b6&#34;&gt;setq&lt;/span&gt; gnus-select-method&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;(nnimap &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;NAME&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;这里是自己起的名字，用来区分不同的帐号&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (nnimap-address &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; imap服务器&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (nnimap-inbox &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;INBOX&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 大多数服务器都使用INBOX，除非你明确知道不同，否则不建议修改&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (nnimap-expunge &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 立即在服务器上同步删除的邮件（按需开启，开启后删除邮件无法恢复）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (nnimap-server-port &lt;span style=&#34;color:#d699b6&#34;&gt;993&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (nnimap-stream ssl)  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 使用 SSL&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (nnimap-authenticator login)  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;指定认证方式，如果服务器支持多种认证方式但自动协商失败，建议开启&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               ))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在配好后，重启Emacs，输入&lt;code&gt;M-x RET gnus RET&lt;/code&gt;，下方会闪过一些输出，根据提示填写用户名和密码后，询问是否要把用户名和密码填入&lt;code&gt;~/.authinfo&lt;/code&gt;，建议选y。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;C-x b&lt;/code&gt;切换到&lt;code&gt;*Messages*&lt;/code&gt;buffer查看，会看到类似这样的输出，那就表明你的配置无误！&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Opening connection to imap.qiye.aliyun.com via tls...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Opening connection to imap.qiye.aliyun.com...done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Saving file /home/yingyu5658/.newsrc-dribble...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Wrote /home/yingyu5658/.newsrc-dribble&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Gnus auto-save file exists.  Do you want to read it? (y or n) n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Reading /home/yingyu5658/.newsrc...done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Subscribe newsgroup: 已删除邮件&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Subscribe newsgroup: 草稿&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Subscribe newsgroup: INBOX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Subscribe newsgroup: 已发送&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Subscribe newsgroup: 垃圾邮件&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Opening nnfolder server on archive...done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;5 new newsgroups have arrived&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Checking new news...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nnimap read 0k from imap.qiye.aliyun.com (initial sync of 5 groups; please wait)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Checking new news...done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;No news is good news&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个news是历史遗留词汇，最后一行输出仅仅代表当前没有未读邮件。&lt;/p&gt;&#xA;&lt;p&gt;你可以用另一个账号向这个邮箱发送一封测试邮件，重新打开Gnus，会有这样的输出：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1:*INBOX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们回车点进去，就会打开那封邮件显示内容啦。&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://images.glowisle.me/2026-02-10_19-50.png&#34; alt=&#34;测试邮件效果&#34;&gt;&#xA;    &lt;figcaption&gt;测试邮件效果&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;p&gt;在Group Buffer中按下&lt;code&gt;L&lt;/code&gt;，可以看到所有文件夹。&lt;/p&gt;&#xA;&lt;h2 id=&#34;多帐号配置&#34;&gt;多帐号配置&lt;/h2&gt;&#xA;&lt;p&gt;多账号配置需要设置&lt;code&gt;gnus-secondary-select-methods&lt;/code&gt;这个变量，这里和&lt;code&gt;gnus-select-method&lt;/code&gt;一起说一下。后者是主服务器，前者是额外服务器列表，但几乎和主服务器同级，使用中可以当作平级。&lt;/p&gt;&#xA;&lt;p&gt;多账号配置示例：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-elisp&#34; data-lang=&#34;elisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#d699b6&#34;&gt;setq&lt;/span&gt; gnus-select-method&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;(nnimap &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;glowsisle&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (nnimap-address &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;imap.qiye.aliyun.com&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (nnimap-inbox &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;INBOX&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (nnimap-expunge &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (nnimap-server-port &lt;span style=&#34;color:#d699b6&#34;&gt;993&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (nnimap-stream ssl)  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 使用 SSL&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (nnimap-authenticator login)  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 必须指定认证方式&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               ))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#d699b6&#34;&gt;setq&lt;/span&gt; gnus-secondary-select-methods&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;((nnimap &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;outlook&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;(nnimap-address &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;outlook.office365.com&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;(nnimap-server-port &lt;span style=&#34;color:#d699b6&#34;&gt;993&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;(nnimap-stream ssl)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 如果你有更多账户，另一个账户的配置同上。&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注意到了吗，&lt;code&gt;secondary&lt;/code&gt;的配置和我们一开始配置的&lt;code&gt;gnus-select-method&lt;/code&gt;一模一样，而且它可以容纳多个账户。&lt;/p&gt;&#xA;&lt;p&gt;注意：Microsoft Outlook / Microsoft 365 默认禁用普通 IMAP 密码登录。Gnus 无法使用 OAuth2，因此必须在 Microsoft 帐号中启用双重验证并生成应用专用密码，否则会出现 NO LOGIN failed 错误。&lt;/p&gt;&#xA;&lt;h2 id=&#34;发邮件&#34;&gt;发邮件&lt;/h2&gt;&#xA;&lt;p&gt;虽然对于一个Gnus教程来说有点跑题，但你应该会需要发件配置的。&lt;/p&gt;&#xA;&lt;p&gt;在Emacs中发送邮件有三条路，分别是&lt;code&gt;msmtp&lt;/code&gt;、&lt;code&gt;smtpmail&lt;/code&gt;（Emacs内置）、sendmail。&lt;/p&gt;&#xA;&lt;p&gt;最推荐的是msmtp，与Gnus、Emacs解耦，并且配置简单优雅。&lt;/p&gt;&#xA;&lt;h3 id=&#34;安装&#34;&gt;安装&lt;/h3&gt;&#xA;&lt;p&gt;以Debian为例：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install msmtp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在配置文件中&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-elisp&#34; data-lang=&#34;elisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#d699b6&#34;&gt;setq&lt;/span&gt; send-mail-function &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;sendmail-send-it&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#d699b6&#34;&gt;setq&lt;/span&gt; message-send-mail-function &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;sendmail-send-it&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#d699b6&#34;&gt;setq&lt;/span&gt; sendmail-program &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;/usr/bin/msmtp&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在&lt;code&gt;~/.msmtprc&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;account 账户名&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;host smtp.server.address&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;from your@account.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;auth login&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;port yourport&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;user your@account.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;password 不建议明文写密码，配置方式见下文&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;auth on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tls on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tls_starttls off&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tls_certcheck  off &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tls_trust_file /etc/ssl/certs/ca-certificates.crt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;account default : 默认账户，填写account的值&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;密码存储&#34;&gt;密码存储&lt;/h2&gt;&#xA;&lt;p&gt;需要创建一个包含密码的文本文件。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;touch password &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;yourpassword&amp;#34;&lt;/span&gt; &amp;gt; ./password&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后使用GPG加密，这样会生成一个&lt;code&gt;password.gpg&lt;/code&gt;文件&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gpg --symmetric --cipher-algo AES256 password&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后在&lt;code&gt;~/.msmtprc&lt;/code&gt;中，把密码那行改成&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;passwordeval &amp;#34;gpg --quiet --batch --decrypt /path/to/password.gpg&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样每次使用都要输入GPG密码，为了避免这种情况，可以在&lt;code&gt;~/.gnupg/gpg.conf&lt;/code&gt;写入以下内容来缓存密码。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;use-agent&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样就不用每次都输入密码了。记得删除明文存储密码的password文件:)&lt;/p&gt;&#xA;&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.gnu.org/software/emacs/manual/html_mono/gnus.html&#34;&gt;Gnus Manual&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/csophys/articles/2375236.html&#34;&gt;Emacs Gnus 的基本配置与使用&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://emacs-china.org/t/emacs-send-mail-rmail-and-gnus/11730/4?page=2&#34;&gt;Emacs收发邮件完全操作指南: Send-Mail, Rmail and Gnus&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>Emacs，我又回来了！</title>
      <link>https://blog.verdant.ee/posts/emacs-i-am-back/</link>
      <pubDate>Sat, 01 Nov 2025 12:01:12 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/emacs-i-am-back/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;这大概已经是我第四次尝试入门 Emacs 了。&lt;/p&gt;&#xA;&lt;p&gt;前几次尝试过自己重新配置 Emacs、Spacemacs。自己配置简直是在堆屎山， Spacemacs 的机制搞不明白而且很卡，听说&lt;a href=&#34;https://github.com/doomemacs/doomemacs&#34;&gt;Doom Emacs&lt;/a&gt; 对 Vi/Vim 用户很友好，那就尝试一下吧！&lt;/p&gt;&#xA;&lt;p&gt;虽然我不能算是个老 Vimer，但是也深受 Vim 操作模式的荼毒，只想用 HJKL 走天下。之前也想玩 Obsidian 。但是&lt;strong&gt;它的 Vim mode 实在是太简陋了！！！&lt;/strong&gt; C-d不是向下翻页，而是把整行都删掉！&lt;/p&gt;&#xA;&lt;p&gt;不过手机上的 Ob 还是可以一用，比如 Banyan 插件，用来随时随地写一些碎碎念很方便。至于其他的功能，还是配 Emacs 更好玩吧。&lt;/p&gt;&#xA;&lt;h2 id=&#34;安装&#34;&gt;安装&lt;/h2&gt;&#xA;&lt;p&gt;根据官方仓库的文档，使用以下命令安装：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone --depth &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt; https://github.com/doomemacs/doomemacs ~/.config/emacs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;~/.config/emacs/bin/doom install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;速度比我想象中的要快得多，而且是交互式操作，感觉比 Spacemacs 友好一点？&lt;del&gt;这个脚本的输出有一股 Cargo 味……&lt;/del&gt;&lt;/p&gt;&#xA;&lt;p&gt;安装结束后给了一点提示：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;But before you doom yourself, here are some things you should know:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1. Don&amp;#39;t forget to run &amp;#39;doom sync&amp;#39; and restart Emacs after modifying init.el or&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   packages.el in ~/.config/doom. This is never necessary for config.el.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2. If something goes wrong, run `doom doctor` to diagnose common issues with&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   your environment, setup, and config.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;3. Use &amp;#39;doom upgrade&amp;#39; to update Doom. Doing it any other way will require&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   additional steps (see &amp;#39;doom help upgrade&amp;#39;).&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;4. Access Doom&amp;#39;s documentation from within Emacs via &amp;#39;SPC h d h&amp;#39; or &amp;#39;C-h d h&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   (or &amp;#39;M-x doom/help&amp;#39;).&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Have fun!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中提到了一个叫&lt;strong&gt;doom&lt;/strong&gt;的命令，这是一个在&lt;code&gt;~/.emacs.d/bin/&lt;/code&gt;下的二进制文件，可以做个链接到&lt;code&gt;/usr/bin&lt;/code&gt;以便在任何地方使用。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo ln -s ~/.emacs.d/bin/doom /usr/bin/doom&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;配置&#34;&gt;配置&lt;/h2&gt;&#xA;&lt;p&gt;启动时全屏：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-elisp&#34; data-lang=&#34;elisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(add-hook &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;window-setup-hook&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;#&amp;#39;&lt;/span&gt;toggle-frame-maximized)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装 &lt;a href=&#34;https://github.com/emacs-eaf/emacs-application-framework&#34;&gt;Eaf&lt;/a&gt; 插件：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone --depth=1 -b master https://github.com/emacs-eaf/emacs-application-framework.git ~/.emacs.d/site-lisp/emacs-application-framework/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd emacs-application-framework&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chmod +x ./install-eaf.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./install-eaf.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;用用看吧，后续有什么需求再折腾。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Emacs配置记录 2——C/C++环境配置</title>
      <link>https://blog.verdant.ee/posts/emacs%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95-2c-c++%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/</link>
      <pubDate>Wed, 04 Jun 2025 18:58:37 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/emacs%E9%85%8D%E7%BD%AE%E8%AE%B0%E5%BD%95-2c-c++%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;经过&lt;a href=&#34;&#34;&gt;上一篇&lt;/a&gt;的简单调教，Emacs已经勉强变成了一个温顺的文本编辑器，但是离写代码这个宏大的目标还是有一段距离的，今天来解决主要问题：代码补全。由于我要写一点简单的C代码，那么重点就先放到C/CPP环境搭建中。&lt;/p&gt;&#xA;&lt;p&gt;站在巨人的肩膀上，在Emacs中的代码补全使用巨硬的LSP协议。&lt;/p&gt;&#xA;&lt;h2 id=&#34;spacemacs&#34;&gt;Spacemacs&lt;/h2&gt;&#xA;&lt;p&gt;经过考虑，我还是决定使用Spacemacs，比起原版Emacs，它更适合新手，也更能快速投入开发。避免配置陷阱，过多把时间花在刀把上。唉，也就是说，昨天大部分都白干了。算了，生命的意义就在于折腾，怕折腾我也不会玩Emacs了。来吧！&lt;/p&gt;&#xA;&lt;p&gt;先来安装一下Spacemacs。&#xA;&lt;code&gt;git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;重启Emacs，让他下载一下自带的包。&lt;/p&gt;&#xA;&lt;p&gt;上次没清理干净Spacemacs，不知道存在哪的备份还在，算是免去了一些折腾吧。来看看现在的Emacs都配置了什么。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   dotspacemacs-configuration-layers&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;(yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     markdown&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     javascript&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (auto-completion &lt;span style=&#34;color:#e69875&#34;&gt;:variables&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      auto-completion-idle-delay &lt;span style=&#34;color:#d699b6&#34;&gt;0.01&lt;/span&gt;    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 降低补全延迟&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      auto-completion-minimum-prefix-length &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (prettier &lt;span style=&#34;color:#e69875&#34;&gt;:variables&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               prettier-always-enable &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 保存时自动格式化&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (javascript &lt;span style=&#34;color:#e69875&#34;&gt;:variables&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 javascript-backend &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;lsp&lt;/span&gt;        &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 启用LSP后端&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 javascript-fmt-tool &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;prettier&lt;/span&gt;) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 格式化工具选Prettier&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (c-c++ &lt;span style=&#34;color:#e69875&#34;&gt;:variables&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            c-c++-backend &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;lsp-clangd&lt;/span&gt;)         &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; C/C++使用Clangd后端&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (vue &lt;span style=&#34;color:#e69875&#34;&gt;:variables&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          vue-backend &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;lsp&lt;/span&gt;)                    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; Vue使用LSP后端&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (html)                                    &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; HTML/CSS支持&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (lsp)                                     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 必须的LSP核心支持层&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (auto-completion)                         &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 自动补全&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (syntax-checking)                         &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 语法检查&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; ----------------------------------------------------------------&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; Example of useful layers you may want to use right away.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; Uncomment some layer names and press `SPC f e R&amp;#39; (Vim style) or&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; `M-m f e R&amp;#39; (Emacs style) to install them.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; ----------------------------------------------------------------&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; auto-completion&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; better-defaults&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     emacs-lisp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     treemacs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; git&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     helm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     lsp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; markdown&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     multiple-cursors&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; org&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; (shell :variables&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;;        shell-default-height 30&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;;        shell-default-position &amp;#39;bottom)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; spell-checking&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; syntax-checking&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; version-control&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     treemacs)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;emmm，还是有点有用的。比如C/C++这里，就启用了LSP。还有一些之前搞的前端配置。就是不知道为啥，JavaScript的补全不太好使。&lt;/p&gt;&#xA;&lt;h2 id=&#34;语法检查&#34;&gt;语法检查&lt;/h2&gt;&#xA;&lt;p&gt;语法检查，选择当前比较成熟的flycheck，在Spacemacs中对应&lt;code&gt;syntax-checking&lt;/code&gt;，在.spacemacs中的&lt;code&gt;dotspacemacs-configuration-layers&lt;/code&gt;写入&lt;code&gt;(configuration-layer/declare-layer &#39;syntax-checking)&lt;/code&gt;&#xA;该层会自动集成Flycheck及其常见语言的后端支持。&lt;/p&gt;&#xA;&lt;p&gt;C/C++要安装&lt;code&gt;clang-tidy&lt;/code&gt;或&lt;code&gt;cppcheck&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;h3 id=&#34;进阶配置&#34;&gt;进阶配置&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (with-eval-after-load &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;flycheck&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; flycheck-check-syntax-automatically &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;(save mode-enabled) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; 保存时检查&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          flycheck-display-errors-delay &lt;span style=&#34;color:#d699b6&#34;&gt;0.5&lt;/span&gt;                        &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; 错误显示延迟&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          flycheck-indication-mode &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;right-fringe&lt;/span&gt;))                 &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; 错误标记位置&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;spacemacs-文件基本介绍&#34;&gt;&lt;a href=&#34;https://liuzhijun-source.github.io/spacemacs-14-days/#/Week01/Day05/day05_spacemacs%E7%9A%84%E8%BF%9B%E9%98%B6%E9%85%8D%E7%BD%AE_%E4%B8%8A?id=spacemacs-%e6%96%87%e4%bb%b6%e5%9f%ba%e6%9c%ac%e4%bb%8b%e7%bb%8d&#34;&gt;.spacemacs 文件基本介绍&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;.spacemacs 文件一般会自动生成在主目录下，这个文件是配置 Spacemacs 的入口，有关于 Spacemacs 本身的配置基本都能在里面进行修改，用户设置同样在这个文件中修改。&lt;/p&gt;&#xA;&lt;p&gt;.spacemacs 中，内容一般被分为以下几个部分，每个部分都封装在一个函数中：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;dotspacemacs/layers&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在这里可以声明一些 layer，以及删除、增添一些包，在这里还可以调整 Spacemacs 加载时的一些行为&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;dotspacemacs/init&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Spacemacs 绝大部分的配置都位于此，你可以在此修改配置中可选的选项，但绝对不能将自己的用户配置代码添加在这里&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;dotspacemacs/user-init&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这里的内容会在 Emacs 启动前开始加载，一般在这里设置你需要使用的 elpa 源，你应该尽量把用户配置放在 &lt;code&gt;dotspacemacs/user-config&lt;/code&gt; 中&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;dotspacemacs/user-config&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在这里可以添加你的用户配置代码，你自己的定义的大部分配置一般都在这里完成&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;dotspacemacs/emacs-custom-settings&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Spacemacs 自己生成的配置，同样不建议自己去修改&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;摘自&lt;a href=&#34;https://liuzhijun-source.github.io/spacemacs-14-days/#/Week01/Day05/day05_spacemacs%E7%9A%84%E8%BF%9B%E9%98%B6%E9%85%8D%E7%BD%AE_%E4%B8%8A&#34;&gt;Spacemaccs 14 Days&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</description>
    </item>
    <item>
      <title>我还是放不下Emacs！</title>
      <link>https://blog.verdant.ee/posts/%E6%88%91%E8%BF%98%E6%98%AF%E6%94%BE%E4%B8%8D%E4%B8%8Bemacs/</link>
      <pubDate>Tue, 03 Jun 2025 20:07:15 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E6%88%91%E8%BF%98%E6%98%AF%E6%94%BE%E4%B8%8D%E4%B8%8Bemacs/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;难受，真难受呀。作为一个痴迷Vim的人，总是被Emacs的强大勾引，看见别人配的酷炫全能的Emacs就走不动路，脑子里想着“没事没事，我Vim轻量启动极快，Emacs这种重量级是比不上的”，自我安慰。实际上多想玩Emacs只有我自己知道&amp;hellip;&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;我之前也试过&lt;a href=&#34;https://www.yingyu5658.me/post/2193909713/&#34;&gt;配Emacs&lt;/a&gt;，但是Windows搞出来的不伦不类还很卡的东西太难受，用WSL尝试了一下Spacemacs，搞不明白那个层机制，也对ELisp这个语言不熟悉（说实话到现在Lua的一些东西我都不明白），而且之前的配置也一直想一口吃个大胖子，一天内就配到IDE的强大程度，经过几次失败和Vim配置经验后，我深知这是不可能的，除非在我使用Emacs后N周年的第N周目重新删干净再配，也许能做到。&lt;/p&gt;&#xA;&lt;p&gt;定个小目标吧，每天配一点点，成果起码要达到以下程度：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;能胜任前端、Nodejs的开发&lt;/li&gt;&#xA;&lt;li&gt;能胜任CPP/C的开发&lt;/li&gt;&#xA;&lt;li&gt;能使用EAF浏览网页&lt;/li&gt;&#xA;&lt;li&gt;有一点花里胡哨的小功能&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;其实我也挺想把博客迁移到Emacs，完全用org-mode来写，Hexo越来越慢。其实Hugo也不是不行，就是不太熟悉也不喜欢Go。看了&lt;a href=&#34;https://liujiacai.net/&#34;&gt;刘家财大佬的博客&lt;/a&gt;后感觉这个也太酷了，主题我也很喜欢，但是评论功能可能有点折腾，我对评论系统也有点不太在意。最难割舍的是现在用的这个主题&amp;hellip;&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;刘家财老师是这样说的&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;只不过遗憾的是，即使写了近 10 年的博客，有价值的评论少之又少，可能中文互联网内没多少人认真写技术评论吧。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这点我确实认同，观察了一些博客的评论，真正讨论技术内容的没几个，大多都是在围观、附和。但是我的博客类型也不能算是纯技术博客，保持与读者的互动还是很有意思的。&lt;/p&gt;&#xA;&lt;p&gt;言归正传，我现在的Emacs在WSL里，装的是Spacemacs，能正常用eaf，但是写代码很难受，也没有补全，可以说现在它只能当一个浏览器用，我准备推翻重新配。&lt;/p&gt;&#xA;&lt;p&gt;那么，从现在开始，来配Emacs！！！&lt;/p&gt;&#xA;&lt;p&gt;&lt;figure class=&#34;image-caption&#34;&gt;&#xA;    &lt;img src=&#34;https://pavinberg.github.io/emacs-book/images/emacs-book/intro/learningCurve.jpg&#34; alt=&#34;各个编辑器学习曲线图&#34;&gt;&#xA;    &lt;figcaption&gt;各个编辑器学习曲线图&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;与过去挥手&#34;&gt;与过去挥手&lt;/h2&gt;&#xA;&lt;p&gt;在&lt;code&gt;rm -rf ~/.emacs.d&lt;/code&gt;后，那个不伦不类、上不去下不来的Emacs彻底成为了历史。重新输入Emacs，又看到熟悉又陌生的丑陋开屏页。&lt;/p&gt;&#xA;&lt;h2 id=&#34;小插曲&#34;&gt;小插曲&lt;/h2&gt;&#xA;&lt;p&gt;WSLg间歇性抽风，打不开GUI&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Display 10.255.255.254:0 unavailable, simulating -nw&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;打开管理员Powershell，运行&lt;code&gt;wsl --update&lt;/code&gt;&#xA;![[public/images/我还是放不下Emacs！/Pasted image 20250603210050.png]]&#xA;&lt;del&gt;我草，怎么这么慢？？&lt;/del&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;melpa配置&#34;&gt;MELPA配置&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;package&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(add-to-list &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;package-archives&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;melpa&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;https://melpa.org/packages/&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(package-initialize)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;切换中国镜像源&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;package&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; package-archives &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;((&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;gnu&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;http://mirrors.cloud.tencent.com/elpa/gnu/&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;melpa&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;http://mirrors.cloud.tencent.com/elpa/melpa/&amp;#34;&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(package-initialize)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重启Emacs，输入&lt;code&gt;package-list-packages&lt;/code&gt;就可以查看所有插件。&lt;code&gt;package-install&lt;/code&gt;，回车输入插件名就可以安装对应插件。&#xA;默认情况下，插件会被安装到 &lt;code&gt;~/.emacs.d/elpa/&lt;/code&gt; 目录下。&lt;/p&gt;&#xA;&lt;h2 id=&#34;use-package&#34;&gt;use-package&lt;/h2&gt;&#xA;&lt;p&gt;输入&lt;code&gt;package-install&lt;/code&gt;，输入&lt;code&gt;use-package&lt;/code&gt;，回车安装，然后在init.el中写&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(eval-when-compile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#b2c98f&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;use-package&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ivy&#34;&gt;ivy&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;use-package&lt;/span&gt; ivy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:ensure&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:init&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (ivy-mode &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (counsel-mode &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:config&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; ivy-use-virtual-buffers &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; search-default-mode &lt;span style=&#34;color:#b2c98f&#34;&gt;#&amp;#39;&lt;/span&gt;char-fold-to-regexp)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; ivy-count-format &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;(%d/%d) &amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:bind&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; ((&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-s&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;swiper&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-x b&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;ivy-switch-buffer&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-c v&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;ivy-push-view&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-c s&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;ivy-switch-view&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-c V&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;ivy-pop-view&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-x C-@&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;counsel-mark-ring&lt;/span&gt;)&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 在某些终端上 C-x C-SPC 会被映射为 C-x C-@，比如在 macOS 上，所以要手动设置&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-x C-SPC&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;counsel-mark-ring&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e69875&#34;&gt;:map&lt;/span&gt; minibuffer-local-map&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-r&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; counsel-minibuffer-history)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;amx&#34;&gt;amx&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;use-package&lt;/span&gt; amx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:ensure&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:init&lt;/span&gt; (amx-mode))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ace-window&#34;&gt;ace-window&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(use&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;package&lt;/span&gt; ace&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; :ensure t&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; :&lt;span style=&#34;color:#b2c98f&#34;&gt;bind&lt;/span&gt; ((&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-x o&amp;#34;&lt;/span&gt; . &amp;#39;ace&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;window)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;mwim&#34;&gt;mwim&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;use-package&lt;/span&gt; mwim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:ensure&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:bind&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-a&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; mwim-beginning-of-code-or-line)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;C-e&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; mwim-end-of-code-or-line))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;undo-tree&#34;&gt;undo-tree&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;use-package&lt;/span&gt; undo-tree&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:ensure&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:init&lt;/span&gt; (global-undo-tree-mode)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:custom&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (undo-tree-auto-save-history &lt;span style=&#34;color:#d699b6&#34;&gt;nil&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;smart-mode-line&#34;&gt;smart-mode-line&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;use-package&lt;/span&gt; smart-mode-line&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:ensure&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:init&lt;/span&gt; (sml/setup))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;good-scroll&#34;&gt;good-scroll&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;use-package&lt;/span&gt; good-scroll&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:ensure&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:if&lt;/span&gt; window-system     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 在图形化界面时才使用这个插件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;:init&lt;/span&gt; (good-scroll-mode))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;今天就先到这里吧。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Emacs EAF插件打开浏览器只显示opening http://xxx.xxx的解决方法</title>
      <link>https://blog.verdant.ee/posts/emacs-eaf%E6%8F%92%E4%BB%B6%E6%89%93%E5%BC%80%E6%B5%8F%E8%A7%88%E5%99%A8%E5%8F%AA%E6%98%BE%E7%A4%BAopening-http-xxx-xxx%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/</link>
      <pubDate>Tue, 29 Apr 2025 10:02:49 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/emacs-eaf%E6%8F%92%E4%BB%B6%E6%89%93%E5%BC%80%E6%B5%8F%E8%A7%88%E5%99%A8%E5%8F%AA%E6%98%BE%E7%A4%BAopening-http-xxx-xxx%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/</guid>
      <description>&lt;p&gt;检查是否安装全部依赖，如yay、pip等。我这里是由于没有安装pip导致的。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sudo pacman -S python-pip&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;安装好后，进入eaf安装目录&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;cd ~/.emacs.d/site-lisp/emacs-application-framework &amp;amp;&amp;amp; ./install-eaf.py&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;重新安装eaf。等待脚本运行完成，打开emacs，输入&lt;code&gt;M-x eaf-install-and-update&lt;/code&gt;，等待执行完成。&lt;/p&gt;&#xA;&lt;p&gt;重新输入&lt;code&gt;M-x eaf-open-browser&lt;/code&gt;，输入网址，即可正常访问网页。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>初折腾Emacs记录</title>
      <link>https://blog.verdant.ee/posts/%E5%88%9D%E6%8A%98%E8%85%BEemacs%E8%AE%B0%E5%BD%95/</link>
      <pubDate>Sun, 13 Apr 2025 12:15:33 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/%E5%88%9D%E6%8A%98%E8%85%BEemacs%E8%AE%B0%E5%BD%95/</guid>
      <description>&lt;h2 id=&#34;基础配置&#34;&gt;基础配置&lt;/h2&gt;&#xA;&lt;p&gt;Windows下需要在软件顶部Toolbar的Options中随便更改一个选项，然后再点Save Options，这样就会再&lt;code&gt;C:\Users\Username\appdata\Roaming\&lt;/code&gt;下生成.emacs和.emacs.d/&lt;/p&gt;&#xA;&lt;p&gt;在emacs.d中新建一个文件&lt;code&gt;init.el&lt;/code&gt;，填写如下配置&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;;; init.el --- Load the full configuration -*- lexical-binding: t -*-&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;;; Commentary:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; This file bootstraps the configuration, which is divided into&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; a number of other files.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;;; Code:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;let&lt;/span&gt; ((minver &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;25.1&amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#d699b6&#34;&gt;when&lt;/span&gt; (version&amp;lt; emacs-version minver)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#dbbc7f&#34;&gt;error&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;Your Emacs is too old -- this config requires v%s or higher&amp;#34;&lt;/span&gt; minver)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#d699b6&#34;&gt;when&lt;/span&gt; (version&amp;lt; emacs-version &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;26.1&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (message &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;Your Emacs is old, and some functionality in this config will be disabled. Please upgrade if possible.&amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(add-to-list &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;load-path&lt;/span&gt; (expand-file-name &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;lisp&amp;#34;&lt;/span&gt; user-emacs-directory)) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 设定源码加载路径&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; (require &amp;#39;init-benchmarking) ;; Measure startup time&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defconst *spell-check-support-enabled* &lt;span style=&#34;color:#d699b6&#34;&gt;nil&lt;/span&gt;) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; Enable with t if you prefer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defconst *is-a-mac* (&lt;span style=&#34;color:#b2c98f&#34;&gt;eq&lt;/span&gt; system-type &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;darwin&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; Adjust garbage collection thresholds during startup, and thereafter&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;let&lt;/span&gt; ((normal-gc-cons-threshold (&lt;span style=&#34;color:#b2c98f&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;20&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1024&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1024&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   (init-gc-cons-threshold (&lt;span style=&#34;color:#b2c98f&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;128&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1024&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;1024&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; gc-cons-threshold init-gc-cons-threshold)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (add-hook &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;emacs-startup-hook&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (&lt;span style=&#34;color:#d699b6&#34;&gt;lambda&lt;/span&gt; () (&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; gc-cons-threshold normal-gc-cons-threshold))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; ==========================================================================================================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; ===========================================日常使用配置===================================================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; ==========================================================================================================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; confirm-kill-emacs &lt;span style=&#34;color:#b2c98f&#34;&gt;#&amp;#39;yes-or-no-p&lt;/span&gt;)   &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 在关闭 Emacs 前询问是否确认关闭，防止误触&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(electric-pair-mode &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)            &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 自动补全括号&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(add-hook &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;prog-mode-hook&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;#&amp;#39;&lt;/span&gt;show-paren-mode) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 编程模式下，光标在括号上时高亮另一个括号&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(column-number-mode &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)            &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 在 Mode line 上显示列号&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(global-auto-revert-mode &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)         &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 当另一程序修改了文件时，让 Emacs 及时刷新 Buffer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(delete-selection-mode &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)          &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 选中文本后输入文本会替换文本（更符合我们习惯了的其它编辑器的逻辑）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; inhibit-startup-message &lt;span style=&#34;color:#d699b6&#34;&gt;t&lt;/span&gt;)       &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 关闭启动 Emacs 时的欢迎界面&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; make-backup-files &lt;span style=&#34;color:#d699b6&#34;&gt;nil&lt;/span&gt;)         &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 关闭文件自动备份&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(add-hook &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;prog-mode-hook&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;#&amp;#39;&lt;/span&gt;hs-minor-mode)  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 编程模式下，可以折叠代码块&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(global-display-line-numbers-mode &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;)     &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 在 Window 显示行号&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(tool-bar-mode &lt;span style=&#34;color:#d699b6&#34;&gt;-1&lt;/span&gt;)              &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; （熟练后可选）关闭 Tool bar&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#d699b6&#34;&gt;when&lt;/span&gt; (display-graphic-p) (toggle-scroll-bar &lt;span style=&#34;color:#d699b6&#34;&gt;-1&lt;/span&gt;)) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 图形界面时关闭滚动条&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(savehist-mode &lt;span style=&#34;color:#d699b6&#34;&gt;1&lt;/span&gt;)              &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; （可选）打开 Buffer 历史记录保存&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; display-line-numbers-type &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;relative&lt;/span&gt;)  &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; （可选）显示相对行号&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(add-to-list &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;default-frame-alist&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;(width &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;90&lt;/span&gt;)) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; （可选）设定启动图形界面时的初始 Frame 宽度（字符数）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(add-to-list &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;default-frame-alist&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;(height &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#d699b6&#34;&gt;55&lt;/span&gt;)) &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; （可选）设定启动图形界面时的初始 Frame 高度（字符数）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; ==========================================================================================================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; ===========================================插件镜像配置===================================================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;; ==========================================================================================================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;; 腾讯镜像&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;package&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e67e80&#34;&gt;setq&lt;/span&gt; package-archives &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;#39;&lt;/span&gt;((&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;gnu&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;http://mirrors.cloud.tencent.com/elpa/gnu/&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             (&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;melpa&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;http://mirrors.cloud.tencent.com/elpa/melpa/&amp;#34;&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(package-initialize)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;;;; init.el ends here&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;基础的设置和插件镜像源就配置好了，此配置可完全复制照抄。&lt;/p&gt;&#xA;&lt;p&gt;重启Emacs，按下&lt;code&gt;M-x&lt;/code&gt;输入&lt;code&gt;package-list-packages&lt;/code&gt;即可查看仓库中的所有插件&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在此列表界面下还可按下h显示帮助，按U检查所有已安装插件是否需要更新，如有就标注更新，按i标记想要安装，最后按下x就可更新。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;插件默认会被安装到&lt;code&gt;~/.emacs.d/elpa&lt;/code&gt;下，Windows同理。&lt;/p&gt;&#xA;&lt;p&gt;删除插件输入&lt;code&gt;package-delete&lt;/code&gt;，然后输入想删除的插件名即可。&lt;/p&gt;&#xA;&lt;h2 id=&#34;use-package&#34;&gt;use-package&lt;/h2&gt;&#xA;&lt;h3 id=&#34;安装&#34;&gt;安装&lt;/h3&gt;&#xA;&lt;p&gt;输入命令&lt;code&gt;package-install&lt;/code&gt;回车后输入use-package回车，然后在init.el的最上面写&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(eval-when-compile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; (&lt;span style=&#34;color:#b2c98f&#34;&gt;require&lt;/span&gt; &lt;span style=&#34;color:#e69875&#34;&gt;&amp;#39;use-package&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;每次启动Emacs优先加载此插件&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
