เป็นไปได้ไหมที่จะสร้าง yasnippets เพื่อขยายตัวอย่างภายในส่วน babel ในโหมดองค์กรในโหมดที่เหมาะสม?


10

ตัวอย่างเช่นฉันมีโหมดองค์กรที่มีดังต่อไปนี้

#+BEGIN_SRC emacs-lisp


#+END_SRC

เป็นไปได้หรือไม่ที่จะกำหนดค่า yasnippets ในลักษณะนี้เพื่อให้ตัวอย่างโค้ด emacs-lisp-mode สามารถขยายได้ภายในบล็อกนั้น แต่ไม่ใช่ภายนอก?


6
ฉันคิดว่าวิธี "มาตรฐาน" คือการแก้ไขบล็อคเหล่านั้นด้วยC-c '- ในกรณีนี้โหมดหลักของ emacs-lisp จะมีตัวอย่าง yasnippet ที่เหมาะสมโหลดขึ้นมาในขณะที่แก้ไขบล็อกในหน้าต่างแยกต่างหาก (ซึ่งดูแลการเยื้องที่ถูกต้อง ฯลฯ )
VanLaser

ใช่ฉันเห็นด้วยกับการตอบกลับของ VanLaser มันทำงานได้กับทุกภาษาที่รองรับโดย emacs
dmg

โอ้จริง คุณพูดถูก คุณช่วยตอบคำถามนี้ได้ไหมเพื่อที่ฉันจะได้ตอบว่าถูกต้องหรือไม่? ฉันไม่ได้คิดถึงเรื่องนั้น: P
Rafa de Castro

คำตอบ:


7

ในฐานะของ 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


2

ฉันใช้สองวิธีนี้ ฉันมีตัวอย่างองค์กรเพื่อช่วยฉันสร้างส่วนหัวของบาเบล ตัวอย่างเช่นอันนี้สร้างส่วนหัว 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 มันใช้งานได้ดี


0

เมื่อตอบ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.