Có thể tạo yasnippets để mở rộng đoạn trích trong phần babel chế độ org ở chế độ thích hợp không?


10

Ví dụ: tôi có chế độ org có các chế độ sau

#+BEGIN_SRC emacs-lisp


#+END_SRC

Có thể định cấu hình yasnippets theo cách như vậy để tất cả các đoạn chế độ emacs-lisp-mode có thể được mở rộng bên trong khối đó nhưng không nằm ngoài nó không?


6
Tôi nghĩ rằng cách "tiêu chuẩn" sẽ là chỉnh sửa các khối đó bằng C-c 'mọi cách - trong trường hợp đó, chế độ chính của emacs-lisp sẽ có các đoạn yasnippet thích hợp được tải trong khi chỉnh sửa khối trong cửa sổ riêng biệt của nó (cũng sẽ chăm sóc vết lõm phải v.v.)
VanLaser

Vâng, tôi đồng ý về phản ứng của VanLaser. Nó hoạt động cho bất kỳ ngôn ngữ được hỗ trợ bởi emacs.
dmg

Ồ đúng rồi. Bạn đúng rồi. Bạn có thể đặt điều này trên một phản hồi để tôi đánh dấu phản hồi của bạn là chính xác? Tôi đã không nghĩ về điều đó: P
Rafa de Castro

Câu trả lời:


7

Kể từ năm 2017, ngày 22 tháng 1, nếu bạn đặt org-src-tab-acts-nativelyorg-src-fontify-nativelysau đó TAB trong các khối nguồn sẽ mở rộng các đoạn ngôn ngữ của khối. Bạn có thể muốn đặt yas-buffer-local-conditionđể ngăn các snipppets ở chế độ org che khuất các đoạn của chế độ khối:

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

Xem thêm https://github.com/joaotavora/yasnippet/issues/761 , https://github.com/joaotavora/yasnippet/pull/760


2

Tôi sử dụng hai phương pháp cho việc này. Tôi có một số đoạn trích org để giúp tôi tạo các tiêu đề babel. Ví dụ: cái này tạo ra C ++ - 14 tiêu đề cho Babel. Tôi gõ <s C++_và mở rộng:

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

Sau đó, tôi sử dụng Cc 'để chuyển sang chế độ ngôn ngữ cụ thể và sử dụng đoạn mã cho ngôn ngữ đó. Sau đó sử dụng Cc 'để quay lại tệp org. Nó hoạt động tốt.


0

Vì các npostav đã được trả lời, các đoạn được mở rộng khác nhau tùy thuộc vào các ngôn ngữ trong một tệp chế độ org.

Chỉ cần nhập "co" và [tab] trong khối mã Lisp của Python hoặc Emacs.

#+BEGIN_SRC python :session *Python* :results output
co[tab]
# comment
#+END_SRC

#+BEGIN_SRC emacs-lisp :results value scalar
co[tab]
                                        ; comment
#+END_SRC
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.