【发布时间】:2012-12-28 08:06:47
【问题描述】:
yasn-p 的 Tab 键绑定通常会覆盖其他有用的键。
有没有办法禁用 Yasn-p 的 Tab 绑定以启用其他 Tab 用法?
【问题讨论】:
标签: emacs yasnippet emacs-prelude
yasn-p 的 Tab 键绑定通常会覆盖其他有用的键。
有没有办法禁用 Yasn-p 的 Tab 绑定以启用其他 Tab 用法?
【问题讨论】:
标签: emacs yasnippet emacs-prelude
这些将删除 yasn-p 的键绑定:
(define-key yas-minor-mode-map [(tab)] nil)
(define-key yas-minor-mode-map (kbd "TAB") nil)
应该可以。或者您可以将tab 绑定到另一个命令。
【讨论】:
yas-expand 在 yasnippet.el 和 yasnippet.elc 中定义为 read-kbd-macro,它使用每个单独的 sn- 中定义的键盘绑定页。如果在 sn-p 目录中的特定模式文件夹中有一个或多个 sn-ps 使用选项卡(例如,C-I),则将禁用常规选项卡键。放置在.emacs 中的经典取消设置或定义键设置将无效。因此,需要修改每个 sn-p 以删除 C-I 并替换为其他内容 - 例如,# binding: M-/
我参加聚会迟到了,但在这个问题中得到了公认的答案......没有用。
试验了一下,终于找到了解决办法。认为我应该提供一个确实有效的答案:
;; It is crucial you first activate yasnippet's global mode.
(yas/global-mode 1)
;; The following is optional.
(define-key yas-minor-mode-map [backtab] 'yas-expand)
;; Strangely, just redefining one of the variations below won't work.
;; All rebinds seem to be needed.
(define-key yas-minor-mode-map [(tab)] nil)
(define-key yas-minor-mode-map (kbd "TAB") nil)
(define-key yas-minor-mode-map (kbd "<tab>") nil)
【讨论】:
eval-after-load 提供了一种无需立即加载库即可指定此类配置的方法。
(use-package yasnippet
:demand t
:bind (:map yas-minor-mode-map
("TAB" . nil)
("<tab>" . nil))
:config
(yas-global-mode))
【讨论】:
(setq yas-minor-mode-map ;This MUST before (require 'yasnippet)
(let ((map (make-sparse-keymap)))
(define-key map (kbd "M-i") 'yas-expand)
(define-key map "\C-c&\C-n" 'yas-new-snippet)
(define-key map "\C-c&\C-v" 'yas-visit-snippet-file)
map))
(require 'yasnippet)
【讨论】: