我正在使用 Aquamacs。它可以区分<tab>
(实际的 Tab 键)和TAB
(来自键入 )C-i
。我想永久绑定C-i
到'next-line
。这适用于:
(global-set-key (kbd "TAB") 'next-line)
但是模式映射会用自动完成行为或其他方式覆盖 TAB,这样我就失去了下一行功能。我可以将绑定放在 overriding-terminal-local-map 中,但我更希望模式映射重新映射,<tab>
这样我仍然可以使用该模式分配给 tab 的功能。
我可以为使用的每种模式手动重新绑定 Tab,但我希望有一种简单的方法可以将所有TAB
映射重定向到 Tab 键而不会弄乱C-i
。
答案1
这有点棘手,但有可能。针对这种情况,我的做法是创建一个次要模式,即gvol-mode
,然后在其中绑定C-i到previous-line
(或任何你想要的)。然后我绑定<tab>到下面的函数。
(defun gvol-indent-for-tab-command ()
"This is to fix `indent-for-tab-command' for `gvol-mode'.
It runs [tab] or C-i with `gvol-mode' nil because `gvol-mode'
binds C-i to a different command. Ideally this should take into
account window system so that it can DTRT in a terminal (whatever
the right thing is)."
(interactive)
(let* ((gvol-mode nil)
(command (or (key-binding [tab])
(key-binding "\C-i"))))
;; This is to satisfy `python-indent-line' which checks
;; `this-command' to cycle
(setq this-command 'indent-for-tab-command)
;; Make people think this was called with C-i. This allows
;; `self-insert-command' to work
(setq last-command-event 9)
(call-interactively command)))
稍微解释一下,我让 绑定gvol-mode
到 ,nil
这样当我进行键查找时,我的次要模式就不会起作用。因此,如果次要模式未打开,它将找到<tab>或C-i的绑定。然后,为了让某些功能正常工作,我必须设置this-command
为indent-for-tab-command
。我还让它看起来像是我输入的,这允许它与IIRCC-i一起工作。yasnippet-mode