有什么办法可以在不退出编辑器的情况下将Postgresql中外部编辑器的内容传输到查询缓冲区?

时间:2018-11-03 13:28:34

标签: postgresql emacs psql

我的环境:

OS: Linux CentOS 7 (x86_64)
PostgreSQL version: 10.5
Emacs 26.1

我使用Emacs作为postgresql中的外部编辑器(在我的EDITOR环境变量中设置)。因此,每当我输入psql shell时,\e都会打开Emacs,我可以在其中编写/修改查询,视图,函数等。

如果我理解正确,则打开Emacs后,输入C-x C-s即保存并退出C-x C-c时,在Emacs中编辑的内容将被传输到查询缓冲区解析并执行(假设它的末尾包含分号)。因此,基本上每次我必须运行\e然后进行编辑,然后保存并退出编辑器以完成工作。

现在,考虑到我将Emacs用于多种编程语言,所以我有一个很大的初始化文件。结果,启动Emacs(在-nw和GUI模式下)都需要几秒钟的时间。显然,鉴于我在psql中使用\e时必须打开并退出编辑器的次数,这很烦人。

所以我的问题是:是否有什么办法可以让外部编辑器保持打开状态,并继续使用同一编辑器进行进一步的查询,并以某种方式决定将结果传输到查询缓冲区而无需退出编辑器?

2 个答案:

答案 0 :(得分:0)

只需将查询保存到一个临时文件(例如/tmp/q.sql,然后从第二个终端多次从psql运行\i /tmp/q.sql

答案 1 :(得分:0)

运行emacsclient而不是emacs。我在~/bin/editor有一个脚本:

#!/bin/sh
exec emacsclient -c -a '' "$@"

然后我在export EDITOR=$HOME/bin/editor中设置~/.bashrc

结果是,您仅启动一次Emacs,并且每次运行$EDITOR时,它只会附加到同一Emacs会话。

我也是

(global-set-key (kbd "C-x C-c") #'delete-frame)
(global-set-key (kbd "C-x C-S-c") #'save-buffers-kill-emacs)

所以C-x C-c只是删除框架而不是杀死Emacs。