gpt4 book ai didi

emacs - 为什么 re-search-backward 在 python 模式下会给出不同的结果?

转载 作者:行者123 更新时间:2023-12-01 12:49:49 25 4
gpt4 key购买 nike

我已经使用 python 模式很长时间了。我总是使用子词模式。但是 subword-mode 在 python-mode 中表现得很奇怪。例如,M-b 运动。如果有一个名为 test_varialbe 的变量,我将光标放在这个变量的末尾,在 python 模式下 M-b 将使光标指向 t 而在其他模式下它将转到 v

于是我查看了subword-mode的源码,发现了如下函数:

(defun subword-backward-internal ()
(if (save-excursion
(let ((case-fold-search nil))
(re-search-backward
(concat
"\\(\\(\\W\\|[[:lower:][:digit:]]\\)\\([[:upper:]]+\\W*\\)"
"\\|\\W\\w+\\)")
nil t)))
(goto-char
(cond
((and (match-end 3)
(< 1 (- (match-end 3) (match-beginning 3)))
(not (eq (point) (match-end 3))))
(1- (match-end 3)))
(t
(1+ (match-beginning 0)))))
(backward-word 1)))

在做了一些测试之后,我发现 re-search-backward 在不同的模式下给出了不同的结果。如果我在python模式下eval-expression(let ...)表达式,光标会跳到test_varialbe之前的空格,并且在其他模式下,它将跳转到 -

这是为什么?是什么导致 re-search-backward 表现不同?

最佳答案

原因是'_'的Syntax表定义有差异。

在 Python 模式下,'_' 的语法定义为“word”,而在其他情况下,它被定义为“symbol”。看Elisp manual: Syntax tables

关于emacs - 为什么 re-search-backward 在 python 模式下会给出不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13354199/

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