仅在需要时考虑清除

仅在需要时考虑清除

我想将 bash 配置为clear每次在终端中键入某些命令时(在执行命令之前)执行命令。我怎样才能做到这一点?

我正在使用 Debian Linux。

答案1

Bash 有一个预命令钩子。有点。

preexec () {
  clear
}
preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return                     # do nothing if completing
    [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
    local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`; # obtain the command from the history, removing the history number at the beginning
    preexec "$this_command"
}
trap 'preexec_invoke_exec' DEBUG

答案2

bind 'RETURN: "\e[1~clear; \e[4~\n"'

之后,每次您按下return而不是仅仅写入时,\n它都会移动到行首,输入文本clear;,然后移动到末尾\n并按预期输入。

答案3

来自我今天问的一个问题(归功于用户@aecolley的回答):

bind '"\C-m": "\C-l\C-j"'

模拟\C-m‘Enter’键,很明显,\C-l模拟的是“换行和缩进”,所以该命令将 Enter 键绑定到 Ctrl+l & Ctrl+jCtrl+l\C-j

适用于 GNU bash,版本 3.2.53(1)-release (x86_64-apple-darwin14),而该线程上的其他答案则不适用于。此外,这不会像其他命令那样用“清除”命令污染历史记录。

答案4

仅在需要时考虑清除

cb4() {
  preexec () {
    clear
  }
}

这使用了一个名为 的钩子preexec,已确认也适用于 zsh

然后,您希望在运行每个命令之前自动清除任何会话:cb4

如果你确定你总是想在每个上下文中清除

preexec () {
  clear
}

如果您确实想重置终端

将该词替换cleartput reset

tput是可选的,但可以加快重置过程

相关内容