矢印キーを使わずに前のコマンドを繰り返すには?

矢印キーを使わずに前のコマンドを繰り返すには?

前のコマンドを繰り返すために使用できることを知っていますUp。走る最後コマンドにはUp+のみが含まれますEnter。しかし、もともと購入したかったのはハッピーハッカーキーボードなぜなら私はで多くの時間を費やしているからですvim

このキーボードには矢印キーがなく、この動作を実行する方法を知る唯一の方法はCtrl+を押して前のRコマンドを繰り返し始めることです。

Up矢印キーを使用せずにUNIX端末で+をシミュレートする簡単な方法はありますか?Enter

答え1

履歴の置き換え(、、、)などを実装するシェルをcsh使用してください。cshtcshbashzsh

!!

次にEnter


またはまたは:

!-1

次にEnter


またはCtrl+ PEnter


魔法の空間

また、実行するまで、および!!は自動的に拡張されません!-1(この時点では遅すぎる可能性があります)。

を使用している場合は、コマンドを入力して押すと自動的にインラインに展開されるため、実行前に確認できますbash。これは、しばらく前に実行されたコマンドの履歴拡張に特に役立ちます。たとえば、で始まる最後のコマンドはpulledです。 Magic Spaceでは、コマンドを実行する前にプレビューできます。bind Space:magic-space~/.bashrcSpace!echoecho

bindkey ' ' magic-spacetcshこれはまたはの役割と同じですzsh

答え2

コマンドライン編集機能を備えたほとんどのシェルはEmacsキーバインディングをサポートしています。 (非常に小さなサブセット)

Up     Ctrl+P
Down   Ctrl+N
Left   Ctrl+B
Right  Ctrl+F
Home   Ctrl+A
End    Ctrl+E
Delete Ctrl+D

set -o viあるいは、viコマンドを使用してシェル起動ファイル(例:)に追加して、シェルを編集モードに設定することもできます~/.bashrc。たとえば、次のことができます。

  • EsckEnter 前のコマンドを再実行するために使用されます(と同じ!!)。マイナスキーは-「上へ移動」コマンドとしても機能します。
  • 最初の12個のコマンドを再実行するには、EsckkkkkkkkkkkkEnter またはを使用します(と同じ)。Esc12kEnter!-12
  • Escとアクションコマンドを使用し(つまり、k適切に繰り返す)、その後編集するそこに見つけることができるbashコマンドライン。それでもコマンドモードになっているため、実際にコマンドを履歴に追加するには、編集コマンド(、、、または対応する小文字のいずれか)をvi使用する必要があります。たとえば、と同じです。viIACR
    EsckisudoSpaceEntersudo !!
  • 上級ユーザーの場合:コピーすることもできます(ワイank)テキストを1行入力して貼り付けます(ut)他のものの上に置くと!-2:- !$。 (残念ながら、名前付きバッファをサポートしていないようです。)

答え3

私が一番好きなのはCTRL+P次のCTRL+O

デフォルトでは追加の設定は不要です。 ^Pは最後のコマンドに切り替え、^Oは現在行を実行させます。

CTRL+はO必要に応じて複数回使用できます。

答え4

実装する POSIX シェルを使用します。ユーザーの移植性オプション(ksh、、、zshbash含む)がある場合は、次のコマンドを使用することもyashできます。fc

fc -e : -1

例を見てください。

$ echo "hello"
hello

$ fc -e : -1
echo "hello"
hello

詳しくは履歴から一連のコマンドを実行します。ジョナサン・レプラ(Jonathan Leffler)の答えです。

関連情報