วิธีการตั้งค่าทางลัดสำหรับ # + BEGIN_SRC # + END_SRC


14

ฉันอ่านคู่มือโหมด org แต่ไม่พบทางลัดในการแทรก:

#+BEGIN_SRC 
#+END_SRC

ฉันเดาว่าฉันต้องสร้างการกำหนดค่าใน ~ / .emacs เพื่อตั้งค่าทางลัดหรือไม่ หรือมีทางลัด แต่ฉันไม่รู้

ฉันใช้ R มากใน emacs มีวิธีสร้างทางลัดแยกต่างหากเพื่อสร้างสิ่งนี้หรือไม่?

#+BEGIN_SRC R
#+END_SRC

คำตอบ:


22

องค์กรโหมดมีกลไกในตัวสำหรับการแทรกบล็อกแหล่งที่มา ดูEasy Templatesในคู่มือองค์กร กำหนดค่าเริ่มต้นให้แม่แบบสำหรับจำนวนของ # + Blocks, ‘org-structure-template-alist’และคุณสามารถเพิ่มของคุณเองโดยการปรับแต่ง

ตัวอย่างเช่นเปิดบัฟเฟอร์องค์กรและพิมพ์<sTABเพื่อแทรกบล็อก BEGIN / END_SRC


13
สำหรับองค์กรรุ่น 9.2 สิ่งนี้ไม่ได้ผลสำหรับฉันนอกกรอบ คุณจำเป็นต้องมีการเพิ่มให้กับคุณ(require 'org-tempo) .emacsนอกจากนี้ที่นี่ยังมีลิงก์ที่อัปเดตไปยังเทมเพลตแบบง่าย -> orgmode.org/manual/Easy-templates.html
JMT2080AD

@ JMT2080AD Org 9.2 ได้เปิดตัวฟังก์ชั่นใหม่ซึ่งแก้ไขปัญหานี้ ดูคำตอบของฉันด้านล่าง: emacs.stackexchange.com/a/47370/15177
Lorem Ipsum

มัน, i bอยู่ในspacemacs?
Jason Goal

16

[นี่เป็นการเพิ่ม / ชี้แจงคำตอบของ @glucas และ @manandearth - ไม่สามารถยืนได้ด้วยตนเอง]

ทราบว่าในรุ่นล่าสุดพัฒนา (> = 9.2) ขององค์กรโหมด (และดังนั้นจึงเว้นแต่สิ่งที่เปลี่ยนแปลงในรุ่นอนาคตที่มีเสถียรภาพ) org-structure-template-alistมีการเปลี่ยนแปลงประเภทของ กลไกง่าย ๆ ในตัวแม่แบบได้ถูกทอดทิ้งในความโปรดปรานของกลไกทั่วไปเพิ่มเติมตามtempoแพคเกจ ขออภัยกลไกใหม่อนุญาตให้ใช้ตัวย่อเดียวหลังจาก<นั้นดังนั้น<sจะขยายไปยัง#+BEGIN_SRC...#+END_SRCสตริงที่ OP ขอมา แต่สิ่งต่าง ๆ<elใน @ manandearth คำตอบจะไม่ทำงาน สิ่งนี้ยังคงอยู่ในระหว่างดำเนินการดังนั้นสิ่งต่าง ๆ อาจเปลี่ยนแปลงได้ แต่หากคุณใช้ตัว<XXXย่อแบบหลายตัวอักษรให้เตรียมพร้อมเพื่อให้ตัวแบ่งเมื่อคุณอัปเกรดโหมดองค์กรเป็นรุ่นดังกล่าว

นอกจากนี้ยังมีกลไกอื่น: C-c C-,ถูกผูกไว้กับorg-insert-structure-templateที่แจ้งให้คุณสำหรับชนิดของบล็อกที่คุณต้องการแทรก (กับเมนูที่แสดงรายการบล็อกที่มีอยู่และช่วยให้คุณสามารถเลือกด้วยกุญแจกดเพียงครั้งเดียว) ข้อได้เปรียบของมันคือมันจะbegin/endล้อมรอบภูมิภาคดังนั้นหากคุณพิมพ์สิ่งต่าง ๆ แล้วและคุณต้องการห่อมันเป็นบล็อกสิ่งที่คุณต้องทำคือเลือกมันเป็นพื้นที่และพิมพ์C-c C-.ตามด้วยอักขระตัวเดียว เพื่อเลือกประเภทของบล็อก

ดูบันทึกนี้ [Fn: 1], สตริง doc ของ (ใหม่) ฟังก์ชั่นorg-insert-structure-templateและไฟล์ org-tempo.el

[fn: 1] ลิงก์อาจไม่ถูกต้องเนื่องจากมันชี้ไปยังหมายเลขโทรศัพท์พื้นฐานในไฟล์ที่อาจเปลี่ยน (ไม่ได้เลย!) หากลิงก์ไม่นำคุณไปยังที่ที่ถูกต้องให้ค้นหาสตริง "การขยายเทมเพลตโครงสร้าง" - และอย่าลังเลที่จะแก้ไขคำตอบนี้และแก้ไขหมายเลขบรรทัด - ขอบคุณ!


สิ่งหนึ่งที่ผมชอบเกี่ยวกับC-c C-,กว่า<sก็คือว่ามันช่วยให้คุณสามารถเลือกข้อความและ "ห่อ" มันไปรอบ ๆ C-c C-,แม่แบบโครงสร้างโดยเพียงแค่พิมพ์ ด้วย<sคุณจะต้องตัดและวางบรรทัดที่ลงท้ายเทมเพลต (เช่น, #+END_SRC)
SaMeji

ใช่ฉันพูดถึงว่าในคำตอบ
NickD

14

พฤติกรรมแหล่งบล็อกการเปลี่ยนแปลงในองค์กร 9.2 ตัวย่อจะ<sไม่ทำงานตามค่าเริ่มต้นอีกต่อไป คุณใช้การC-c C-,โทรแบบorg-insert-structure-templateไหนแทน

การเพิ่มบล็อกต้นฉบับ

การกดC-c C-,จะแสดงข้อความโต้ตอบ กดแล้วใส่TAB src Rสิ่งนี้จะแทรกบล็อกซอร์สและวางเคอร์เซอร์ของคุณที่จุดเริ่มต้นของบรรทัดที่สอง (ให้|เป็นจุด ):

#+begin_src R
|#+end_src

หากต้องการแก้ไขภายในบล็อกกดC-oเพื่อเปิดบรรทัดใหม่

org-structure-template-alistคุณสามารถบันทึกแม่แบบโดยการเพิ่มรายการไปที่ วางสิ่งต่อไปนี้ไว้ในที่ของคุณinit.elหรือรันโดยใช้C-x C-e:

(add-to-list 'org-structure-template-alist '("r" . "src R"))

ตอนนี้เมื่อคุณทำC-c C-,คุณจะเห็นรายการrในรายการ คุณสามารถทำตามวิธีการเดียวกันสำหรับภาษาอื่นเช่น Python, Ruby และอื่น ๆ เพียงแค่แทนที่cdrในคู่ประด้านบน (ส่วน "src R")

C-q C-jนอกจากนี้เพื่อแทรกเส้นแบ่งระหว่างคั่นแหล่งที่มาบล็อกคุณสามารถแทรกตัวอักษรขึ้นบรรทัดใหม่โดยใช้ นั่นคือพิมพ์src R C-q C-jในcdrของคู่ประด้านบน ผลลัพธ์จะมีลักษณะดังนี้:

(add-to-list 'org-structure-template-alist '("R" . "src R
"))

ตอนนี้เมื่อคุณกดREmacs จะแทรกบล็อกต้นฉบับและวางเคอร์เซอร์ของคุณระหว่างบรรทัดใหม่ (ให้|เป็นจุด ):

#+begin_src R
|
#+end_src

4
การ<sรวมยังคงมีอยู่คุณต้องรวม(require org-temp)ไว้ใน init เพื่อเปิดใช้งาน
Tyler

การแก้ไขคำสะกดผิด:(require 'org-tempo)
NickD

8

สำหรับการเชื่อมโยงที่สำคัญสำหรับบล็อกรหัสในbabel-orgลองต่อไปนี้เพื่อผูก<rตามด้วย<tab>:

;; add <r for R expansion
(add-to-list 'org-structure-template-alist
         '("p" "#+BEGIN_SRC r :results output org drawer\n?\n#+END_SRC"
           "<src lang=\"r\">\n?\n</src>"))

คุณสามารถปรับเปลี่ยนแหล่งที่มาเป็น ESS ได้เช่นกัน

ในการผูก<pตามด้วย a <tab>ถึงรหัสบล็อกหลามเช่น:

;; add <p for python expansion
(add-to-list 'org-structure-template-alist
         '("p" "#+BEGIN_SRC python :results output org drawer\n?\n#+END_SRC"
           "<src lang=\"python\">\n?\n</src>"))

emacs-lisp ตั้งค่า<elตามด้วย a <tab>จะเป็น:

;; add <el for emacs-lisp expansion
(add-to-list 'org-structure-template-alist
         '("el" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC"
           "<src lang=\"emacs-lisp\">\n?\n</src>"))

การผูกที่มีประโยชน์อื่น ๆorg-modeได้แก่ :

(add-to-list 'org-structure-template-alist
         '("ao" "#+attr_org: " ""))

(add-to-list 'org-structure-template-alist
         '("al" "#+attr_latex: " ""))

(add-to-list 'org-structure-template-alist
         '("ca" "#+caption: " ""))

(add-to-list 'org-structure-template-alist
         '("tn" "#+tblname: " ""))

(add-to-list 'org-structure-template-alist
         '("n" "#+name: " ""))

(add-to-list 'org-structure-template-alist
         '("o" "#+options: " ""))

(add-to-list 'org-structure-template-alist
         '("ti" "#+title: " ""))

คุณช่วยอธิบายอีกเล็กน้อยเกี่ยวกับฉันสามารถปรับเปลี่ยนแหล่งที่มาเป็น ESS ได้หรือไม่? ขอบคุณ!
Xianwen เฉิน

ดูที่ลิงค์นี้ไปยังหน้า babel ฉันใช้ python และ Jupyter notebook ผ่านeinซึ่งควรสนับสนุน R
manandearth

สำหรับ org-version> 9.2 ไวยากรณ์จะเป็น:(add-to-list 'org-structure-template-alist '("p" . "src python"))
ギョーム

2

ไปดูแพ็คเกจ YASnippet Emacs ช่วยให้คุณสามารถเพิ่มข้อมูลโค้ดด้วยคำหลักและ TAB หลังจากนั้น มันง่ายกว่าและมีประโยชน์สำหรับทั้งในโหมดองค์กรและสคริปต์ R คุณควรมีโฟลเดอร์ใน. emacs.d / snippets / ess-mode (และอีกอันสำหรับโหมด org) ที่คุณบันทึกไฟล์ดังนี้:

    # -*- mode: snippet -*-
    # name: in
    # key: in
    # -- 
    %in% 

เมื่อคุณพิมพ์ใน TAB จะมีหน่วยเป็น% ใน% เช่นเดียวกัน:

# -*- mode: snippet -*-
# name: source_r
# key: srcr_
# --
#+BEGIN_SRC R 
$0
#+END_SRC

https://www.emacswiki.org/emacs/Yasnippet

https://joaotavora.github.io/yasnippet/snippet-development.html


1

ในการเพิ่มคีย์ผสมใหม่ลงในโหมด org คุณสามารถใช้

(define-key org-mode-map "\C-cs" 
    (lambda()(interactive)(insert "#+BEGIN_SRC R\n#+END_SRC")))

C-csนี้จะแทรกสตริงถ้าคุณกด

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