我已经使用 python-mode 很长时间了。而且我总是使用子词模式。但是 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
行为不同?