zsh preexec命令修改

前端之家收集整理的这篇文章主要介绍了zsh preexec命令修改前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法修改即将执行的命令?
我想将输出重定向文件,并将其打印在终端上.
我发现ls> file.txt |猫做的工作,所以我想添加> file.txt | cat到任何即将执行的命令.
有没有更好的方法重定向文件并打印到终端?我正在尝试制作记录器.

解决方法

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

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

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

下一部分是用新函数实际替换默认的回车键行为.我们要替换的默认行为是accept-line函数,如果我们查看zle documentation,您将看到accept-line绑定到^ J和^ M.

要将此函数绑定到这些字母,首先需要将其转换为小部件:

zle -N log_and_accept_widget log_and_accept

然后你可以绑定它,替换旧的行为:

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

我想你应该小心这一点.经过一段时间的测试后,我很快就开始不喜欢它了.

猜你在找的Linux相关文章