Emacs で、org-shifttab の代わりに shift-tab が yas-expand を実行するように、org-mode キーマップを変更するにはどうすればよいですか? さらに良いことに、ポイントがスニペットトリガーの前にある場合にのみ shift-tab が yas-expand を実行し、それ以外の場合は org-shifttab を実行するようにするにはどうすればよいですか?
また、org-mode wiki でこのエントリを見ました。最初のオプションは機能しませんでした.2番目のオプションは、backtab
同等のものを見つけることができなかったため、機能しませんでしたorg-tab-first-hook
Org モードがキーをバインドする方法 ("\t" ではなく [tab] にバインドする) は、このキーへの 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 の最新バージョンは Org モードでうまく動作しません。上記のコードで競合が解決しない場合は、次の関数を定義することから始めます。
(defun yas/org-very-safe-expand () (let ((yas/fallback-behavior 'return-nil)) (yas/expand)))
次に、Org モードに新しい関数をどうするかを指示します。
(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)))