Como definir um atalho para # + BEGIN_SRC # + END_SRC?


14

Eu li o manual do modo organizacional, mas não encontrei um atalho para inserir:

#+BEGIN_SRC 
#+END_SRC

Eu acho que preciso criar uma configuração em ~ / .emacs para definir um atalho? Ou existe um atalho, mas eu não sabia?

Eu uso muito R no emacs. Existe uma maneira de criar um atalho separado para criar isso?

#+BEGIN_SRC R
#+END_SRC

Respostas:


21

O modo organizacional possui um mecanismo interno para inserir blocos de origem. Consulte Modelos fáceis no manual da organização. A configuração padrão fornece modelos para um número de # + BLOCOS, e você pode adicionar seus próprios personalizando ‘org-structure-template-alist’.

Por exemplo, abra um buffer organizacional e digite <sTABpara inserir um bloco BEGIN / END_SRC.


13
Para a versão 9.2 da organização, isso não funciona para mim imediatamente. Você precisa ter (require 'org-tempo)adicionado ao seu .emacs. Além disso, aqui está um link atualizado para Easy Templates -> orgmode.org/manual/Easy-templates.html
JMT2080AD

O @ JMT2080AD Org 9.2 introduziu uma nova funcionalidade que trata disso. Veja minha resposta abaixo: emacs.stackexchange.com/a/47370/15177
Lorem Ipsum

Está , i bdentro spacemacs?
Jason Goal

15

[Este é um complemento / esclarecimento às respostas de @glucas e @manandearth - ele não se sustenta por si só.]

Observe que nas versões recentes de desenvolvimento (> = 9.2) do modo org (e, portanto, a menos que as coisas mudem, nas futuras versões estáveis), org-structure-template-alistmudou seu tipo. O mecanismo embutido de modelos fáceis foi abandonado em favor de um mecanismo mais genérico baseado no tempopacote. Infelizmente, o novo mecanismo só permite abreviações de um único caractere após o <, então <sserá expandido para a #+BEGIN_SRC...#+END_SRCsequência solicitada pelo OP, mas coisas como <elna resposta do @ manandearth NÃO funcionarão. Ainda é um trabalho em andamento, portanto, as coisas podem mudar, mas se você usar <XXXabreviações com várias letras , esteja preparado para que elas quebrem ao atualizar o modo organizacional para essa versão.

Há também outro mecanismo: C-c C-,é vinculado ao org-insert-structure-templateque solicita o tipo de bloco que você deseja inserir (com um menu que lista todos os blocos disponíveis e permite escolher com um único toque de tecla). Sua vantagem é que ele envolverá a begin/endregião, portanto, se você já digitou várias coisas e deseja agrupá-las em um bloco, tudo o que você precisa fazer é selecioná-las como região e tipo, C-c C-.seguido por um único caractere para escolher o tipo de bloco.

Veja esta nota [fn: 1], a sequência de documentos da (nova) função org-insert-structure-templatee o arquivo org-tempo.el .

[fn: 1] O link pode estar impreciso porque aponta para um número de linha fixo em um arquivo que pode (não, vai!) mudar. Se o link não o levar ao lugar certo, procure a sequência "expansão do modelo de estrutura" - e fique à vontade para editar esta resposta e fixar o número da linha - obrigado!


12

O comportamento do bloco de origem foi alterado na Org 9.2 . A abreviação <snão funciona mais por padrão. Em vez disso, você usa C-c C-,quais chamadas org-insert-structure-template.

Adicionando um bloco de origem

Pressionar C-c C-,exibe uma caixa de diálogo. Pressione TABe depois digite src R. Isso insere um bloco de origem e coloca o cursor no início da segunda linha ( |seja o ponto ):

#+begin_src R
|#+end_src

Para editar dentro do bloco, pressione C-opara abrir uma nova linha.

Você pode salvar um modelo adicionando uma entrada ao org-structure-template-alist. Coloque o seguinte em algum lugar init.elou execute-o usando C-x C-e:

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

Agora, quando você C-c C-,verá uma entrada rna lista. Você pode seguir a mesma abordagem em outros idiomas, como Python, Ruby, etc. Simplesmente substitua o cdr no par pontilhado acima (a parte "src R").

Além disso, para inserir uma linha entre os delimitadores do bloco de origem, você pode inserir um caractere de nova linha usando C-q C-j. Ou seja, digite src R C-q C-jo cdr do par pontilhado acima. O resultado será semelhante a:

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

Agora, quando você pressiona R, o Emacs insere o bloco de origem e coloca o cursor entre eles em uma nova linha ( |seja o ponto ):

#+begin_src R
|
#+end_src

4
A <sligação ainda existe, você só precisa incluir (require org-temp)no seu init para habilitá-la.
Tyler

Correção de erro de (require 'org-tempo)
digitação

8

para ligações de teclas para blocos de código, babel-orgtente o seguinte para ligar <rseguido por um <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>"))

Você também pode modificar a fonte para o ESS.

Para ligar <pseguido de a <tab>a um código de bloco python, por exemplo:

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

um emacs-lisp definido como <elseguido por a <tab>será:

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

outras ligações úteis org-modesão:

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

Você poderia explicar um pouco mais sobre a possibilidade de modificar a fonte para o ESS também? Obrigado!
Xianwen Chen

ter um olhar para este link para a página babel R I uso python e notebook Jupyter via einque também deve apoiar a I.
Manandearth 21/0318

Para a versão organizacional> 9.2, a sintaxe seria:(add-to-list 'org-structure-template-alist '("p" . "src python"))
ョ ー ム

2

Dê uma olhada no pacote YASnippet Emacs. Ele permite que você adicione trechos de código com algumas palavras-chave e TAB depois. É muito mais simples e útil tanto no modo organizacional quanto nos scripts R. Você deve ter uma pasta em .emacs.d / snippets / ess-mode (e uma para o modo organizacional) onde salve arquivos como este:

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

Quando você digita TAB, ele fica em% em%, da mesma forma:

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

Para adicionar uma nova combinação de teclas ao modo organizacional, você pode usar

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

Isso inserirá a sequência se você pressionar C-cs.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.