gpt4 book ai didi

regex - 在 Emacs 中重新定义 "sentence"? (句子之间有一个空格,但忽略缩写)

转载 作者:行者123 更新时间:2023-12-03 20:57:02 24 4
gpt4 key购买 nike

我希望能够在 Emacs(M-a,M-e)中按句子导航。这就是问题所在:默认情况下,Emacs 期望每个句子由两个空格分隔,而我习惯于只放置一个空格。当然,可以关闭该设置,以允许句子仅由一个空格分隔,如下所示:

(setq sentence-end-double-space nil)   

但是随后 Emacs 认为一个句子在带有句号(“.”)的缩写之后结束,例如在类似“......一个奇怪的命令,例如foo......”之后。

因此,除了使用上面的代码之外,有没有一种方法可以定义句尾变量,以便将 [.!?] 视为标记句子的结尾,如果后面是一个或多个空格,后跟一个大写字母 [ AZ]?

并且...还允许 [.!?] 标记句子的结尾,如果后面跟着零个或多个空格,然后是“\”? [后一种情况的原因是为了编写 LaTeX 代码:一个句子后面跟着一个 LaTeX 命令,如\footnote{},例如"...所以我们可以看到这一点得到了证明。\footnote{至少在另一个世界中。}"]

我试着玩弄句尾的定义,并想出了:

(setq sentence-end "[.!?][]'\")}]*\\(\\$\\|[ ]+[A-Z]\\|[ ]+[A-Z]\\| \\)[
;]*")

但这似乎根本不起作用。

有什么建议么?

最佳答案

我不认为句末会做你需要它做的事情。为此,您确实需要前瞻正则表达式,而 Emacs 不支持它们。

您可以滚动自己的功能来做您需要的事情。我不了解您的所有要求,但以下是一个开始:

(defun my-next-sentence ()
"Move point forward to the next sentence.
Start by moving to the next period, question mark or exclamation.
If this punctuation is followed by one or more whitespace
characters followed by a capital letter, or a '\', stop there. If
not, assume we're at an abbreviation of some sort and move to the
next potential sentence end"
(interactive)
(re-search-forward "[.?!]")
(if (looking-at "[ \n]+[A-Z]\\|\\\\")
nil
(my-next-sentence)))

(defun my-last-sentence ()
(interactive)
(re-search-backward "[.?!][ \n]+[A-Z]\\|\\.\\\\" nil t)
(forward-char))

您的大部分调整都需要关注正在查看的正则表达式,以确保它满足您需要的所有潜在的句末条件。修改它以根据它找到的内容将光标移动到特定位置会相对容易:如果它是一个正常的句子,则保留它,如果您使用的是 latex 命令,则移过下一个 { ,或者任何适合您的东西。

一旦你完成了这项工作,就可以将函数绑定(bind)到 M-a 和 M-e,可能使用模式 Hook ,除非你想在每种模式下都使用它们。

关于regex - 在 Emacs 中重新定义 "sentence"? (句子之间有一个空格,但忽略缩写),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4754547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com