Emacs 为什么在python模式下反向搜索会给出不同的结果?
我已经使用python模式很长时间了。我总是使用子词模式。但是子词模式在python模式下表现得很奇怪。例如,Emacs 为什么在python模式下反向搜索会给出不同的结果?,emacs,elisp,Emacs,Elisp,我已经使用python模式很长时间了。我总是使用子词模式。但是子词模式在python模式下表现得很奇怪。例如,M-b移动。如果有一个名为test\u varialbe的变量,我将光标放在这个变量的末尾,在python模式下M-b将使光标指向t,而在其他模式下它将转到v 因此,我研究了子词模式的来源,发现了以下函数: (defun subword-backward-internal () (if (save-excursion (let ((case-fold-search n
M-b
移动。如果有一个名为test\u varialbe
的变量,我将光标放在这个变量的末尾,在python模式下M-b
将使光标指向t
,而在其他模式下它将转到v
因此,我研究了子词模式的来源,发现了以下函数:
(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)))
(定义子字向后内部()
(如果(保存远足)
(let((箱子折叠搜索零))
(向后搜索)
(康卡特)
“\\(\\\(\\W\\\\[:下:[:数字:]\\)\\([:上:]+\\W*\)”
“\\\\\W\\W+\\)”)
零(t)))
(转到char)
(续)
((和)(比赛结束3)
(<1(-(比赛结束3)(比赛开始3)))
(不是(相等(点)(比赛结束3)))
(1-(比赛结束3)))
(t
(1+(匹配从0开始(())))
(倒转词1)
在做了一些测试之后,我发现反向搜索
在不同的模式下给出了不同的结果。如果在python模式下我eval expression
(let…表达式),光标将跳转到test\u varialbe
之前的空格,在其他模式下它将跳转到-
为什么会这样?是什么导致
反向搜索
的行为不同?原因是“\u”的语法表定义存在差异
在Python模式中,“\ux”的语法定义为“word”,而在其他情况下,它的定义为“symbol”。此外,请查看:
掌握标识符后,诸如“forward word”之类的基本命令在单词语法上使用“u”更有意义。AFAIK Emacs不提供带有符号的相应命令WRT 事实上,Emacs维护人员的官方观点是,主要模式的这种行为是一个缺陷(只有实际的字母需要有“单词”语法,其他可以作为标识符一部分的标点符号应该有“符号”语法)。