新浪图床挂了之后的重写及引发的学习链条:Emacs宏

缘起

最近又开始更新自己的博客,然后引发了一系列事件。

更新下博客模板,academic,发现hogu也需要更新,模板更新后发现由于hugo的更新,原先的配置方式都已经改变,内容的组织方式也已经改变。设想改变图片的存储方式。改变过程中发现,2019年月起,突然在网上看到新浪开始停止图片的外链,这就造成我网站上所有的图片都将无法访问。正式印证了那句话,免费的是最贵的。鉴于现在的空间和流量费用日渐白菜,还是一劳逸把图片全部转到网站本地吧。

引发的事件链条

  1. 更新博客,发现模板可以更新。
  2. 更新模板,发现需要更新hugo。
  3. 更新hugo,发现模板更新后配置和文章组织方式都已更改。
  4. 重新配置
  5. 更新了部分文章组织方式,发现leaf bundle模式,每篇文章可以设置一个文件夹,图片可以放在这个文件夹下。觉得很好,决定更新geocaching网站的图片存储模式。
  6. 发现geocaching.cn原使用的模板不再更新,也将模板更新为academic
  7. 重新更新模板后,再更新网站的配置和文章组织
  8. 由于要更换图片链接,因此需要修改文章
  9. 由于之前使用了ox-hugo因此还需要将文章从md格式改为org格式。在修改的过程中发现链接的更换很是繁琐。
  10. 实际应用宏,发现为了应用宏,还需要学习使用键盘来操作一切。

宏的操作

参考:http://ergoemacs.org/emacs/emacs%5Fmacro%5Fexample.html

录制宏

  1. To start recording, press 【Ctrl+x (】 (Alt+x kmacro-start-macro).
  2. Type your keystrokes.
  3. 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.
  4. 如果要在原来录制的宏之后增加,可以 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-nC-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

  1. 标记选择开始点:set-mark-command
  2. 剪切:kill-region
  3. 复制:kill-ring-save
  4. 粘贴:yank
  5. 剪切[]里的内容:使用isearch-forward和isearch-backward和set-mark-command的组合来选择需要选择的内容
  6. M-\ (delete-horizontal-space),删除光标处的所有空格和Tab字符。
  7. C-x C-o (delete-blank-lines),删除光标周围的空白行,保留当前行。
  8. M-^ (delete-indentation),将两行合为一行,删除之间的空白和缩进.
  9. C-k (kill-line),从光标处起删除该行。
  10. C-S-Backspace (kill-whole-line),删除整行。
  11. C-w (kill-region),删除区域。
  12. M-w (kill-ring-save),复制到kill 环,而不删除。
  13. M-d (kill-word),删除光标起一个单词。
  14. M-Backspace (backward-kill-word),删除光标前单词。
  15. C-x Backspace (backward-kill-sentence),往前删一句。
  16. M-k (kill-sentence),删除光标起一句。
  17. 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- 等特殊符号,删除、回车等也比较好理解,因此也可以录制完之后进行自己的微调。

海上一民工

Related