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?
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?
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.
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)
eval-after-load
provides a way to specify these kinds of configurations without having to load the library immediately. –
Yhvh With use-package
:
(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)
© 2022 - 2024 — McMap. All rights reserved.
yas-expand
is defined withinyasnippet.el
andyasnippet.elc
asread-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 theC-I
and replaced with something else -- e.g.,# binding: M-/
– Barimah