Org evil 配置 tab 在不同位置完成不同功能

我的elisp刚刚入门,之前一直在使用doom emacs,后来用自己写的一个简单的配置。

最近在org-mode中,发现doom emacs有的一个特性而我自己的配置没有,这个需求我不知道如何实现:

  1. 在evil normal模式时tab作为org-cycle
  2. 在evil insert模式下:
    1. 在每个标题处tab降级标题,Shift+tab升级标题
    2. 在内容处tab插入一个制表符

目前我参考的实现是:

(evil-declare-key 'normal org-mode-map
  (kbd "TAB") 'org-cycle)

(evil-declare-key 'insert org-mode-map
  (kbd "TAB") 'org-do-demote
  (kbd "<backtab>") 'org-do-promote)

但是这样做不能识别org的标题和内容,如果在内容处按tab会直接把整段都降级。我尝试看了下doom emacs的实现办法,但是代码太多了根本看不懂。

有没有什么解决办法?

直接使用 evil org这个包就可以解决很多类似的问题,以前我也尝试自己写,后面发现都在重复造轮子,就直接用 evil org这个包了

evil org 这个包我在用,但是它只能用M-h M-l去调整,TAB只能展开和隐藏各个标题,不能调整标题等级。

我不确定,但是 tab 和TAB有的时候不一样