我正在尝试我对Emacs的第一次修改。我录制了一个小键盘宏,并让Emacs将其输出为elisp,结果是:
(setq add-docstring
"\C-rdef\C-n\C-a\C-m\C-p\C-i\C-u6\"\C-u3\C-b")
(global-set-key "\C-c\C-d" 'add-docstring)
但是,搜索Emacs引用时发现C-C-d已经在diff模式下绑定。我不打算使用diff模式,但未来是不可知的,我不想给自己设下陷阱。所以我希望这个keybinding只在python模式下运行,它试图帮助我添加docstring。在
在我的/usr/share/emacs/23.whatever/list/progmodes
中,我找到了python.elc
和{python.el.gz
,得到了一个可读的elisp文件版本。不过,现在文档对我来说变得不透明了。在
如何将密钥绑定添加到python模式,而不是全局?在
有没有可能在不重新启动emacs或关闭打开的文件的情况下,将这些更改应用到python模式,以获得额外的积分?这是一个自我修改的编辑器,我想很有可能。在
首先,不要乱来Python. 您要做的是为python模式创建自己的自定义绑定。这通常在主目录中的
.emacs
文件中完成。在在该文件中添加如下内容(我还没有测试过,所以语法可能有一些错误,我自己也没有使用python)
这是使用钩子机制。它是每次调用python模式时调用的函数。此函数只将
C-c C-d
绑定到add-doc-string
函数。在这个答案非常简短。阅读emacs文档中的.emacs文件、定制和钩子。在
结果是,C-C C-d已经绑定到
python-mode
(到'python-pdbtrack-toggle-stack-tracking
),所以您可能需要重新考虑您选择的密钥绑定。在注意:如果您只想剪切/粘贴解决方案,请跳到答案的末尾。请继续阅读,了解如何到达目的地的解释,以防你想再次这样做。在
宏是一个很好的开始,但你已经做的不太管用。要获取可以绑定到键的内容,请尝试对该宏执行M-x insert kbd macro,您将得到:
(嗯。。。。不可打印字符,我不能剪切/粘贴成这样,但你可以自己做得到正确的东西)。轻轻咀嚼一下,你得到的就相当于:
^{pr2}$这是第一步。通过上面的方法,您可以执行
M-x add-docstring
并获得所需的行为。在下一步是您所要求的-如何在本地绑定到键。您感兴趣的keybindings begins here文档是Local Keymaps section,它导致以下内容:
这将设置一个匿名函数,当
python-mode
打开时将被调用,该函数只做一件事-它为python模式在keymap中设置所需的密钥绑定。在如果仔细阅读Keymaps section,就会发现Emacs遵循的约定是只有用户才应该将commad绑定到C-ca,其中a是任何小写或大写字母(例如,C-C dC-C TC-C p,包将模式特定的绑定约束到C-C%,其中%是任何标点符号或控制键(例如C-C C-CC-C[C-C C-z)。在
因此,如果您将绑定更改为C-cd,那么您几乎可以保证不会与任何包发生冲突。Emacs附带的
python.el
确实遵循这些约定,大多数(all?)也是如此Emacs附带的软件包。在您会注意到,我使用^{} 读取键序列。它是便携的,我发现它更容易阅读。在
你可以做更多的事情来清理这个问题:
以下是我要为#1做的,它为您提供了一个方便的地方来放置其他定制:
使用命名函数会更干净一点,因为如果您愿意,可以稍后执行
(remove-hook 'python-mode-hook 'my-python-customizations)
。另外,如果您查看hook的值(C-hv python mode hook RET),很明显会调用什么(匿名函数更长,更难读取)。在对于加分,将代码粘贴到
.emacs
doM-x eval区域之后,这将告诉Emacs在该区域中计算代码。要查看现有python缓冲区中的更改,只需打开一个新的python文件/缓冲区,这将触发keybinding更改,这是所有python缓冲区都通用的。在快乐黑客。在
相关问题 更多 >
编程相关推荐