gpt4 book ai didi

r - 如何让 Emacs ess 将查询字符串(引号内)识别为代码?

转载 作者:行者123 更新时间:2023-12-02 14:27:53 25 4
gpt4 key购买 nike

背景

我有一个函数dbquery,它简化了从 R 中查询 MySQL 数据库的过程。

dbquery <- function(querystring) {
dvr <- dbDriver("MySQL")
con <- dbConnect(dvr, group = "databasename")
q <- dbSendQuery(con, querystring)
data <- fetch(q, n = -1)
return(data)
}

这样我就可以发送:

dbquery(querystring = "select field_1, field_2, field_3 
from table_a join table_b on this = that
join table_c on that = something
where field_4 in (1,2,3);"

但是,变量 querystring 必须包含在引号内。这使得 Emacs ESS 不会像在 SQL 模式下那样很好地缩进我的查询,甚至不会像没有引号而只是在 ESS-R 模式下那样很好地缩进。

问题

是否可以让 ESS 执行此操作?也许通过编写函数以便它接受不带引号的查询(并在函数内添加引号),或者可能向 .emacs 或 ess.el 添加一些内容?

最佳答案

我想你想要的MMM Mode 。顾名思义:MultiMajorMode 模式允许在同一缓冲区的不同区域上有多种模式。

我建议您查看 http://www.emacswiki.org/emacs/HtmlModeDeluxe 中的示例因为它们可能会让您了解如何在您的情况下执行此操作(您可能希望在 sql 周围的代码中添加一些注释,以便 MMM 可以找到 sql 代码)。

我猜你必须做这样的事情(未经测试):

(require 'mmm-mode)
(mmm-add-group
'sql-in-ess
'(
(sql-query
:submode sql-mode
:face WHATEVERYOUWANT
:front "#SQL_QUERY>"
:back "#<SQL_QUERY"))
(add-to-list 'mmm-mode-ext-classes-alist '(ess-mode nil sql-in-ess))

但是,这可能有点过头了,除非经常在 R 代码中进行复杂的 sql 查询。

关于r - 如何让 Emacs ess 将查询字符串(引号内)识别为代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5034508/

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