Start with a clean Emacs. #+begin_src shell :results silent rm -rf ~/tmp/yas-test mkdir !$ emacs --quick --init-directory=!$ !$/test.org #+end_src Add Yasnippet. #+begin_src emacs-lisp :results silent (use-package yasnippet :ensure t) #+end_src Use this yasnippet snippet. #+name: snippet1 #+begin_example quote # key: di # name: di # -- ($1) "$0" #+end_example Save snippet in an emacs-lisp-mode group #+begin_src emacs-lisp :var snippet=snippet1 :results silent (make-directory "~/tmp/yas-test/snippets/emacs-lisp-mode" t) (find-file "~/tmp/yas-test/snippets/emacs-lisp-mode/di") (insert snippet) (save-buffer) (kill-buffer) #+end_src Get emacs-lisp snippets to work in org-mode by adding .yas-parents #+begin_src emacs-lisp :results silent (let ((dir "~/tmp/yas-test/snippets/org-mode") (file ".yas-parents")) (make-directory dir) (find-file (expand-file-name file dir)) (insert "emacs-lisp-mode") (save-buffer) (kill-buffer (current-buffer))) #+end_src In a file with `org-mode' active. add the following source block note there is an indent of a space before the #'s #+name: test #+begin_src emacs-lisp 2 di #+end_src GOTCHA: I used this file to run the tests I did an indent-buffer and lost the extra space before the test source block. The expansion works when no indent. Activate Yasnippet in the test org buffer. #+begin_src emacs-lisp :results silent (yas-minor-mode 1) #+end_src Tell yasnippet about the new emacs-lisp-mode snippet and org-mode .yas-parents. #+begin_src emacs-lisp :results silent (yas-reload-all) #+end_src place cursor after *di* in source block above and press TAB #+begin_src text :results code ⛔ Warning (yasnippet): Couldn’t find: "[[:space:] ]*\"[[:space:] ]*\\(\\)[[:space:] ]*\"" #+end_src NOTE: A collection of things had to be in place to generate this. Works when: org source block has no indent i.e. remove space before ' #+' the source block has no property i.e #+name the expansion trigger is the only thing in the source block the expansion trigger is after contents but still on the first line there is only one snippet variable all the snippet variables are on same line the quotes around $0 are removed the parenthesis around $1 are removed It does not work when content is above the yas trigger. i.e. 2 is above the 'di' yas trigger key In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.18.0, Xaw3d scroll bars) of 2024-04-14 built on no-control-x1c Repository revision: 3d3602055264ca3095b7f28ca7e27a6f2782649a Repository branch: master Windowing system distributor 'The X.Org Foundation', version 11.0.12101007 System Description: Ubuntu 23.10 Configured using: 'configure --with-mailutils --with-modules --with-imagemagick --prefix /home/no-control/installs --bindir=/home/no-control/bin --with-native-compilation --with-tree-sitter --with-x-toolkit=lucid' Configured features: CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ IMAGEMAGICK JPEG LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XAW3D XDBE XIM XINPUT2 XPM LUCID ZLIB Important settings: value of $LANG: en_GB.UTF-8 value of $XMODIFIERS: @im=ibus locale-coding-system: utf-8-unix Major mode: Org Minor modes in effect: tooltip-mode: t global-eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t minibuffer-regexp-mode: t line-number-mode: t indent-tabs-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug two-column kmacro help-fns ox-odt rng-loc rng-uri rng-parse rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-latex ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox ert-x ert ewoc warnings edebug debug backtrace color yasnippet pcase yasnippet-autoloads easy-mmode loaddefs-gen lisp-mnt radix-tree tar-mode arc-mode archive-mode cus-edit pp cus-start cus-load mm-archive network-stream url-cache url-http url-auth url-gw nsm finder-inf package url-handlers use-package-ensure use-package-core sh-script smie treesit executable org-element org-persist org-id org-refile avl-tree generator oc-basic cl-extra help-mode ol-eww eww xdg url-queue thingatpt mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-sum shr pixel-fill kinsoku url-file svg dom gnus-group gnus-undo gnus-start gnus-dbus dbus compile comp-run comp-common xml gnus-cloud nnimap nnmail browse-url url url-proxy url-privacy url-expand url-methods url-history url-cookie generate-lisp-file url-domsuf url-util url-parse auth-source cl-seq eieio eieio-core cl-macs json map byte-opt gv bytecomp byte-compile url-vars mail-source utf7 nnoo parse-time gnus-spec gnus-int gnus-range message sendmail mailcap yank-media puny rfc822 mml mml-sec password-cache epa derived epg rfc6068 epg-config mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev gmm-utils mailheader gnus-win gnus nnheader gnus-util text-property-search mail-utils range mm-util mail-prsvr wid-edit ol-docview doc-view filenotify jka-compr image-mode exif dired dired-loaddefs ol-bibtex bibtex iso8601 ol-bbdb ol-w3m ol-doi org-link-doi org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-src ob-comint org-pcomplete pcomplete comint ansi-osc ansi-color ring org-list org-footnote org-faces org-entities time-date subr-x noutline outline icons org-version ob-emacs-lisp ob-core ob-eval org-cycle org-table ol rx org-fold org-fold-core org-keys oc org-loaddefs find-func cal-menu calendar cal-loaddefs org-compat org-macs format-spec cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd touch-screen tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo x-toolkit xinput2 x multi-tty move-toolbar make-network-process native-compile emacs) Memory information: ((conses 16 591095 113255) (symbols 48 30094 4) (strings 32 173018 6038) (string-bytes 1 5053704) (vectors 16 91376) (vector-slots 8 1601641 57977) (floats 8 878 363) (intervals 56 3503 146) (buffers 992 21))