Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs 为什么在python模式下反向搜索会给出不同的结果?_Emacs_Elisp - Fatal编程技术网

Emacs 为什么在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

我已经使用python模式很长时间了。我总是使用子词模式。但是子词模式在python模式下表现得很奇怪。例如,
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维护人员的官方观点是,主要模式的这种行为是一个缺陷(只有实际的字母需要有“单词”语法,其他可以作为标识符一部分的标点符号应该有“符号”语法)。