如何让 Emacs 识别一组圆括号/中括号后面的句子?

问题描述 投票:0回答:1

我正在尝试使用 Emacs 的

sentence-end
功能来浏览带有引文(以及句子之间的双空格)的文件,并且在尝试让 Emacs 识别一段时间后带有方括号/圆括号的句子时遇到了一些麻烦。例如:

Some text.  "Some quote."  (Something in parentheses.)  Something with a citation.[cite]  Some more text.

使用 Emacs 内置的

forward-sentence
backward-sentence
可以很好地处理上例中的第一个、第二个和第三个双空格断句,但无法识别第四个断句。

有趣的是,当一组括号就位时,强制执行

(setq sentence-end-without-period t)
似乎也会忽略双空格。在下面的示例中,Emacs 可以在句子一、二和三之间进行划分,但它会组合句子四和五:

Sentence one  Sentence two.  Sentence three  Sentence four.[cite]  Sentence five.

有没有办法让 Emacs 通过所有双倍行距实例来划分句子,至少在圆括号/方括号之后?谢谢!

emacs navigation whitespace elisp sentence
1个回答
0
投票

用户选项的文档字符串

sentence-end-base
说,它是一个设置为a的变量

正则表达式匹配句子的基本结尾,不包括后面的空格。

目前默认的正则表达式是

[.?!…‽][]\"'”’)}»›]*
。它 转换为 匹配
.?!…‽
之一,包括后跟任意数量的
]\"')}

因此,它应该识别您提供的测试片段中的句子,条件是右括号/括号之前有一个句点。

[我同意,我们可能会期望没有句号的句子被识别为具有

sentence-end-without-period
功能;这需要更多地了解函数
sentence-end
如何准确地利用这两个变量。看起来它仅适用于不涉及括号/括号的情况。这可能是 Emacs 行为中的一个错误,或者更可能是文档没有很好地解释它,所以
M-x report-emacs-bug
也许。]

如果默认行为不满足您的需求,调整

sentence-end-base
的值可能是一个解决方案。例如,将任何右括号(空格之前)视为带有

的结束句子的标记
(setq sentence-end-base "[.?!…‽][]\"'”’)}»›]*\\|]")

[下图使用了稍微不同的正则表达式语法。所有插图都与我在 Emacs 中的行为相符。]

© www.soinside.com 2019 - 2024. All rights reserved.