Bagaimana cara menetapkan jalan pintas untuk # + BEGIN_SRC # + END_SRC?


14

Saya membaca manual mode-org tetapi tidak menemukan jalan pintas untuk disisipkan:

#+BEGIN_SRC 
#+END_SRC

Saya kira saya perlu membuat konfigurasi di ~ / .emacs untuk mengatur pintasan? Atau, apakah ada jalan pintas tapi saya tidak tahu?

Saya banyak menggunakan R di emacs. Apakah ada cara untuk membuat pintasan terpisah untuk membuat ini?

#+BEGIN_SRC R
#+END_SRC

Jawaban:


21

Mode-Org memiliki mekanisme bawaan untuk menyisipkan blok sumber. Lihat Template Mudah di manual Org. Konfigurasi default menyediakan templat untuk sejumlah # + BLOCKS, dan Anda dapat menambahkan milik Anda dengan menyesuaikan ‘org-structure-template-alist’.

Misalnya, buka buffer org dan ketik <sTABuntuk memasukkan blok BEGIN / END_SRC.


13
Untuk org versi 9.2, ini tidak berfungsi untuk saya di luar kotak. Anda harus (require 'org-tempo)menambahkan ke .emacs. Juga, berikut ini tautan yang diperbarui ke Template Mudah -> orgmode.org/manual/Easy-templates.html
JMT2080AD

@ JMT2080AD Org 9.2 memperkenalkan fungsionalitas baru yang membahas hal ini. Lihat jawaban saya di bawah ini: emacs.stackexchange.com/a/47370/15177
Lorem Ipsum

Apakah ada , i bdi dalam spacemacs?
Jason Goal

15

[Ini adalah tambahan / klarifikasi untuk jawaban oleh @glucas dan @manandearth - tidak berdiri sendiri.]

Perhatikan bahwa dalam versi pengembangan terbaru (> = 9.2) mode-org (dan karena itu, kecuali ada perubahan, dalam versi stabil di masa mendatang), org-structure-template-alisttelah mengubah tipenya. Mekanisme templat mudah bawaan telah ditinggalkan demi mekanisme yang lebih umum berdasarkan tempopaket. Sayangnya, mekanisme baru hanya memungkinkan singkatan karakter tunggal setelah <, jadi <sakan diperluas ke #+BEGIN_SRC...#+END_SRCstring yang diminta OP, tetapi hal-hal seperti <eldalam jawaban @ manandearth TIDAK akan berfungsi. Ini masih dalam proses, jadi semuanya bisa berubah, tetapi jika Anda menggunakan <XXXsingkatan multi-huruf , bersiaplah untuk berhenti ketika Anda meningkatkan mode-org ke versi seperti itu.

Ada juga mekanisme lain: C-c C-,terikat org-insert-structure-templateyang meminta Anda untuk jenis blok yang ingin Anda masukkan (dengan menu yang mencantumkan semua blok yang tersedia dan memungkinkan Anda untuk memilih dengan menekan satu tombol). Keuntungannya adalah ia akan membungkus begin/endseluruh wilayah, jadi jika Anda telah mengetik banyak barang dan ingin membungkusnya dalam satu blok, yang harus Anda lakukan adalah memilihnya sebagai wilayah dan mengetik C-c C-.diikuti oleh satu karakter untuk memilih jenis blok.

Lihat catatan ini [fn: 1], string doc dari fungsi (baru) org-insert-structure-templatedan file org-tempo.el .

[fn: 1] Tautan mungkin tidak akurat karena menunjuk ke nomor saluran tetap dalam file yang dapat (tidak, akan!) berubah. Jika tautan tidak membawa Anda ke tempat yang tepat, cari string "perluasan templat struktur" - dan jangan ragu untuk mengedit jawaban ini dan memperbaiki nomor baris - terima kasih!


12

The perilaku blok sumber berubah dalam Org 9.2 . Singkatan <stidak lagi berfungsi secara default. Sebaliknya, Anda menggunakan C-c C-,panggilan mana org-insert-structure-template.

Menambahkan blok sumber

Menekan C-c C-,menampilkan dialog. Tekan TABlalu masuk src R. Sisipan ini blok sumber dan menempatkan kursor pada awal baris kedua (biarkan |menjadi titik ):

#+begin_src R
|#+end_src

Untuk kemudian mengedit di dalam blokir, tekan C-ountuk membuka baris baru.

Anda dapat menyimpan templat dengan menambahkan entri ke org-structure-template-alist. Tempatkan yang berikut di tempat Anda init.elatau jalankan dengan menggunakan C-x C-e:

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

Sekarang ketika Anda melakukannya, C-c C-,Anda akan melihat entri untuk rdalam daftar. Anda dapat mengikuti pendekatan yang sama untuk bahasa lain, seperti Python, Ruby, dll. Cukup ganti cdr pada pasangan bertitik di atas (bagian "src R").

Selain itu, untuk menyisipkan garis di antara pembatas blok sumber, Anda dapat menyisipkan karakter baris baru menggunakan C-q C-j. Artinya, ketik src R C-q C-jdi cdr dari pasangan putus-putus di atas. Hasilnya akan terlihat seperti:

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

Sekarang ketika Anda menekan R, Emacs akan memasukkan blok sumber dan menempatkan kursor di antara mereka pada baris baru (LET |menjadi titik ):

#+begin_src R
|
#+end_src

4
The <smengikat masih ada, Anda hanya perlu menyertakan (require org-temp)dalam init Anda untuk mengaktifkannya.
Tyler

Koreksi kesalahan ketik:(require 'org-tempo)
NickD

8

untuk binding kunci untuk blok kode di babel-orgcoba yang berikut ini untuk mengikat <rdiikuti oleh <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>"))

Anda dapat memodifikasi sumber menjadi ESS juga.

Untuk mengikat <pdiikuti oleh <tab>ke kode blok python, misalnya:

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

sebuah emacs-lisp diatur untuk <eldiikuti oleh <tab>akan menjadi:

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

binding berguna lainnya org-modeadalah:

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

Bisakah Anda menjelaskan lebih banyak tentang saya bisa memodifikasi sumber untuk ESS juga? Terima kasih!
Xianwen Chen

lihat tautan ini ke halaman babel R yang saya gunakan python dan notebook Jupyter einyang juga harus mendukung R.
manandearth

Untuk org-versi> 9.2, sintaksinya adalah:(add-to-list 'org-structure-template-alist '("p" . "src python"))
ギ ョ ー ム

2

Lihatlah paket YASnippet Emacs. Ini memungkinkan Anda untuk menambahkan potongan kode dengan beberapa kata kunci dan TAB setelahnya. Ini jauh lebih sederhana dan berguna baik dalam mode org dan dengan skrip R. Anda harus memiliki folder di .emacs.d / snippets / ess-mode (dan satu untuk mode org) di mana Anda menyimpan file seperti ini:

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

Saat Anda mengetik di TAB, ia menempel di% dalam%, serupa:

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

Untuk menambahkan kombinasi tombol baru ke mode-org, Anda dapat menggunakan

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

Ini akan memasukkan string jika Anda menekan C-cs.

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.