gpt4 book ai didi

zsh preexec 命令修改

转载 作者:行者123 更新时间:2023-12-04 15:01:40 24 4
gpt4 key购买 nike

有没有办法修改即将执行的命令?
我想将输出重定向到文件,并在终端上打印。
我发现 ls > file.txt | cat完成这项工作,所以我想补充一下 > file.txt | cat任何即将执行的命令。
有没有更好的方法来重定向到文件并打印到终端?我正在尝试制作一个记录器。

最佳答案

您可以更改执行行时执行的操作以更改将要执行的命令。这可以通过定义一个函数来完成,然后将其绑定(bind)到回车键。

让我们首先定义一个可以添加 '> file.txt | 的函数。 cat' 以任何命令结尾:

function log_and_accept {
BUFFER="$BUFFER > file.txt | cat"
zle accept-line
}

下一部分是用您的新功能实际替换默认的输入键行为。我们要替换的默认行为是接受行功能,如果我们查看 zle documentation , 你会看到 accept-line 绑定(bind)到 ^J 和 ^M。

要将此函数绑定(bind)到这些字母,您首先需要将其转换为小部件:
zle -N log_and_accept_widget log_and_accept

然后你可以绑定(bind)它,替换旧的行为:
bindkey '^J' log_and_accept_widget
bindkey '^M' log_and_accept_widget

现在,您将为您执行的每个命令扩展该命令。每个 cd、ls、vim 等。因此,我建议您定义更多函数来实际打开和关闭它:
function turn_on_logging {
bindkey '^J' log_and_accept_widget
bindkey '^M' log_and_accept_widget
}
function turn_off_logging {
bindkey '^J' accept-line
bindkey '^M' accept-line
}

zle -N turn_on_logging_widget turn_on_logging
zle -N turn_off_logging_widget turn_off_logging

bindkey '^P' turn_on_logging_widget
bindkey '^O' turn_off_logging_widget

我认为你应该小心这个。经过一番测试后,我很快就开始不喜欢它了。

关于zsh preexec 命令修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12580675/

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