取消yasnippet的'Tab'绑定?

7

yasnippet的Tab快捷键常常会覆盖其他有用的按键。

是否有办法禁用yasnippet的Tab绑定以启用其他Tab用途?

4个回答

10

以下代码将移除 yasnippet 的快捷键绑定:

(define-key yas-minor-mode-map [(tab)] nil)
(define-key yas-minor-mode-map (kbd "TAB") nil)

应该可以工作。或者你可以将 tab 绑定到另一个命令。

关于在OSX上运行的Yasnippet版本0.8.0,yas-expandyasnippet.elyasnippet.elc中被定义为read-kbd-macro,它使用每个单独片段中定义的键盘绑定。如果特定模式文件夹中的一个或多个片段使用制表符(例如C-I),那么将禁用常规制表键。在.emacs中放置的经典取消设置或定义键设置将无效。因此,需要修改每个片段以删除C-I并替换为其他内容--例如# binding: M-/ - lawlist
2
它实际上不起作用,我也尝试了(setq yas/trigger-key nil),但也不起作用,我只想禁用yasnippet的TAB键,为什么这么难? - shelper

9

我来晚了,但在这个问题的接受答案中找到了一个...却没有起作用。

尝试了一些实验,最终找到了解决方案。认为我应该贡献一个确实可以工作的答案:

;; 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)

我怀疑激活yasnippet并不是至关重要的。但是,在您可以操作其键映射之前,必须先加载该库。eval-after-load提供了一种在不立即加载库的情况下指定这些配置的方法。 - phils

4

使用 use-package

(use-package yasnippet
  :demand t
  :bind (:map yas-minor-mode-map
         ("TAB" . nil)
         ("<tab>" . nil))
  :config
  (yas-global-mode))

-1
(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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接