私は長い間 python-mode を使用してきました。そして、私は常にサブワードモードを使用しています。しかし、subword-mode は python-mode で奇妙な動作をします。例えば、M-b
動き。という名前の変数がありtest_varialbe
、この変数の最後にカーソルを置くと、python-modeM-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-mode で式を入力すると、カーソルは の前のスペースにジャンプしeval-expression
、他のモードでは にジャンプします。(let ...)
test_varialbe
-
どうしてこれなの?re-search-backward
行動が異なる原因は何ですか?