複数行コマンドを編集するときにエスケープされた改行を使用すると、行を上に移動できません。
echo \
たとえば、1行を入力してをタップしてから、そのコマンドの一部をEnter編集したいとします。echo \
を押してもUp最初のコマンドラインに戻りません。
これは改行文字をラップする長いコマンドには機能しますが、改行文字をエスケープするコマンドには機能しません。
_physical_up_line() { zle backward-char -n $COLUMNS }
_physical_down_line() { zle forward-char -n $COLUMNS }
zle -N physical-up-line _physical_up_line
zle -N physical-down-line _physical_down_line
bindkey -M vicmd "R" physical-up-line
bindkey -M vicmd "N" physical-down-line
ベストアンサー1
Enter(コマンド)を押すと、accept-line
現在の行が解析され実行されるようにスケジュールされます。行の構文が不完全な場合(たとえば、echo \
またはfor x in foo
)、実行されないが既に保存されます。PS2
通常のプロンプトではなくプロンプトが表示されるため、この状態でzshを表示できますPS1
。
私が知る限り、保存された行を編集するための組み込み方法はありません。現在の行を実行せずに保存し、編集のために以前の履歴行を呼び出すことで可能でなければなりません。
前の行をインポートする最も簡単な方法は、現在の行が完了していないことを確認し(例:\
最後に入力)、それを受け入れ(押してEnter)からキャンセル(Ctrl+を押すC)です。次に、を押して、保存されたコマンド全体を単一の履歴ラインとして単一の複数のラインバッファに呼び出すことができますUp。