gpt4 book ai didi

r - 如何自动化这些 emacs ESS (ess-remote) 命令?

转载 作者:行者123 更新时间:2023-12-01 23:19:03 25 4
gpt4 key购买 nike

我正在使用本地 emacs 实例 (aquamacs) 在远程服务器上运行 R 进程,并且我想自动执行连接到我的服务器的过程。流程如下:

[在 emacs 中]

M-x shell

[在结果控制台中]

TERM=xterm
ssh -Y -C <my remote server>
screen -rd [and/or] R

[在 emacs 中]

M-x ess-remote
r

我在这里发现了这种通用方法:http://blog.nguyenvq.com/2010/07/11/using-r-ess-remote-with-screen-in-emacs/ 。 -Y -C 选项允许您使用 xterm 查看绘图。我不知道 lisp,尽管我在 google 上搜索了一下,但我似乎无法拼凑出如何实际定义一个函数来自动执行此操作(例如,在 .emacs.el 中)。有人实现过类似的事情吗?

最佳答案

假设您只想调用 shell在代码中。在 Lisp 中,一切都是用括号括起来的前缀表示法。因此,我们将其输入缓冲区(例如临时缓冲区):

(shell)

将指针移至右括号后的行尾,然后输入 <C-x C-e>执行 Lisp 代码。您应该看到 shell函数被调用。

现在,让我们将其设为一个函数,这样我们就可以向其中添加其他内容。创建函数的命令是defun ,它接受函数的名称、参数列表(在括号中),然后是函数的主体:

(defun automate-connection ()
(shell))

将光标移动到代码末尾,点击 <C-x C-e> ,并且函数将被定义。您可以通过执行从 Lisp 调用它

(automate-connection)

好的,现在我们只需要将一些文本放入 shell 缓冲区即可。

(defun automate-connection ()
(shell)
(insert "TERM=xterm"))

现在,当我们运行它时,我们会将“TERM=xterm”放入 shell 缓冲区中。但它实际上并不发送命令。让我们尝试换行。

(defun automate-connection ()
(shell)
(insert "TERM=xterm\n"))

这会插入一个换行符,但实际上并没有使命令运行。为什么不?让我们看看回车键有什么作用。转到您的*shell*缓冲区,然后输入 <C-h c> ,然后按回车键。 ( <C-h c> 运行 describe-key-briefly ,它打印通过按给定键调用的函数的名称)。这就是说,当你按 RET 时,它并不是放置换行符,而是实际调用 comint-send-input 。那么让我们这样做:

(defun automate-connection ()
(shell)
(insert "TERM=xterm")
(comint-send-input))

现在,当您从任何 Lisp 代码运行 `(automate-connection) 时,您应该会收到发送的给定内容。我将其作为练习留给读者添加其他命令。

但是等等!我们还没有真正完成,是吗?我假设您不想移动到 Lisp 暂存缓冲区,请输入 (automate-connection) ,然后评估该代码。您可能只想输入 ,然后就到此为止了。默认情况下,您不能使用我们刚刚创建的函数来执行此操作。幸运的是,实现这一点很简单:只需添加对 (interactive) 的调用即可。在你的函数中:

(defun automate-connection ()
(interactive)
(shell)
(insert "TERM=xterm")
(comint-send-input))

现在你可以随意调用它,它会打开 *shell*缓冲区,放入文本,然后告诉 Emacs 让 shell 运行该文本。

关于r - 如何自动化这些 emacs ESS (ess-remote) 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13518185/

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