web-dev-qa-db-ja.com

履歴コマンドを実行せずにコマンドラインに入力する

!nを使用します。ここで(n)は、history | lessで見つけたコマンドプロンプトで実行する履歴ファイルの行を実行するための行番号です。

しかし、手動で変更したいコマンドライン履歴イベントがあります。コマンドラインに履歴イベントの内容を実際に実行せずに挿入して、変更してReturnキーを押すにはどうすればよいですか?

ベスト、

59
Vass

コマンドを履歴の置換後に実行するのではなく出力するように要求するには、:pmodifier を追加します。 !42:p。結果のコマンドも履歴に入力されるので、 Up 編集します。

histverifyオプション セット(shopt -s histverify)を持っている場合は、いつでも履歴置換の結果を編集できます。

fc builtin を使用すると、履歴の拡張へのアクセスが制限され(Word指定子なし)、外部エディターで前のコマンドを編集できます。

!prefixを使用すると、prefixで始まる最後のコマンドを参照でき、!?substringを使用すると、substringで始まる最後のコマンドを参照できます。探しているものがわかっている場合は、history | lessよりも大幅に時間を節約できます。

以前の履歴を検索する別の方法は、インクリメンタル検索です。押す Ctrl+R そして、あなたが探しているものの部分文字列を入力し始めます。押す Ctrl+R これまでの検索文字列の出現に移動し、 Ctrl+S あなたが行き過ぎた場合。以外のほとんどのキー Ctrl+R、 Ctrl+S、 Backspace 通常の文字はインクリメンタル検索を終了し、通常の効果があります(たとえば、到達した行にカーソルを移動する矢印キー、 Enter コマンドを実行します)。

別の小さなもの: Alt+#

現在の行をコメント化し、履歴バッファに移動します。

したがって、コマンドラインをアセンブルしていて、暫定コマンドを発行する必要がある場合は、たとえば、ファイルを見つける、あなたはちょうどヒット Alt+#、他のコマンドを発行し、履歴を上に移動して、コメントを外して続行します。

15
Rahul Patil

マジックスペースを使用して、Enterキーを押す前に履歴を拡張できます。 .inputrcで、空間を魔法の空間にマッピングします。

$if Bash
     Space: magic-space
$endif

これで、履歴指定の後にスペースを入力すると、すぐに展開されます。編集する場合にも便利です。

7
Cascabel

デフォルトでhistory-expand-lineにバインドされている Alt+^ コマンドを見てください。それはあなたが編集できるインプレースの行を展開します。

7
Alex Barrett

Ctrl+rを使用すると、履歴を検索できます。

pbm@tauri ~ $ 
(reverse-i-search)`xran': xrandr -o normal

見つけたコマンドは編集できます...


私はあなたが必要なものを正確に見つけたと思います:shopt -s histverifyを実行し、次に!nコマンドを使用したいときは実行されず、コマンドラインにのみ配置されます...

4
pbm

私はしばしばこれが欲しかった。 csh(およびtcsh)を使用したとき、私は慣用句を持っていました:
!:88*:p

このイディオムは、現在のコマンドラインで入力している場所(通常は最後)に、前のコマンドの「Word 88から最後のWordまで」を挿入します。 cshでは、そのような式が単語を生成しないことはエラーではありません。つまり、Word 88も、それに続くものも必要ありません。 Word 88がない場合、これは入力されているコマンドの最後に単語を追加せず、結果のコマンドラインを実行せずに履歴にプッシュします。

おそらくご存知のとおり、
*! (!!や!-1など)は前のコマンドです。
*:88はWord 88(最初のWord-通常はコマンド-)であり、cshはそのようなWordが存在することを要求しますが...
*:88 *はWord 88で始まるすべての単語であり、cshではWordが存在する必要はありません。
*:pは印刷を意味しますが、コマンドラインは実行しません。
:pの有無にかかわらず、コマンドラインはコマンド履歴に追加されます。

「88なんで?」あなたは疑問に思いますか? *と同じキーなので必要になります。コマンドが長い場合、おそらく!:888 *:pが必要です。申し訳ありませんが、これはbash AFAIKでは機能しません。バッシュは単にbash: :88*: bad Word specifier

面白い事実:コマンドは通常最初にする必要はありません。
> /tmp/foo echo My command is Word 3
はbashおよびcshで有効です。

1
W Dean Stanton

私は通常使用します Ctrl+r 検索してから Ctrl+e 実行せずに行の終わりに移動します。

0
nikc