为特定Emacs模式设置自定义键绑定
虽然我知道如何在Emacs中设置全局键绑定,但我发现很难用谷歌搜索出本地(次要模式特定)键绑定的代码。例如,我的为特定Emacs模式设置自定义键绑定,emacs,key-bindings,Emacs,Key Bindings,虽然我知道如何在Emacs中设置全局键绑定,但我发现很难用谷歌搜索出本地(次要模式特定)键绑定的代码。例如,我的.emacs中有此代码: ;; PDFLaTeX from AucTeX (global-set-key (kbd "C-c M-p") (lambda () (interactive) (shell-command (concat "pdflatex " buffer-file-name)))) 我不想将其设置为全局。是否有类
.emacs
中有此代码:
;; PDFLaTeX from AucTeX
(global-set-key (kbd "C-c M-p")
(lambda ()
(interactive)
(shell-command (concat "pdflatex " buffer-file-name))))
我不想将其设置为全局。是否有类似于
本地设置键
的功能?您需要识别该模式的键映射(例如,LaTeX模式映射
),并使用功能定义键
。例如,除了在LaTeX模式中激活大纲次要模式
,我还有:
(define-key LaTeX-mode-map [(tab)] 'outline-cycle))
在这种情况下,主模式(LaTeX)保留键绑定,但也有一个
大纲次要模式映射
要在模式中绑定键,您需要等待加载模式,然后再定义键。您可以需要该模式,或使用加载后评估
(eval-after-load 'latex
'(define-key LaTeX-mode-map [(tab)] 'outline-cycle))
不要忘记”
-加载后评估不是宏,因此它需要它们。我使用以下方法:
(add-hook 'LaTeX-mode-hook
(lambda () (local-set-key (kbd "C-0") #'run-latexmk)))
仅为LaTeX模式定义绑定。其他答案都不能满足我的需要。所以这可能会帮助其他人。我希望选项卡
跳到行的开头,如果我处于邪恶的正常模式(基本上:这意味着在Emacs中无处不在),但是我希望它在组织模式文档中的组织项目状态之间循环
一种选择是在我切换缓冲区时,使用单独的绑定和不断的绑定重新绑定(因为在正常状态下,邪恶只允许每个键有一个绑定)
但是一个更有效的选择是让Tab
运行我自己的代码,该代码根据当前缓冲区使用的主要模式运行所需的函数。因此,如果我在组织缓冲区中,此代码将运行org cycle
,否则它将运行evil first non blank
(转到行中的第一个非空白字符)
我在这里使用的技术也可以通过global set key
调用您的自定义函数来代替,用于使用常规非邪恶emac的用户
对于那些不懂Emacs lisp的人来说,“if”语句后面的第一行是true操作,后面的一行是false操作。因此,如果主要模式
等于组织模式
,我们运行组织周期
,否则我们在所有其他模式下运行邪恶第一非空
:
(取消我的/选项卡跳转或组织周期()
在所有模式下跳转到行的开头,组织模式除外,组织模式循环
(互动)
(如果(等于专业模式“组织模式”)
(组织周期)
(第一个非空)
)
(定义键正常状态映射(kbd“”)“我的/选项卡跳转或组织周期”)
如何以编程方式确定加载后eval的第一个参数?我认为提供属于该模式的任何函数就足够了,例如'LaTeX-mode
而不是'LaTeX
也可以。对我来说,该变量称为LaTeX mode map(全小写)。LaTeX模式映射不存在。[(tab)]
是(kbd“tab”)
@LenarHoyt的旧语法:实际上,否:[(tab)]
与[tab]
相同,这是在Emacs的GUI版本中点击选项卡时发送的键序列(kbd“TAB”)
oth与[?\t]
相同,这是在文本终端中点击相同的选项卡时发送的键序列(也是点击C-i
时发送的键序列)。这两个选项在Emacs内部通过功能键映射“统一”,如果没有绑定到[tab]
,则该映射将[tab]
重新映射到(kbd“tab”)
。因此,如果希望绑定在GUI和tty中都能工作,最好使用(kbd“TAB”)
。#
对我来说是多余的。我必须设置“latex-mode-hook
(无上限)。我还发现
是不必要的。我越来越多地去Emacs Wiki寻求帮助:在那里,它显示您可以向模式键映射添加键绑定,并显示如何找到该映射。是的。。。我已经看到了那个,但我一直得到符号的值,因为变量是void:LaTeX mode map
。六羟甲基三聚氰胺六甲醚。。。