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?
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?
Câu trả lời:
Kể từ năm 2017, ngày 22 tháng 1, nếu bạn đặt org-src-tab-acts-natively
và org-src-fontify-natively
sau đó 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
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.
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
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.)