私はしばしばこのような状況にあります。コマンドを入力していますが、コマンドを完了する前に他の点を確認してください。
ある種のサブシェルを開き、これまでの現在の入力を覚えてから、このサブシェルを終了すると元の場所に戻る方法はありますか?
$ mylongcommand -n -e <SOME KEY COMBINATION WHICH OPENS A SUBSHELL>
$ date
...
$ exit
$ mylongcommand -n -e <BACK TO WHERE I WAS>
私はそれを使用していますzsh
答え1
私は通常Ctrl+を使用してU現在の行を消去してバッファに保存します。そこから私は以前にやらなければならなかったことを始めましたmylongcommand
。その後、準備ができたらCtrl+を使用してプロンプトに再度Y貼り付けます。mylongcommand
答え2
EscQコマンドバッファを保存して新しいコマンドを入力できるキーの組み合わせがあります。コマンドを実行した後、バッファには以前に入力した内容が含まれます。これを完了する前に別のコマンドを実行する必要がある場合は、EscQそのコマンドを再入力できます。
(私はサブシェルを押した後に開こうとしませんでしたEscQ。)
バラよりhttp://zsh.sourceforge.net/Intro/intro_10.html"esc-q"を検索してください。
答え3
Ctrl私の解決策は間違いなく技術レベルが低くて愚かですが、+ A、、を#タップするなど、すでに慣れているキーシーケンスに依存していますENTER。
#
これは、行の先頭に a を挿入してコメントにし、実行してコマンド履歴にプッシュする効果があります。その後、補助コマンドを入力し、コマンド履歴をコメントアウトされたコマンドまでスクロールし、#
必要に応じてコマンドを削除して完了できます。
答え4
Ctrl+と入力して、Z入力しているコマンドを「一時停止」し、別のコマンドを入力します。コマンドを実行した後(またはCtrl+で中断C)、保留中のコマンドが編集用に返されます(カーソル位置も記憶されます)。便宜上Ctrl、+を入力してもコマンドラインが空の場合、Zそのキーは組み込みbg
コマンドを呼び出します。したがって、Ctrl+を2回押すと、Z実行中のコマンドがバックグラウンドに直接送信されます。
fancy-ctrl-z () {
emulate -LR zsh
if [[ $#BUFFER -eq 0 ]]; then
bg
zle redisplay
else
zle push-input
fi
}
zle -N fancy-ctrl-z
bindkey '^Z' fancy-ctrl-z
(以前に投稿した何かを確認するときに半分だけ入力されたコマンドを覚えておいてください主にそれほど便利に何もできないbashソリューションがあります。これはもう少し進化したバージョンです。M-q
への組み込みバインディングpush-line
.)
これはサブシェルを実行しません。前のコマンドを「一時停止」した後に入力したコマンドは、同じシェルで実行されます。コマンドを入力した後に別のディレクトリで実行しようとしたことがわかったら、現在のディレクトリを変更するなどの操作を実行できます。新しいシェルインスタンスを実行するには、zsh
キーバインディングを介して実行できますが、これは特に役に立つとは思いません。