回答:
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
Enter
と、コマンドを実行する前に画面がクリアされます。私にとってはこのように機能します。preexecフックは、対話型コマンドごとに実行されます。コマンドが組み込みコマンドであるか外部コマンドであるか、または多くのコマンドであるかは関係ありません。
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return;
は、PROMPT_COMMANDが実行されており、実際のコマンドの後にトラップされているという問題が完全な場合は、何もせずにこの行を追加する必要があり ます。また、なぜlocal this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
ここにいるのか教えてもらえ ますか?
history -1
は、前に履歴番号を付けて最後のコマンドラインを出力します。sedフィルターは履歴番号を取り除きます。
bind 'RETURN: "\e[1~clear; \e[4~\n"'
その後、押すreturnだけ\n
ではなく、押すたびに行の先頭に移動し、テキストclear;
を入力し、最後に移動し\n
て期待どおりに入力します。
clear
実行できます。
clear
、コマンドとコマンド出力が消えないうちに実行されることです。ただし、プロンプトが表示された場合は実行されます。
clear;
は各余分の出力に挿入し\n
ます。
bind "\"\\eOQ\":\"\e[1~ls;#\\n\""
ことがあるため、この例では、先頭に移動し、ls;#
コメントを入力して、ls
コマンドを適切に実行します!THX!
今日私が尋ねた質問から(ユーザー@aecolleyの回答に感謝):
bind '"\C-m": "\C-l\C-j"'
\C-m
、Enterキーをシミュレートする\C-l
シミュレートするCtrl+l
ことは明らかだとして\C-j
ある「改行やインデント」、コマンドは、Ctrlキーを押しながらL&はCtrl + jにEnterキーを結合させ
GNU bash、バージョン3.2.53(1)-release(x86_64-apple-darwin14)で動作し、このスレッドの他の回答は動作しません。また、これは履歴を他のコマンドごとに「クリア」コマンドで汚染しません。