org-mode
次の構文のブロックを使用して、ソースコードをレンダリングする機能があります。
#+NAME: <name>
#+BEGIN_SRC <language> <switches> <header arguments>
<body>
#+END_SRC
これらのブロックをすばやく挿入する既存のコマンドはありますorg-mode
か、または外部ツールを使用する必要がありyasnippet
ますか?
org-mode
次の構文のブロックを使用して、ソースコードをレンダリングする機能があります。
#+NAME: <name>
#+BEGIN_SRC <language> <switches> <header arguments>
<body>
#+END_SRC
これらのブロックをすばやく挿入する既存のコマンドはありますorg-mode
か、または外部ツールを使用する必要がありyasnippet
ますか?
回答:
@kaushalmodiがコメントで言及しているように(org) Easy Templates
、さまざまなタイプのブロックの挿入を高速化するために使用できます。
一般的な手順は、空の行にテンプレートセレクター(通常は1文字)を挿入<
し、を押すことです。TAB
汎用ソースブロックテンプレートのテンプレートセレクタはs
であるため、<s
続けて入力するTABと次のようになります。
#+BEGIN_SRC
#+END_SRC
ポイントは最初の行の最後に配置されます。
これはあなたが達成したいものの良い最初の近似ですが、これはEmacsですので、改善しましょう!
と呼ばれる変数に1つ以上のエントリを追加することにより、カスタムテンプレートを定義できますorg-structure-template-alist
。例えば:
(add-to-list 'org-structure-template-alist '("n" "#+NAME: ?"))
このコードは、テンプレートセレクタとして使用して、テンプレートを#+NAME:
テンプレートに追加します。展開後、このテンプレートポイントはの位置に配置されます。org-structure-template-alist
n
?
コードブロックに常に名前を付ける場合、ソースブロックテンプレートの元のバージョンを次の#+NAME:
行を含む拡張バージョンで上書きすることもできます。
(add-to-list 'org-structure-template-alist
'("s" "#+NAME: ?\n#+BEGIN_SRC \n\n#+END_SRC"))
次に入力<s
するTABと、次のようになります。
#+NAME:
#+BEGIN_SRC
#+END_SRC
これは氷山の一角にすぎません。同様のアプローチを使用して、言語固有のコードブロック、特定のヘッダー引数を持つコードブロックなどの追加テンプレートを定義できます。
<s TAB
Mac OS XのEmacs 25で試してみたところ、うまくいくようでした。
org-try-structure-completion
機能があります(Easyテンプレート用)。とにかく、将来的には構造テンプレートに置き換えられます。cf. code.orgmode.org/bzg/org-mode/commit/...
自分で書いてみませんか?
(defun org-insert-source-block (name language switches header)
"Asks name, language, switches, header.
Inserts org-mode source code snippet"
(interactive "sname?
slanguage?
sswitches?
sheader? ")
(insert
(if (string= name "")
""
(concat "#+NAME: " name) )
(format "
#+BEGIN_SRC %s %s %s
#+END_SRC" language switches header
)
)
(forward-line -1)
(goto-char (line-end-position))
)
私のボックスでは、99%の時間でソースブロックを作成し、1%の時間で他のすべてを実行しています。1%のEasyテンプレートは完璧で、99%のYaSnippetがあります。
NAME
使用を作成しますが、それはorg-id
私たちだけのものではありません)、それから私が使用する言語を制限しますOrg-Mode Literate Programming(babel)最後に、サポートコードを記載したYaSnippetを示します。
# -*- mode: snippet -*-
# key: sc
# name: Source Block
# group: HELP
# contributor: gcr@wisdomandwonder.com
# expand-env: ((yas-indent-line 'fixed))
# --
#+NAME: ${1:`(help/org-id-new)`}
#+BEGIN_SRC ${2:$$(let ((langs (sort (-map (lambda (x) (symbol-name (car x))) (if (-contains? org-babel-load-languages '(js . t)) (-snoc org-babel-load-languages '(javascript . t)) org-babel-do-load-languages)) 'string<))) (yas-choose-value (if (-contains? langs "shell") (-snoc langs "sh") langs)))}${2:$(when (-contains? '("ditaa" "dot" "plantuml") yas-text) (concat " :file \\"./image/" (yas-field-value 1) ".png\\""))} $3
$0
#+END_SRC
ダッシュとorg-modeのロードが必要です。
(require 'org-id)
(setq org-id-link-to-org-use-id 'nil)
(setq org-id-prefix (concat "org_" (user-real-login-name) "_" (format-time-string "%Y-%m-%d") "_" (system-name)))
(setq org-id-method 'uuid)
(defun help/org-id-new ()
"Re-purposing `org-id' hit a snag when colons were forbidden in Source-Block
names. Adding support for a user-defined Org-Id separator would have fixed
this but with no benefit to Org-Id. So this function removes the colon
instead.
"
(interactive)
(let* ((gend (org-id-new))
(newid (replace-regexp-in-string ":" "_" gend)))
newid))
このid関数の例を次に示します。
C-u M-:
(insert (help/org-id-new))
結果
org_gcr_2017-08-06_mara_DD608C9A-33B0-4A8D-9123-298746BE973Anil
;;; package --- Summary
;;; Commentary:
;;; Code:
(defvar org-sai-src-default "C++"
"This is the list used to store the default label for source code section.")
(defun org-insert-src-block ()
"Insert the source code section in `org-mode'."
(interactive)
(let* ((src-code-types
'("emacs-lisp" "python" "C" "sh" "java" "js" "clojure" "C++" "css"
"calc" "asymptote" "dot" "gnuplot" "ledger" "lilypond" "mscgen"
"octave" "oz" "plantuml" "R" "sass" "screen" "sql" "awk" "ditaa"
"haskell" "latex" "lisp" "matlab" "ocaml" "org" "perl" "ruby"
"scheme" "sqlite"))
(src-prompt-str
(concat "Source code type (default "
org-sai-src-default
"): "))
(temp-src-code-types
(cons org-sai-src-default src-code-types))
(src-type-str
(completing-read src-prompt-str temp-src-code-types
nil nil nil nil org-sai-src-default)))
(setq org-sai-src-default src-type-str))
(insert (format "#+BEGIN_SRC %s\n" src-type-str))
(newline)
(org-indent-line)
(insert "#+END_SRC\n")
(forward-line -2))))
(add-hook 'org-mode-hook
(lambda ()
;; keybinding for inserting code blocks
(local-set-key (kbd "C-c s") 'org-insert-src-block)))
(provide 'orgAuxiliary)
;;; orgAuxiliary.el ends here
hydra
パッケージの使用:blogpost(3)簡単な組織ソースブロック挿入のための別のスニペット。