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

在此之前想分享点心得
我发现最近两个月我的Vue进步的挺快,因为我拿Vue来做大项目了,一步一步的实践下,在不断完成组件需求的同时,那些不懂的知识点逐个学会了


自己做的一个小项目

这里结合过去的经验,我认为学习编程新知识应该这么学,
先是一个入门,带我熟悉这个内容,再是通过不断实践和尝试,在解决疑惑的同时,潜移默化地学会陌生的知识点,最后是总结,文档

换句话说,这就想数学一样,上大学没几年我就忘光了,因为不知道投入到哪里去使用,这样的话他就是空中楼阁,看着摇摇在上,实际上虚无缥缈,是个鸡肋


现在我把学校里那堆破事终于弄完了,终于有时间腾出来学习新知识了,学习Emacs了
不过相比自己学习,大家能不能通过提需求的方式,让我来实现这些需求,最后写出一些简单的emacs插件,这也正好实践我上面总结的经验。
ps: 一定要简单,千万别把我往死里整,千万别做那种只会瞎你妈掺合的产品经理

做个属于自己的

modeline

modal editing

theme

ivy/helm 相关的,比如新写一个 ivy-rg,ivy-flycheck 什么的

新的 major mode

新的 窗口管理器

org-mode 相关的,新的 exporter

等等

需求简单点吧,素材也给一点吧 :kissing_smiling_eyes:

这项目,你不对劲

动手写一个功能完整的company补全后端自用?我一直想做这事来着,感觉company的文档写的太少了,要自己看company的源码才行

1 个赞

同意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 个赞

好家伙, 直接 mirror MELPA,然后

$ fd -eel --exec wc -l | sort -n | head

学习别人源代码吧

@Kinney 多谢指点
@codedoc 没有应用这些插件的需求,那我不是白抄了吗 :joy:

我的评论里有个company backend 的例子。

我还没用过你的company-ctags呢,看过一些company backend 的例子,都没见到有说编写补全项的弹出文档的,研究了以下几个有弹出文档doc-buffer功能的后端compnay-capf company-cmake company-elisp company-semantic

感觉只有补全功能还不够用,还需要有补全项的文档,否则还要去搜索补全内容项的具体用法(因为记不住)

company-ctags有可以弹出补全项文档的功能吗?还是为了追求更快的速度所以不加这个功能。

ctags不支持文档,所以我也加不了。我一般就直接用counsel-etags看源代码。或者stackoverflow上搜一下,感觉这样速度还快一点。项目小看文档快一点慢一点都无所谓,项目大了我就直接用eacl补全多行代码把别人写好的代码抄过来。所以也无所谓文档了。

另外见我刚发明的新技术,lsp mode - Emacs Javascript basic code completion - Emacs Stack Exchange

2 个赞

对一些补全框架,不过我可以看看mode-line-mode怎么写
请问有写mode-line-mode的资料吗 :slightly_smiling_face:

没有什么特别的资料,不过,有一些例子,比如之光的:

我认为,我所写的那个顺序其实是由简到难的(当然,也不是说,mode-line 就不能就不能写的很复杂(比如 doom-modeline 那些.

你刚发明的新技术我已用上 另开了一贴 给那些没有弹出文档功能的company补全后端把这个功能给加上去