对于上下文,我想做的是将预处理器添加到 REPL,更具体地说,nix repl
.尽管这可能适用于任何其他类似 REPL 的应用程序。
其原因是我想在其输出中添加格式化步骤,例如:
$ nix repl
Welcome to Nix 2.17.1. Type :? for help.
nix-repl> ↵
nix-repl> { a = 1; b = 2; c = 3; } ↵
{ a = 1; b = 2; c = 3; }
$ nix repl
Welcome to Nix 2.17.1. Type :? for help.
nix-repl> ↵
nix-repl> { a = 1; b = 2; c = 3; } ↵
{
a = 1;
b = 2;
c = 3;
}
在 REPL 之外,我可以通过 来完成此操作nixfmt < <(echo "{ a = 1; b = 2; c = 3; }")
,所以我的想法是,如果我可以以某种方式实时预处理 REPL 的所有输出,我可以有条件地应用格式...
我尝试过以多种不同的方式使用unbuffer
, stdbuf
, socat
, 管道,但在我的所有尝试中,要么 STDIN 消失,直到运行下一个命令,根本不显示任何内容,要么 TAB 补全中断。因为有太多不同的答案,我不知道该真正深入探讨哪个。也许我只是错误地使用了这些工具,也许这些工具甚至不是正确的工具,或者如果不实际修改 REPL 二进制文件,这是不可能的。如果有人指出正确的方向,我将不胜感激。
答案1
nix repl
似乎没有实现执行此操作的方法。所有 repl 输出都转到标准输出。
您要么必须构建一个程序,对nix repl
来自 stdout 的输出进行后处理,以便以标记开头的行之间的所有内容nix-repl>
都会传递到nixfmt
或将其构建到 Nix 的 repl 代码本身中。
考虑到前者是多么的老套,后者可能会更可取。