ตัวอย่างเช่นฉันมีโหมดองค์กรที่มีดังต่อไปนี้
#+BEGIN_SRC emacs-lisp
#+END_SRC
เป็นไปได้หรือไม่ที่จะกำหนดค่า yasnippets ในลักษณะนี้เพื่อให้ตัวอย่างโค้ด emacs-lisp-mode สามารถขยายได้ภายในบล็อกนั้น แต่ไม่ใช่ภายนอก?
ตัวอย่างเช่นฉันมีโหมดองค์กรที่มีดังต่อไปนี้
#+BEGIN_SRC emacs-lisp
#+END_SRC
เป็นไปได้หรือไม่ที่จะกำหนดค่า yasnippets ในลักษณะนี้เพื่อให้ตัวอย่างโค้ด emacs-lisp-mode สามารถขยายได้ภายในบล็อกนั้น แต่ไม่ใช่ภายนอก?
คำตอบ:
ในฐานะของ 2017, 22 มกราคมถ้าคุณตั้งค่าorg-src-tab-acts-natively
และorg-src-fontify-natively
จากนั้นแท็บในบล็อกแหล่งที่จะขยายตัวอย่างของภาษาบล็อกของ คุณอาจต้องการตั้งค่าyas-buffer-local-condition
ให้หยุดเกร็ดเล็กเกร็ดโหมดองค์กรจากการแรเงาตัวอย่างของโหมดบล็อก:
(defun my-org-mode-hook ()
(setq-local yas-buffer-local-condition
'(not (org-in-src-block-p t))))
(add-hook 'org-mode-hook #'my-org-mode-hook)
ดูเพิ่มเติมที่https://github.com/joaotavora/yasnippet/issues/761 , https://github.com/joaotavora/yasnippet/pull/760
ฉันใช้สองวิธีนี้ ฉันมีตัวอย่างองค์กรเพื่อช่วยฉันสร้างส่วนหัวของบาเบล ตัวอย่างเช่นอันนี้สร้างส่วนหัว C ++ - 14 สำหรับ Babel ฉันพิมพ์<s C++_
และขยาย:
# -*- mode: snippet -*-
# name: c++_header
# key: C++_
# --
C++ :main no :flags -std=c++14 -Wall --pedantic -Werror :results output :exports both
#include <iostream>
int main()
{
$0
return 0;
}
จากนั้นฉันใช้ Cc 'ซึ่งเปลี่ยนเป็นโหมดภาษาเฉพาะและใช้ตัวอย่างข้อมูลสำหรับภาษานั้น จากนั้นใช้ Cc 'เพื่อกลับไปที่ไฟล์ org มันใช้งานได้ดี
เมื่อตอบ npostavs แล้วตัวอย่างจะถูกขยายแตกต่างกันขึ้นอยู่กับภาษาภายในหนึ่งไฟล์โหมด org
เพียงพิมพ์ "co" และ [tab] ภายใน Python หรือ Emacs Lisp code block
#+BEGIN_SRC python :session *Python* :results output
co[tab]
# comment
#+END_SRC
#+BEGIN_SRC emacs-lisp :results value scalar
co[tab]
; comment
#+END_SRC
C-c '
- ในกรณีนี้โหมดหลักของ emacs-lisp จะมีตัวอย่าง yasnippet ที่เหมาะสมโหลดขึ้นมาในขณะที่แก้ไขบล็อกในหน้าต่างแยกต่างหาก (ซึ่งดูแลการเยื้องที่ถูกต้อง ฯลฯ )