新浪图床挂了之后的重写及引发的学习链条:Emacs宏
缘起
最近又开始更新自己的博客,然后引发了一系列事件。
更新下博客模板,academic,发现hogu也需要更新,模板更新后发现由于hugo的更新,原先的配置方式都已经改变,内容的组织方式也已经改变。设想改变图片的存储方式。改变过程中发现,2019年月起,突然在网上看到新浪开始停止图片的外链,这就造成我网站上所有的图片都将无法访问。正式印证了那句话,免费的是最贵的。鉴于现在的空间和流量费用日渐白菜,还是一劳逸把图片全部转到网站本地吧。
引发的事件链条
- 更新博客,发现模板可以更新。
- 更新模板,发现需要更新hugo。
- 更新hugo,发现模板更新后配置和文章组织方式都已更改。
- 重新配置
- 更新了部分文章组织方式,发现leaf bundle模式,每篇文章可以设置一个文件夹,图片可以放在这个文件夹下。觉得很好,决定更新geocaching网站的图片存储模式。
- 发现geocaching.cn原使用的模板不再更新,也将模板更新为academic
- 重新更新模板后,再更新网站的配置和文章组织
- 由于要更换图片链接,因此需要修改文章
- 由于之前使用了ox-hugo因此还需要将文章从md格式改为org格式。在修改的过程中发现链接的更换很是繁琐。
- 实际应用宏,发现为了应用宏,还需要学习使用键盘来操作一切。
宏的操作
参考:http://ergoemacs.org/emacs/emacs%5Fmacro%5Fexample.html
录制宏
- To start recording, press 【Ctrl+x (】 (Alt+x kmacro-start-macro).
- Type your keystrokes.
- To stop recording, press 【Ctrl+x )】 (Alt+x kmacro-end-macro).If you made a mistake, you can cancel 【Ctrl+g】 (Alt+x keyboard-quit) and start over.
- 如果要在原来录制的宏之后增加,可以
C-u C-u C-x (
或C-u C-x (
在原来的键之后增加,区别是 少了一个C-u
的会先执行一次宏。
使用宏
Alt+x call-last-kbd-macro
Alt+x kmacro-end-and-call-macro 【Ctrl+x e】
C-x C-k r
apply-macro-to-region-lines 对这一区域加macro,比如在每一行前加指定内容。
C-x C-k C-n
或 C-x C-k C-p
可以在之前运行的宏之间切换
C-x C-k b
kmacro-bind-to-key
绑定一个键
可以插入counter
可以给宏插入counter,然后给宏插入序列值,比如序号。
保存供未来使用
M-x name-last-macro 然后输入一个macro的命名 M-x insert-kbd-macro 将宏的内容输出到当前光标处 C-x C-k space debug macro C-x C-k e edit macro
这时就可以把这段宏直接插入到配置文件中去。或者也可以保存成一个 .el
文件,然后在配置中load: (load-file "~/mymacros.el")
使用键盘操作一切
参考:https://www.cnblogs.com/robertzml/archive/2010/02/19/1669204.html
- 标记选择开始点:set-mark-command
- 剪切:kill-region
- 复制:kill-ring-save
- 粘贴:yank
- 剪切[]里的内容:使用isearch-forward和isearch-backward和set-mark-command的组合来选择需要选择的内容
- M-\ (delete-horizontal-space),删除光标处的所有空格和Tab字符。
- C-x C-o (delete-blank-lines),删除光标周围的空白行,保留当前行。
- M-^ (delete-indentation),将两行合为一行,删除之间的空白和缩进.
- C-k (kill-line),从光标处起删除该行。
- C-S-Backspace (kill-whole-line),删除整行。
- C-w (kill-region),删除区域。
- M-w (kill-ring-save),复制到kill 环,而不删除。
- M-d (kill-word),删除光标起一个单词。
- M-Backspace (backward-kill-word),删除光标前单词。
- C-x Backspace (backward-kill-sentence),往前删一句。
- M-k (kill-sentence),删除光标起一句。
- M-z char (zap-to-char),删至字符char为止。
markdown格式图片转org格式
转换前:
![搜索的界面](http://wx2.sinaimg.cn/mw690/9d6855f4gy1foel1wrr0lj20u02fjnbq.jpg)
转换后:
#+caption: 搜索的界面
#+ATTR_HTML: :alt 搜索的界面
[[file:http://wx2.sinaimg.cn/mw690/9d6855f4gy1foel1wrr0lj20u02fjnbq.jpg]]
(fset ‘imgmd2org [home ?i ?n ?s ?e ?r ?t ?i ?m ?g return delete delete ?\M-x ?s ?e ?t ? ?m ?a ?r ?k ? ?c ?o ?m ?m ?a ?n ?d return ?\M-x ?i ?s ?e ?a ?r ?c ?h ? ?f ?o ?r ?w ?a ?r ?d return ?\] return ?\M-x ?d backspace ?k ?i ?l ?l ? ?r ?e ?g ?i ?o ?n return up up up end ?\M-x ?y ?a ?n ?k return backspace down ?\M-x ?y ?a ?n ?k return backspace down backspace backspace backspace backspace backspace backspace backspace backspace backspace backspace backspace backspace backspace backspace down home delete ?\M-x ?s ?e ?t ? ?m ?a ?r ?k ? ?c ?o ?m ?m ?a ?n ?d return end ?\M-x ?k ?i ?l ?l ? ?r ?e ?g ?i ?o ?n return up end ?\M-x ?y ?a ?n ?k return backspace ?\] ?\]])
对宏的初步分析
圆括号应该是 fset
的括号,宏的内容应该是 []
中的内容。 字母的按键是 ?
加字母, \
作为转义来输入 [ ] M-
等特殊符号,删除、回车等也比较好理解,因此也可以录制完之后进行自己的微调。