我的一句话经验——Emacs Lisp篇
把这些Emacs Lisp经验整理到一起,方便读者,方便自己。
虽然名字是Emacs Lisp经验,实际上很多也是Emacs的经验,都整理到一块。这些经验我转载到Emacs中文网了。
一句话系列的另外两篇:我的一句话经验——软件篇、一句话系列——冷知识篇。Emacs小技巧栏目下也有不少小技巧。
-
用
boundp
判断变量是否定义,可以作为一种错误处理方法。 -
用
(eval-when-compile (require 'subr-x))
在编译时引用某功能,避免warning。 -
编译Emacs的时候,老的
elc
文件可能会导致问题,一个简单的方法是删掉它们,在lisp
目录里执行find . -name '*elc' -delete
就可以了。 -
配置文件如果出错会导致Emacs启动失败,用
ignore-errors
把可能出错的括起来就好啦。 -
写Emacs Lisp代码时一定要看The Emacs Lisp Style Guide学习如何写大家都接受的代码。官方也有Tips and Conventions。
-
在自己写的函数里面使用用户输入的参数,比如用不用
C-u
行为不同,可以在调用Emacs函数的时候使用call-interactively
,这样Emacs就会把用户的参数传递过去。示例代码如下
1 | (defun my-bash () |
-
(set-visited-file-name nil)
可以取消buffer和文件的关联,也就是关闭了文件,保留文件内容,可以临时修改文件而不保存。出处。 -
Emacs 25.2之后的版本有一个特性,
use-default-font-for-symbols
默认为t
,表示Emacs使用默认字体来显示符号,用set-fontset-font
单独设置符号的字体实效,如果改为nil
就恢复了原来的行为,可以手动设置符号的字体。邮件列表里的介绍。 -
Tramp最好默认
scp
方法(Windows用scpx
),这样文件访问用scp
,快很多,功能不受影响。 -
在ESS中,如果要安装包,选镜像的时候不会弹出窗口,用
library(tcltk)
可以修复这个问题。 -
生成莫尔斯电码:
morse-region
;解码:unmorse-region
。很明显只对英文有效。
1 | ...././.-../.-../--- .--/---/.-./.-../-../.-.-.- |
-
Dired里
w
可以复制文件名,对应的函数是dired-copy-filename-as-kill
。手册里的介绍。 -
最近(As of 2018-06-26)的Emacs有Bug,必须手动设置
epg-gpg-program
才能正常使用epg,方法如下。来源。
1 | (require 'epa-file) |
- 最近(As of UTC 2018-08-12),master分支支持bignum,也就是说
1 | (1+ 2333333333333333333333333333333333333333333333333333333333333333) |
注意只针对大整数,浮点数还是原来那样。
- 如果想在GNU/Linux下使用dired-sort-menu,需要如下的代码
1 | (unless (string-equal system-type "windows-nt") |
原理是使用lisp版本的ls而非系统里安装的GNU ls。用这个包的目的是让目录排在文件前,似乎也可以设置ls的参数实现,但我没有实验成功。
- Emacs Lisp支持
\u
的写法,比如
1 | "\u601d\u60f3" |
- 如果要生成应该怎么做呢?我这样写的代码
1 | (insert "\"" (loop for c across "你好" concat (format "\\u%04x" c)) "\"") |
代码有点丑陋,似乎也可以用替换来解决。
-
C-x @ a
就是A-
,我学Emacs的时候就知道,可很多人不知道。出处似乎是Xah的网站还是Emacswiki。 -
对于Bash 5.0,不要设置tramp的
tramp-histfile-override
,因为有bug。出处。 -
字节编译函数的方法是
(byte-compile 'mandelbrot)
。 -
可以用
M-x diff-mode
,M-n
,C-c C-a
应用patch。出处。 -
如果Emacs打开含有长行/大文件困难,可以用
find-file-literally
打开,速度会快很多。 -
M-x find-grep-dired
,一键搜索,合并了find
和grep
。但在Windows上很慢不好用,我用这个。
1 | grepf () |
- 可以用
(getenv "WSLENV")
判断Emacs是否运行在WSL环境下。出处。之前我用的是:(file-exists-p "/mnt/wslg/versions.txt")
,应该是WSLg专用的。
在我知道w
可以复制文件名的几天后,我发现有人在Twitter上分享了同样的经验。
All of our lives, we have fought this war. Tonight I believe we can end it. Tonight is not an accident. There are no accidents. We have not come here by chance. I do not believe in chance. When I see three objectives, three captains, three ships. I do not see coincidence, I see providence. I see purpose. I believe it our fate to be here. It is our destiny. I believe this night holds for each and every one of us, the very meaning of our lives.
我们所有的生命,我们都为这场战争而战。今晚我相信我们可以结束它。今晚不是意外。没有意外。我们没有偶然来过这里。我不相信偶然。当我看到三个目标,三名船长,三艘船。我看不到巧合,我看到了天意。我看到了目的。我相信我们的命运就在这里。这是我们的命运。我相信这个夜晚对我们每个人都是我们生活的意义。
或者您可以把评论发在别处,添加指向本页的连接,然后把网址告诉我:
本文标题:我的一句话经验——Emacs Lisp篇
文章作者:Chris
发布时间:2017-04-02
最后更新:2022-08-01
原始链接:https://chriszheng.science/2017/04/02/One-sentence-tips-on-Emacs-Lisp/
版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 许可协议。转载请注明出处!
分享