[问询]有简单练手的Emacs插件项目吗

同意lz的想法,练习确实是快速提升编程的有效方法。事实上,我自己的elisp编程也是通过大量的练习不断熟练的。至于lz说的用于练手的emacs插件项目,我所了解的emacs的生态应该还没有这方面有很好的支持。那么我是如何练习的?

1.帮助解决别人的问题。我之前加了很多的 emacs qq 群,群里面的大家会问很多问题以及奇葩的需求,我会尝试去解决这个问题,写一些简单的代码。有的时候甚至为了一个问题花费几个小时的时间研究解决(前提是这个问题有被研究的价值 或者 可以用于练习编程),这个过程中自己学到很多,也帮助了其他童鞋。同理,论坛里面的问题也是。

例子:我记得之前qq群里有童鞋提过一个需求:使用 tab 键将特定的 文本A 替换成特定的 文本B。这应该是我第一次尝试写elisp函数,现在看当时的代码还有很多可以完善的地方,不过确实让我近距离感受到了如何用elisp从零实现一个功能:

hack-abbr

类似的例子还有很多。我把这些问题的解决写成了以 emacs-hack 命名开头的 文章,不过很长时间没有更新了。。

2.实现自己简单的需求。使用emacs过程中,自己总会产生许多的个性化的需求,抓住这些需求,在提问之前,尝试先自己通过搜索和思考写一些函数去解决。

例子:我用的27寸的屏幕,日常开水平分割的三个窗口。编程时想放大当前的一个窗口,我知道应该会有实现类似功能的package,但也尝试自己写了几个简单的函数实现:

(defun gk-enlarge-window ()
  "Enlarge current window horizontally by 10 columns left and right."
  (interactive)
  (other-window -1)
  (shrink-window-horizontally 10)
  (other-window 1)
  (enlarge-window-horizontally 10))

(defun gk-shrink-window ()
  "Shrink current window horizontally by 10 columns left and right."
  (interactive)
  (other-window -1)
  (enlarge-window-horizontally 10)
  (other-window 1)
  (shrink-window-horizontally 10))

(global-set-key (kbd "C-x }") #'gk-enlarge-window)
(global-set-key (kbd "C-x {") #'gk-shrink-window)

可以看见,这些代码都很简单,无非就是使用现有的api,用代码对实现的过程进行模拟。这些都是力所能及的可以用于练习的小例子。

3.看elisp官方手册。手册很长,如果时间有限,不建议通篇阅读,因为看了也记不住。我是每次在编程的过程中涉及到某一方面的知识点,就把这一部分的手册的内容通读一遍。这样可以给编程提供更开拓的思路,同时也能够通过练习加深记忆。比如我写 gkroam 的时候,需要用到 overlay 和 text properties, 就阅读这部分的手册,以后便知道如何使用它们。

4.看别人的源码。编程的初期总是模仿,模仿和学习别人的代码可以快速的构建自己的编程知识和编程习惯。emacs的api很丰富,emacs的package很多,emacs插件的作者水平也参差不齐,但对于新手,无论哪种,通过看源码都可以学到很多。可以选一个自己感兴趣的,较简单package,找到自己不满意的地方,尝试阅读代码和提PR等等。

经过很多小例子的联系后,再有一个好的 idea,就可以写自己的package啦~

3 个赞