Apakah mungkin untuk membuat yasnippet untuk memperluas cuplikan di dalam bagian babel mode-org dalam mode yang sesuai?


10

Misalnya saya memiliki mode org yang memiliki yang berikut ini

#+BEGIN_SRC emacs-lisp


#+END_SRC

Apakah mungkin untuk mengkonfigurasi yasnippet sedemikian rupa sehingga semua snippet emacs-lisp-mode dapat diperluas di dalam blok itu tetapi tidak di luarnya?


6
Saya pikir cara "standar" adalah dengan mengedit blok-blok dengan C-c '- dalam hal itu, mode utama emacs-lisp akan memiliki potongan yasnippet yang tepat dimuat saat mengedit blok di jendela yang terpisah (yang juga menangani lekukan yang tepat dll.)
— VanLaser

Ya, saya setuju dengan respons VanLaser. Ini berfungsi untuk semua bahasa yang didukung oleh emacs.
— dmg

Oh benar Kamu benar. Bisakah Anda menempatkan ini pada respons sehingga saya menandai respons Anda sebagai benar? Saya tidak memikirkan hal itu: P
— Rafa de Castro

Jawaban:


7

Mulai 2017, 22 Januari, jika Anda menetapkan org-src-tab-acts-nativelydan org-src-fontify-natively, maka TAB di blok sumber akan memperluas cuplikan bahasa blok. Anda mungkin ingin mengatur yas-buffer-local-conditionagar mode cuplikan org dari membayangi cuplikan mode blok:

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

Lihat juga https://github.com/joaotavora/yasnippet/issues/761 , https://github.com/joaotavora/yasnippet/pull/760


2

Saya menggunakan dua metode untuk ini. Saya memiliki beberapa cuplikan org untuk membantu saya membuat header babel. Misalnya, yang ini membuat C ++ - 14 header untuk Babel. Saya mengetik <s C++_dan memperluas:

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

Lalu saya menggunakan Cc 'yang beralih ke mode bahasa tertentu dan menggunakan snippet untuk bahasa itu. Kemudian gunakan Cc 'untuk kembali ke file org. Ini bekerja dengan baik.


0

Seperti yang sudah dijawab npostav, snippet diperluas secara berbeda tergantung pada bahasa dalam satu file mode org.

Cukup ketik "co" dan [tab] dalam Python atau 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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.