无法在emacs中重新绑定C-M-q

时间:2017-04-14 21:08:55

标签: emacs key-bindings

我试图设置一些自定义绑定并遇到一个令人费解的问题,我无法重新绑定C-M-q或完全取消绑定。我没有麻烦重新绑定其他键,所以我不知道C-M-q的特殊之处。以下是我在.emacs文件中尝试过的一些内容。

model = QStandardItemModel()
parent_item = model.invisibleRootItem()  # type: QStandardItem
for row in [
    (Qt.Unchecked, 'unchecked'),
    (Qt.PartiallyChecked, 'partially'),
    (Qt.Checked, 'checked')
]:
    checked, text = row
    check_item = QStandardItem('')
    check_item.setCheckable(True)
    check_item.setCheckState(checked)
    parent_item.appendRow([check_item, QStandardItem(text)])
treeview.setModel(model)

无论我尝试什么,C-h k命令说C-M-q都绑定到

  

C-M-q运行命令indent-pp-sexp,这是一个交互式的   在`lisp-mode.el'。

中编译了Lisp函数      

它与C-M-q绑定。

1 个答案:

答案 0 :(得分:1)

全局键映射是优先级最低的键映射,而此绑定位于您正在查看的缓冲区的本地(主模式)键映射中(这是一个lisp缓冲区),所以Emacs永远不会看到你的全局键映射发生变化,因为它在到达那么远之前就找到了一个绑定。

具体来说,此绑定位于lisp-mode-shared-map(几种lisp模式的父键映射)中,它隐藏了prog-mode-map中更通用的绑定。其他编程模式对此键有自己的绑定,以确保它始终具有某种"缩进表达式"行为。

因此,我会建议你不要破坏这种绑定,因为它有标准用途。如果您确实想要这样做,那么您应该查看Globally override key binding in Emacs

Emacs有很多层的键盘映射,了解系统的工作原理非常重要,因此我强烈建议您花时间阅读以下有关该主题的文章:

https://www.masteringemacs.org/article/mastering-key-bindings-emacs