Làm cách nào để đặt một lối tắt cho # + BEGIN_SRC # + END_SRC?


14

Tôi đọc hướng dẫn chế độ org nhưng không tìm thấy một đoạn ngắn để chèn:

#+BEGIN_SRC 
#+END_SRC

Tôi đoán tôi cần tạo một cấu hình trong ~ / .emacs để đặt lối tắt? Hoặc, có một phím tắt nhưng tôi không biết?

Tôi sử dụng R nhiều trong emacs. Có cách nào để tạo một lối tắt riêng để tạo cái này không?

#+BEGIN_SRC R
#+END_SRC

Câu trả lời:


21

Chế độ Org có cơ chế tích hợp để chèn các khối nguồn. Xem các mẫu dễ dàng trong hướng dẫn sử dụng Org. Cấu hình mặc định cung cấp các mẫu cho một số # + BLOCKS và bạn có thể thêm mẫu của riêng mình bằng cách tùy chỉnh ‘org-structure-template-alist’.

Ví dụ: mở bộ đệm org và gõ <sTABđể chèn khối BEGIN / END_SRC.


13
Đối với phiên bản org 9.2, điều này không phù hợp với tôi. Bạn cần phải (require 'org-tempo)thêm vào của bạn .emacs. Ngoài ra, đây là một liên kết được cập nhật đến Mẫu dễ dàng -> orgmode.org/manual/ EAS
tem mẫu.html

@ JMT2080AD Org 9.2 giới thiệu chức năng mới giải quyết vấn đề này. Xem câu trả lời của tôi dưới đây: emacs.stackexchange.com/a/47370/15177
Lorem Ipsum

Có phải , i btrong spacemacs?
Mục tiêu Jason

15

[Đây là phần bổ sung / làm rõ cho các câu trả lời của @glucas và @manandearth - nó không tự đứng vững.]

Lưu ý rằng trong các phiên bản phát triển gần đây (> = 9.2) của chế độ org (và do đó, trừ khi mọi thứ thay đổi, trong các phiên bản ổn định trong tương lai), org-structure-template-alistđã thay đổi loại. Cơ chế dễ dàng tích hợp sẵn đã bị bỏ qua để ủng hộ một cơ chế chung hơn dựa trên tempogói. Thật không may, cơ chế mới chỉ cho phép viết tắt một ký tự sau <, vì vậy <ssẽ được mở rộng thành #+BEGIN_SRC...#+END_SRCchuỗi mà OP đang yêu cầu, nhưng những thứ như <eltrong câu trả lời của @ manandearth sẽ KHÔNG hoạt động. Đây vẫn là một công việc đang tiến triển, vì vậy mọi thứ có thể thay đổi, nhưng nếu bạn đi bằng chữ <XXXviết tắt nhiều chữ cái , hãy chuẩn bị cho chúng để phá vỡ khi bạn nâng cấp chế độ org lên phiên bản như vậy.

Ngoài ra còn có một cơ chế khác: C-c C-,bị ràng buộc org-insert-structure-templatenhắc nhở bạn về loại khối bạn muốn chèn (với một menu liệt kê tất cả các khối có sẵn và cho phép bạn chọn chỉ bằng một lần bấm phím). Ưu điểm của nó là nó sẽ bao begin/endquanh một vùng, vì vậy nếu bạn đã gõ một loạt các thứ và bạn muốn bọc nó trong một khối, tất cả những gì bạn phải làm là chọn nó làm một vùng và gõ C-c C-.theo một char để chọn loại khối.

Xem ghi chú này [fn: 1], chuỗi doc của hàm (mới) org-insert-structure-templatetệp org-tempo.el .

[fn: 1] Liên kết có thể không chính xác vì nó trỏ đến một số dòng cố định trong một tệp có thể (nay, sẽ!) thay đổi. Nếu liên kết không đưa bạn đến đúng nơi, hãy tìm kiếm chuỗi "mở rộng mẫu cấu trúc" - và thoải mái chỉnh sửa câu trả lời này và sửa số dòng - cảm ơn!


12

Các hành vi khối nguồn thay đổi trong Org 9.2 . Chữ viết tắt <skhông còn hoạt động theo mặc định. Thay vào đó, bạn sử dụng C-c C-,cuộc gọi nào org-insert-structure-template.

Thêm một khối nguồn

Nhấn C-c C-,sẽ hiển thị một hộp thoại. Nhấn TABvà sau đó nhập src R. Điều này sẽ chèn một khối nguồn và đặt con trỏ của bạn ở đầu dòng thứ hai (hãy |điểm ):

#+begin_src R
|#+end_src

Để sau đó chỉnh sửa bên trong khối, nhấn C-ođể mở một dòng mới.

Bạn có thể lưu một mẫu bằng cách thêm một mục vào org-structure-template-alist. Đặt một số thứ sau đây vào của bạn init.elhoặc chạy nó bằng cách sử dụng C-x C-e:

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

Bây giờ khi bạn làm, C-c C-,bạn sẽ thấy một mục rtrong danh sách. Bạn có thể làm theo cách tiếp cận tương tự cho các ngôn ngữ khác, chẳng hạn như Python, Ruby, v.v. Chỉ cần thay thế cdr trong cặp chấm ở trên (phần "src R").

Ngoài ra, để chèn một dòng giữa các dấu phân cách khối nguồn, bạn có thể chèn một ký tự dòng mới bằng cách sử dụng C-q C-j. Đó là, nhập src R C-q C-jvào cdr của cặp chấm ở trên. Kết quả sẽ như sau:

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

Bây giờ khi bạn nhấn R, Emacs sẽ chèn khối nguồn và đặt con trỏ của bạn giữa chúng trên một dòng mới (hãy |điểm ):

#+begin_src R
|
#+end_src

4
Các <sràng buộc vẫn tồn tại, bạn chỉ cần đưa (require org-temp)vào init của bạn để kích hoạt nó.
Tyler

Sửa lỗi Typo:(require 'org-tempo)
NickD

8

đối với các ràng buộc chính cho các khối mã, babel-orghãy thử cách sau để liên kết <rtheo sau <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>"))

Bạn cũng có thể sửa đổi nguồn thành ESS.

Để liên kết <ptheo sau bởi một <tab>mã khối python, ví dụ:

;; 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>"))

một emacs-lisp được đặt <eltheo sau <tab>sẽ là:

;; 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>"))

các ràng buộc hữu ích khác org-modelà:

(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: " ""))

Bạn có thể giải thích thêm một chút về việc tôi có thể sửa đổi nguồn thành ESS không? Cảm ơn!
Xianwen Chen

Hãy xem liên kết này đến trang babel R Tôi sử dụng python và Jupyter notebook thông qua einđó cũng sẽ hỗ trợ R.
giờ 48 phút

Đối với phiên bản org> 9.2, cú pháp sẽ là:(add-to-list 'org-structure-template-alist '("p" . "src python"))
ョ ー

2

Hãy xem gói YASnippet Emacs. Nó cho phép bạn thêm các đoạn mã với một số từ khóa và TAB sau. Nó đơn giản và hữu ích hơn nhiều cho cả trong chế độ org và với các tập lệnh R. Bạn nên có một thư mục trong .emacs.d / snippets / ess-mode (và một cho chế độ org) nơi bạn lưu các tệp như thế này:

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

Khi bạn nhập TAB, nó sẽ hiển thị% theo%, tương tự:

# -*- 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

Để thêm tổ hợp phím mới vào chế độ tổ chức, bạn có thể sử dụng

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

Điều này sẽ chèn chuỗi nếu bạn nhấn C-cs.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.