Org-mode 中文行内格式化的问题

非常实用,赞啊! :+1:

我有个简单的建议,既然zero width space可以用来解决这个问题,为什么不简单的绑定一个输入zero width space的快捷键,然后写orgmode的时候,插入就行了?比如,插入~的时候,直接插入zero width space ~?

像上面那样想办法自动插入不是更省心么

(defun my/insert-zero-width-space ()

(interactive)

(insert-char ?\u200B)) ;; code for ZERO WIDTH SPACE

(global-set-key (kbd “C-x 8 s”) ‘my/insert-zero-width-space)

网上找的:Emacs Org-mode Styling, Non-smart Quotes, Zero-width-space, and TeX Input Method | Sean Miller: The Wandering Coder

加空格也很难受。bibtex条目经常是 史永东2021中债估值识别了债券信用风险吗 这种,加了空格就出bug

我的思路是编辑 org 时,一换行就自动进行 search regexp 然后插入分隔符(中英用空格,中中用零宽空格),据此写了个小函数 ingtshan/separate-inline.el: Separating words automatically with given regexp screencapture

1 个赞

这个自动化,牛!

:smile: 谢谢,经过一天的使用,发现依赖回车有时候也不方便,于是加入了新的触发行为,光标离开行的时候。

这么好用的包,咋不考虑进 melpa

这个看起来真好,请问是不是在evil下不能用?我在doom evil模式安装使用,有separate-inline-mode的情况下,不起作用。

我也是在 evil 下用的,没什么问题呢

怎么使得路径中有中文时不生效呢?

看到你提的 issues 了,谢谢

我之前 github 邮件通知没设置好,现在才看到,抱歉 :cold_sweat:

不可以的,category 不能出现在 character alternative 里。因为在 []\ 被当作普通字符。

我也觉得目前状态添加零宽空格可能是最好的解决方案,但是我害怕看不见的空格会弄坏格式,比如删除的时候没有正确全部删除,导致零宽空格出现在各种不应该放的地方。

虽然可以用whitespace mode等方法让它显示出来,但是这样看起来排版跟手动加空格一样乱了。 并不能实现很好的显示效果,例如像emeditor上这样: image

所以我写了一个函数来删除这些意外出现的不必要的零宽空格

(defun my/remove-zero-width-space ()
  (interactive)
  (save-excursion
    (save-restriction
      (widen)
      (goto-char (point-min))
      (while (re-search-forward "[^=\\|*\\|+\\|~\\|/\\|_]\\(\u200b\\)[^=\\|*\\|+\\|~\\|/\\|_]" nil t)
        (replace-match "" t t nil 1)
        )
      )
    )
  )
(add-hook 'before-save-hook 'my/remove-zero-width-space)

这种方法可能不是很完美,但是我用着很好。

现在有个问题在于从emacs复制文本的时候貌似没有很好的方法去除这个零宽空格,不过无伤大雅了。

这篇文章里提到了这个包 org-extra-emphasis,可以在导出时去除零宽空格. 同时 org-extra-emphasis-zws-display-char 也可以控制零宽空格在 org-mode buffer 里的显示样式.

1 个赞

此贴可以终结了!

如果是doom emacs可能需要修改evil-embrace:

(add-hook 'org-mode-hook 'embrace-org-mode-hook)
(add-hook! org-mode-hook
      (dolist (item '((?\* . ("\x200B*" . "*\x200B"))
                      (?\+ . ("\x200B+" . "+\x200B"))
                      (?\/ . ("\x200B/" . "/\x200B"))
                      (?\~ . ("\x200B~" . "~\x200B"))
                      (?\= . ("\x200B=" . "=\x200B"))
                      (?\$ . ("\x200B$" . "$\x200B"))
                      (?\_ . ("\x200B_" . "_\x200B"))
                      (?\! . ("\x200B!!" . "!!\x200B"))
                      (?\@ . ("\x200B!@" . "!@\x200B"))))
        (embrace-add-pair (car item) (cadr item) (cddr item))))```
1 个赞