4

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

0 に答える 0