OSX 上的 Emacs 在 python 模式下中断 M-a 和 M-e

Emacs on OSX breaks M-a and M-e in python-mode

我用emacs有一段时间了,一般用在Linux。我目前在 OSX Catalina 上安装了 emacs,M-a 和 M-e 在 python 模式下似乎工作得不是很好。

我将尝试用这段代码进行说明,但如果您遇到了这个问题,我认为不需要太多解释:

L = [1, 2, 3, 4] #a

def double(x): #b
    return x * 2 #c

def fun(x): #d
    return [double(i) for i in x] #e

zz = fun(L) #f

print(zz) #g

如果我从#a 行的开头开始,M-e,我只能到达#b 和#d 行的开头,而不能再往下走。我希望能够到达#c、#e、#f 和#g 的结尾。

使用 M-a 会导致类似的问题。 C-a 和 C-e 按预期工作。

我重新映射了选项和命令,这样它们就更像我在 Linx 世界中习惯使用的东西了。

 ;; make MacOS sane
(setq mac-option-modifier 'control)
(setq mac-command-modifier 'meta)

整个事情很烦人,搜索没有谈到这个,因此没有解决方案。此问题仅在 Python 时出现。我尝试过的其他语言似乎都按预期工作。

M-aM-epython-mode 中按预期工作。

python-mode中,这些键分别绑定到python-nav-backward-blockpython-nav-forward-block。在您的示例中,#a、#f 和#g 行不开始 python 的块,#c 和 #e 行在 python 内块。您可以查看 python-mode 定义为块的内容 here.

可以在 python-nav-forward-statementpython-nav-backward-statement 中找到接近您想要的行为,它们分别移动到下一个或上一个语句的 beginning。默认情况下,这些函数不绑定任何键。