Emacs 组织模式和Yasnippet与<;backtab>;

Emacs 组织模式和Yasnippet与<;backtab>;,emacs,org-mode,yasnippet,Emacs,Org Mode,Yasnippet,在Emacs中,如何修改组织模式键映射,使shift tab运行yas expand而不是org shifttab?更好的是,如何使shift选项卡仅在点位于代码段触发器前面时运行yas expand,否则运行org shifttab 另外,我在组织模式wiki中看到了这个条目。第一个选项不起作用,第二个选项也不起作用,因为我找不到与org-tab-first-hook等价的backtab 组织模式绑定键的方式(绑定到[tab]而不是 “\t”)拒绝YASnippet访问此密钥。下面的代码 已修

在Emacs中,如何修改组织模式键映射,使shift tab运行yas expand而不是org shifttab?更好的是,如何使shift选项卡仅在点位于代码段触发器前面时运行yas expand,否则运行org shifttab

另外,我在组织模式wiki中看到了这个条目。第一个选项不起作用,第二个选项也不起作用,因为我找不到与
org-tab-first-hook等价的
backtab

组织模式绑定键的方式(绑定到[tab]而不是 “\t”)拒绝YASnippet访问此密钥。下面的代码 已修复此问题:

(add-hook 'org-mode-hook
          (lambda ()
            (org-set-local 'yas/trigger-key [tab])
            (define-key yas/keymap [tab] 'yas/next-field-or-maybe-expand)))
yasnippet的最新版本不能很好地使用组织模式。如果 上面的代码没有修复冲突,请从定义 以下功能:

      (defun yas/org-very-safe-expand ()
        (let ((yas/fallback-behavior 'return-nil)) (yas/expand)))
      (add-hook 'org-mode-hook
                (lambda ()
                  (make-variable-buffer-local 'yas/trigger-key)
                  (setq yas/trigger-key [tab])
                  (add-to-list 'org-tab-first-hook 'yas/org-very-safe-expand)
                  (define-key yas/keymap [tab] 'yas/next-field)))
然后,告诉组织模式如何处理新功能:

      (defun yas/org-very-safe-expand ()
        (let ((yas/fallback-behavior 'return-nil)) (yas/expand)))
      (add-hook 'org-mode-hook
                (lambda ()
                  (make-variable-buffer-local 'yas/trigger-key)
                  (setq yas/trigger-key [tab])
                  (add-to-list 'org-tab-first-hook 'yas/org-very-safe-expand)
                  (define-key yas/keymap [tab] 'yas/next-field)))

没有回答您的问题,但我已经通过使用SPC进行YASnippet操作(如在TextMate中,BTW IIRC)解决了选项卡问题。如果您感兴趣,可以查看我在GitHub()上的配置。理想情况下,我可以保留backtab作为触发键。。禁用组织模式映射绑定的最简单方法是将该映射的同一个键定义为
nil
——例如,
(define key-org-mode-map[(shift-tab)]nil)
,这里有一个链接,指向一个示例,我将各种映射设置为
nil