暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Emacs(客户端)作为 psql 中的编辑器

原创 小小亮 2022-11-21
555

Emacs(客户端)作为 psql 中的编辑器

psql是一个了不起的交互式 swiss-army knife 终端,它可以真正改变你的一天!坦率地说,在我的专业培训活动中,psql出于多种原因,我总是告诉参与者要学会使用,而且我还会问他们是否有任何交互式 SQL 终端具有相同的功能集,而没有得到答案!提供的一件好事是psql能够直接在您选择的编辑器中编辑复杂查询。选择的编辑器Emacs每次我必须编辑查询缓冲区(通过\e命令)时启动 Emacs 都很尴尬:即使在最近的硬件上,Emacs 启动也很慢。值得庆幸的是,有一个窍门:Emacs 嵌入了客户端-服务器方法这是一个真正的客户端-服务器方法。这个想法是让 Emacs 作为一个守护进程启动,每次你需要一个新的编辑器框架(嗯,每次你需要编辑一些东西),你都可以调用特殊命令emacsclient要求附加到运行的守护进程。结果,虽然守护进程的启动和普通emacs实例一样慢,但emacsclient编辑会话却快得惊人!到目前为止,一切都很好!嗯,不,好吧,不适合我。我在尝试配置psqlemacsclient用作编辑器时遇到了很多麻烦。而且,让我感到羞耻,我遇到了麻烦,因为我使用了错误的标志集来启动emacsclient让事情变得更糟:我正在使用ZSH作为我的默认 shell,出于某些奇怪的原因,我需要进行调查,该 shell在同一环境变量中不能很好地处理命令和标志

TL;DR - 怎么做?

有两种方法可以更改psql将用于编辑查询缓冲区的默认编辑器:
  • 设置众所周知的EDITOR环境变量;
  • 设置psql特定的PSQL_EDITOR环境变量。
由于我是一个完全使用 Emacs 的人,所以我决定首先使用,这样每当我需要使用 时$EDITOR,我就会进入舒适的 Emacs 环境。因此,为了实现这一点,在对标志进行一些研究之后,只需将以下内容放入您的.zshrc配置文件中:

export EDITOR="emacsclient -t"


或对PSQL_EDITOR然后,当您在psql应用程序中时,点击\e并查看 Emacs 快速出现。第一次,当您返回psql会话时,您会注意到 Emacs 本身发出的几行警告:

testdb=> \e
emacsclient: can't find socket; have you started the server?
emacsclient: To start the server in Emacs, type "M-x server-start".
Starting Emacs daemon.
Emacs daemon should have started, trying to connect again
testdb=>



那是因为,在第一次,emacsclient没有发现任何emacs实例作为守护进程运行,所以它自己启动一个,稍等片刻,然后连接回服务器。这在消息中有明确解释,因此只是警告。

ZSH(和 Bash)怎么样?

我花了这么长时间才理解如何配置emacsclient的原因之一是,由于某些我还不知道的原因,当您尝试在环境变量中启动命令时,假设此类变量包含空格,ZSH 的行为很糟糕。为什么?因为为了用空格设置变量,你必须引用你的命令行,此时 ZSH 假设整个字符串是一个命令:

% echo $EDITOR
emacsclient -t

% $EDITOR
zsh: command not found: emacsclient -t


Bash 中不会发生同样的情况,它的行为符合预期:

% bash
$ echo $EDITOR
emacsclient -t
$ $EDITOR
...


因此,我还发现 Bash 的行为似乎比 ZSH 更直观(不,我不会因为这个原因切换回 Bash!)。

颜色和主题!

我倾向于在我的所有活动中使用深色配色方案,包括我用于 SSH 登录机器的终端。在这些情况下,Emacs 的默认颜色选择非常糟糕。假设您没有特定的 Emacs 启动配置(相信我,您应该有!),您可以将如下一行添加到您的启动文件之一(例如,~/.emacs~/.emacs.d/init.el):

(load-theme 'tango-dark)


这将使您在黑暗终端上的 Emacs 体验更好!请注意更改不会反映到任何正在运行的守护进程中,因此您必须在更改后重新启动 Emacs(或重新评估)启动文件!

结论

Emacs,由于其客户端-服务器组件,可以真正改善您已经很棒的体验psql例如,您可以在编辑器中编写查询时使用外部工具重新格式化查询。有关如何自定义的更多文档,emacsclient 请参阅官方文档(https://www.emacswiki.org/emacs/EmacsClient


原文标题:Emacs(client) as editor in psql
原文链接:https://fluca1978.github.io/2022/11/16/psqlEmacsClient.html

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论