Unset 'Tab' binding for yasnippet?
Asked Answered
S

4

7

The Tab keybinding of yasnippet often overwrites other useful keys.

Is there a way to disable Tab binding of Yasnippet to enable other Tab usage?

Symphysis answered 28/12, 2012 at 8:6 Comment(0)
M
10

These will remove yasnippet's key binding:

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

Should work. Or you can bind tab to another command.

Mordant answered 28/12, 2012 at 8:19 Comment(2)
As to Yasnippet version 0.8.0 running on OSX, yas-expand is defined within yasnippet.el and yasnippet.elc as read-kbd-macro, which uses the keyboard bindings defined within each individual snippet. If there are one or more snippets in the particular mode folder within the snippet directory that uses a tab (e.g., C-I), that will disable the regular tab key. The classic unset or define key settings placed within the .emacs will have no effect. Therefore, each snippet would need to be modified to remove the C-I and replaced with something else -- e.g., # binding: M-/Barimah
it actually doesnot work, i also tried (setq yas/trigger-key nil) also does not work, i jsut want to disable TAB for yasnippet, why it is so difficult?Diandre
Y
9

I'm late for the party but came upon the accepted answer in this question which... didn't work.

Experimented a bit and finally found a solution. Thought I should contribute an answer that does work:

;; 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)
Yancy answered 12/2, 2015 at 20:35 Comment(1)
I suspect it's not crucial that you activate yasnippet. The library would need to be loaded, however, before you can manipulate its keymaps. eval-after-load provides a way to specify these kinds of configurations without having to load the library immediately.Yhvh
C
4

With use-package:

(use-package yasnippet
  :demand t
  :bind (:map yas-minor-mode-map
         ("TAB" . nil)
         ("<tab>" . nil))
  :config
  (yas-global-mode))
Carry answered 20/8, 2017 at 5:19 Comment(0)
A
-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)
Acherman answered 25/3, 2014 at 16:35 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.