Emacs 的坑,入了大概一年半了,起初是用 vim 的时候听说有这么一个工具与 vim 并称,心中觉得想要试试就下载下来试了一下,但是不久就回到 vim 的怀抱了。

但是后面不知道怎么了,又看了一些帖子,比如说有些知乎的帖子:

  • 问:如何高效使用 vim?

  • 答: alias vim="emacs -nw"

  • 问:用 emacs 是什么感受?

  • 答:感觉自己像个魔法师,按快捷键就像挥舞魔术棒一样

对我的最后一击是那篇:《一年成为 emacs 高手》,我听信了这篇文章,便弃用 vim 开始改用 emacs 了。

这篇就主要来聊一下我这一年半以来的一些感想与经验,还有一些我的观点。

美化与插件

美化方面我在刚开始接触 linux 的时候,经常折腾。但是越用到后面,越觉得没有必要去过度美化,去过度的折腾。现在我使用的是 gnome 桌面,只装了少数几个插件,而壁纸也是全部设备都换成同一张壁纸以求简洁与统一。

Figure 1: 普通的 gnome 桌面

Figure 1: 普通的 gnome 桌面

在 emacs 上面,也没有什么折腾的点,换主题就是安装主题然后 load-theme 或者 customize-theme,插件的话它们的 github 主页上面也有详细的示范,英语水平过关的话也没有什么难度。

对一些折腾的点,也算有点小经验吧,分享出来

  • 想要一些功能,但是不知道有什么对应的插件
    • 之前觉得折腾是没有提问的习惯,也不具备自己解决的能力。
    • 上论坛搜索或者提问,也可以问各种群里面的群友。而且现在具备一些自己 elisp 编程解决的能力
  • 为各种之后用不上的功能折腾
    • 我不经常使用 emacs 看邮件或者听音乐,但是我却花了很多时间配置过 wanderlust 和 emms,明明很多语言我就临时写一次,但是却花了非常多的时间进行配置环境。
    • 减少欲望,认清 emacs 对于我来说就是一个写东西的工具,我没有必要事事都要在 emacs 中完成,虽然它有这个潜质,但是没有必要花那么多折腾的时间去折腾那些我有很大可能(几乎是必定)只会用一次的东西。
  • 动手先于思考
    • 比如我想解决一个 org-mode 导出 latex 时中文变成方框的问题,于是在论坛上面,在 google 上面搜索,找到非常多的参考,然后我就头脑混乱地复制粘贴这些解决方法,自己在那里乱搞。头脑是晕的,空的,手却不停,时间就这样过去了。

    • 这样的事情经常发生,而我最近才意识到如何解决,就是在做之前先想,了解各种操作各种配置实质上是在干什么,而不是在各种解决方案之中凌乱。

      对于上面这个问题,org-mode 导出 latex 的时候中文变方框的问题,我最后的解决方法是用 org2ctex 这个插件,但是之前是自己更改 org-mode 导出 latex 的一些默认配置,将字体文件设置好,并且还要设置 xelatex,这些东西,不是 org-mode 的问题,而是 latex 的问题。

      我想要解决这个问题的时候,既不是非常明白 emacs,也只是想导出 pdf 而已,不是非常了解 latex,所以在解决这个问题的时候头脑发晕,怎么也搞不明白。现在了解了 emacs 也了解了 latex,因此这个问题就不再是问题了。

      回想起来,这个问题的解决不是因为我抄了一套配置,而是因为我去了解了 org-mode 导出 latex,再处理成 pdf 这个过程发生的事情(然后再抄了一个配置)。

配置

  • 问:到底是自己攒一套配置还是使用别人的配置?

  • 答:我倾向于让大家先用别人的配置

    我推荐的是centaur-eacs,如果是从 vim 转过来的同学的话可以使用doom-emacs(实话说我其实也更喜欢 doom,不过因为各种原因,比如evil-mode,我弃坑自己攒配置了)

    相信很多人都有这样的疑问,自己攒一套配置不是能够让自己的学习空间更加大吗?不然大佬都配置好了,我自己不用配置了,还学习什么?

    我对此解释到:初学者自己配置也不会写 elisp 的,也不过是在配置一些基本的、没有什么技术难度的 setq, use-package, add-hook 等等,这些东西对技术的提升没有什么帮助,不如省点心,用别人的配置体验一番 emacs,想要学习的话可以看看别人写的函数,看看别人怎么配置的。

  • 问:有必要使用 emacs 来写代码吗?

  • 答:我觉得可以但是没有必要。

    目前我使用 vscode 写 c++,但是 python 之类小工具的是用 emacs 来写。

    对我来讲,emacs 主要还是一个 org-mode 的编辑器,org-mode 是我使用 emacs 的最大理由,其次是 magit。

org-mode

org-mode 是我开始使用 emacs 的一大理由,而在使用的过程中,也有一些经验值得分享一番

  • 问:用 org-mode 做 GTD 如何?

  • 答:因人而异

    我之前折腾过一段时间 org-mode 的 GTD,手机使用的是 orgzly,然后一直没有办法坚持下来,或者有人可以坚持下来吧,但是那个人不会是我。

  • 问:org-mode 用来做笔记如何?

  • 答:非常好用,org-mode 支持 latex 导出,我曾经用它写过我的课程设计的文档。

    下面是我上个学期用它做的笔记

    Figure 2: 《自动控制原理》的笔记

    Figure 2: 《自动控制原理》的笔记

rime

在 emacs 里面,如果使用 hydra 或者 ace-window,又开启了输入法,那么就会冲突,导致 hydra 的按键失效,一直觉得不怎么方便,但是觉得没有什么,就一直忍着了。

但是刚刚有点受不了了,于是去查,还真的让我找到解决的方法了。

就是设置一个变量的值 rime-disable-predicates 就好了,下面是我的配置:

(use-package rime
  :custom
  (default-input-method "rime")
  (rime-disable-predicates
   '(rime-predicate-org-latex-mode-p
     rime-predicate-hydra-p
     rime-predicate-prog-in-code-p
     rime-predicate-org-in-src-block-p
     rime-predicate-ace-window-p)))

其实这个点根本就不算什么难处理的事情,只不过我太能忍耐,又怕麻烦,因此没有去解决。我不应该这么畏畏缩缩,而要对让自己不爽的重拳出击才是。

一些可能会用上但是容易忘的命令

  • 问: 如何让 emacs 不自动折断过长的行,就像 nano 的默认状态一样?

    答: M-x toggle-truncate-lines

Emacs 里面的正则替换

这里记录一下正则替换的时候的注意的点,注意的是,我这里只写我使用的时候经常忘记从而需要查的东西,更加具体的可以到这里

使用 syntax class

  [:digit:]  a digit, same as [0-9]
  [:alpha:]  a letter (an alphabetic character)
  [:alnum:]  a letter or a digit (an alphanumeric character)
  [:upper:]  a letter in uppercase
  [:lower:]  a letter in lowercase
  [:graph:]  a visible character
  [:print:]  a visible character plus the space character
  [:space:]  a whitespace character, as defined by the syntax table, but typically [ \t\r\n\v\f], which includes the newline character
  [:blank:]  a space or tab character
  [:xdigit:] an hexadecimal digit
  [:cntrl:]  a control character
  [:ascii:]  an ascii character
  [:nonascii:]  any non ascii character

虽然 syntax class 很好,但是在使用的时候,需要再在外面再加一个中括号,即: [[:digit:]]

使用 ivy-occur 与 wgrep 实现批量修改

  1. 首先先用 counsel-rg 搜索目录的全部文件
  2. 然后在 ivy 里面 C-c C-o ,进入 ivy-occur 界面
  3. C-x C-q 进入 wgrep
  4. 然后 C-M-$ 进行 query-replace-regexp
  5. C-c C-c Apply changes

持续更新

写了好久了,从开始的文思泉涌到后来的半天嗦不出一句话,之后想到什么写什么吧。

先歇着了。。。