gpt4 book ai didi

emacs - 代码块内的 org-mode 宏和使用 babel

转载 作者:行者123 更新时间:2023-11-29 02:46:46 24 4
gpt4 key购买 nike

受此启发great post ,我正在尝试结合使用 org-modebabelelasticsearch 发出查询。例如,计算索引中的条目数:

#+BEGIN_SRC sh
curl -XGET 'http://my.uri.example:8080/index/_count'
#+END_SRC

当点在 block 中时,可以使用 C-c C-c 计算上面的代码。1

另一方面,可以定义macros在组织文件中。我的问题是:是否可以定义一个宏

#+MACRO: live-db http://my.uri.example:8080

并重写代码块如下:

#+BEGIN_SRC sh
curl -XGET '{{{live-db}}}/index/_count'
#+END_SRC

开箱即用,对我来说,它没有用......似乎 babel 在 block 评估之前没有扩展宏。想法?

编辑

现在,一旦我了解到我可以使用 es-mode ,我不会微调我的问题。考虑以下两个请求:

#+BEGIN_SRC es :url http://mu.uri.stage:8080
GET /users/_search?pretty
{
"query": {
"match_all":{}
}
}
#+END_SRC

#+BEGIN_SRC es :url http://mu.uri.live:8080
GET /users/_search?pretty
{
"query": {
"match_all":{}
}
}
#+END_SRC

它们仅在 URL 上有所不同。我想定义两个宏:

#+MACRO staging http://my.uri.stage:8080
#+MACRO live http://my.uri.live:8080

然后使用宏作为 block 的变量。可能吗?


1 确保启用 sh 的评估。添加如下内容:

(org-babel-do-load-languages
'org-babel-load-languages
'((sh . t)))

到你的 .emacs

最佳答案

执行代码块时不支持宏扩展,但是 Noweb reference syntax受支持的功能更强大。

但是,我怀疑它是否可以使用 es-mode,因为它在 header argument 中传递 url。而不是 variable .

这是 sh 代码块的一个简单示例:

#+name: staging
: http://my.uri.stage:8080

#+name: live
: http://my.uri.live:8080

#+name: test
#+begin_src sh :var url=staging
echo $url
#+end_src

#+call: test(live)

#+RESULTS:
: http://my.uri.live:8080

#+call: test(staging)

#+RESULTS:
: http://my.uri.stage:8080

关于emacs - 代码块内的 org-mode 宏和使用 babel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24909918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com