有没有办法在emacs组织模式下隐藏除最后一个标题星号以外的所有标题?

有没有办法在emacs组织模式下隐藏除最后一个标题星号以外的所有标题?,emacs,org-mode,Emacs,Org Mode,我非常喜欢org和org项目符号,我想完全隐藏标题的前导星号,以便标题(及其漂亮的图标/项目符号)与窗口左侧齐平 我在一个Reddit线程中发现了这个函数,它似乎基本上实现了我想要的功能,只是它删除了所有的星号。我想保留最后一个 (defun me-org-mode-remove-stars () (font-lock-add-keywords nil '(("^\\*+ " (0 (prog1 nil (put-t

我非常喜欢org和org项目符号,我想完全隐藏标题的前导星号,以便标题(及其漂亮的图标/项目符号)与窗口左侧齐平

我在一个Reddit线程中发现了这个函数,它似乎基本上实现了我想要的功能,只是它删除了所有的星号。我想保留最后一个

(defun me-org-mode-remove-stars ()
  (font-lock-add-keywords
   nil
   '(("^\\*+ "
      (0
       (prog1 nil
         (put-text-property (match-beginning 0) (match-end 0)
                            'invisible t)))))))

(add-hook 'org-mode-hook #'me-org-mode-remove-stars)
一般来说,对于emacs和lisp来说比较陌生,我的第一个想法是只修改正则表达式,但事实证明这里没有前瞻性,所以我很难表达“选择序列中的所有星号,除了星号后跟空格字符”或类似的内容


有正确的方法吗?

您可以将变量
org hide leading stars
设置为
t
,然后它将隐藏标题中的所有前导星。您甚至可以使用组织模式指令为特定文件启用或禁用该功能。有关更多详细信息,请参阅内置文档(
C-h v org hide leading stars
)。(我个人使用)


还有另一种方法-通过,但我没有尝试过。

您可以尝试在搜索表达式中使用组(例如“^\\(\\*\)\\*”然后对匹配函数使用参数1?未测试。在第一个星号后应该有一个+或者可能是一个*。这样一来,顶级标题得到了它们的子弹,但子标题仍然没有。谢谢!如果我们能告诉你为什么子标题不起作用,也许可以展示你试图看到的东西。这实际上隐藏了主星,但是保持缩进的视觉效果(星星仍然在那里)。我的原始帖子中的函数可以直观地删除它们,这给了我:我的目标是实现上面的图像,但每个标题都有一个可见的项目符号。对不起,我当时误解了这个问题-标题读起来不同