私は使用できることを知っています Up 以前のコマンドを繰り返す。 lastコマンドを実行すると、 Up + Enter。しかし、vim
に多くの時間を費やすため、 Happy Hacking Keyboard の購入を考えていました。
このキーボードには矢印キーがありません。この種の動作を取得する方法を知る唯一の方法は、 Ctrl + R そして、私の前のコマンドを繰り返し始めます。
エミュレートする簡単な方法はありますか Up + Enter 矢印キーのないUNIX端末では?
csh
またはcsh
のような履歴置換を実装する任意のシェル(tcsh
、bash
、zsh
):
!!
その後 Enter。
または または :
!-1
その後 Enter。
または Ctrl+P、 Enter
また、!!
と!-1
は、実行するまで(手遅れになる可能性がある場合)、自動拡張されません。
bash
を使用する場合は、bind Space:magic-space
を~/.bashrc
に入れて、 Space コマンドがインラインでそれらを自動展開した後、実行前にそれらを検査することができます。これは、少し前に実行されたコマンドからの履歴拡張に特に役立ちます。 !echo
は、echo
で始まる最後のコマンド実行をプルします。マジックスペースを使用すると、コマンドを実行する前にプレビューできます。
これは、tcsh
またはzsh
でbindkey ' ' magic-space
を実行するのと同じです。
コマンドライン編集機能を持つほとんどのシェルは、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
をシェルのスタートアップファイル(~/.bashrc
など)に追加して、viコマンド編集モードを使用するようにシェルを設定することもできます。次に、たとえば、
!!
と同じ)。マイナスキー - 「上に移動」コマンドとしても機能します。!-12
と同じ)。vi
コマンドモードであるため、vi
編集コマンドを使用する必要があります(例: I、 A、 C、 R、またはそれらの小文字のいずれか)を実際に履歴からコマンドに追加します。Sudo !!
と同等です。!-2:- !$
に匹敵する結果を得ることができます。 (残念ながら、名前付きバッファーをサポートしていないようです。)私のお気に入りは CTRL + P その後 CTRL + O
これはデフォルトで機能し、追加の設定は必要ありません。 ^ Pでは最後のコマンドに切り替え、^ Oでは現在の行を実行できます
ご了承ください CTRL + O 何度でも使用できます
承知しました! vi
キーバインドに慣れているので、それに応答するようにシェルを設定してみませんか? bash
の場合、これを~/.inputrc
:
set editing-mode vi
Bashのインスタンスを実行しても、ファイルは再度読み込まれないため、ログアウトして再度ログインします。
zsh
はこれを検出します。起動スクリプトがbindkey
ともしあなたの$EDITOR
環境変数にvi
が含まれていることが検出された場合、vi
キーバインドが自動的に有効になります。強制する必要がある場合は、これを~/.zshrc
:
bindkey -v
その後、 ESC 通常どおりコマンドラインを入力し、 k そして j 上下に移動します。
[〜#〜] also [〜#〜]:ほとんどのシェルのデフォルトのシェルバインディングはemacsバインディングなので、実際には Crtl-P そして Ctrl-N 何も変更しなくても、すでに機能するはずです。
User Portabilityオプション(ksh
、zsh
、bash
、 yash
)、fc
コマンドを使用することもできます:
fc -e : -1
例を見る:
$ echo "hello"
hello
$ fc -e : -1
echo "hello"
hello
詳細は 履歴から一連のコマンドを実行 のジョナサン・レフラーによる答え。
スーパーユーザーとしてコマンドを頻繁にやり直す必要があるので、
Sudo !!
最初の場所でSudo
と入力したことを覚えているかのように、前のコマンドをやり直します。
すべてのMac iterm2ユーザーの場合:
バインドできます ⌘+R 0x0C 0x10 0x0d
。これにより、ターミナルがクリアされ、最後のコマンドが実行されます。
csh
またはcsh
に似た履歴置換(tcsh
、bash
、zsh
)を実装するシェルでは、!<beginning of command>
も使用できます<beginning of command>
で始まる最後のコマンドを呼び出す。
たとえばあなたが走った場合
$ tail file.txt
$ less otherfile.txt
$ !ta
!ta
はtail file.txt
を実行します
ksh
シェルには、最新のコマンドを繰り返すデフォルトのエイリアスr
があります。 fc -s
にバインドされています:
alias r='fc -s'
興味深いことに、bash
組み込みのfc
ドキュメント(help fc
、およびマニュアル自体にも)はこれについても言及していますが、そのシェルのデフォルトのエイリアスではありません。
これに使用する便利なエイリアスは
r='fc -s'
です。したがって、r cc
と入力すると、cc
で始まる最後のコマンドが実行され、r
と入力すると、最後のコマンドが再実行されます。
bash
では、set +H
で履歴の展開をオフにしている場合でも、これは機能します。
zsh
シェルには、fc -e -
と同じであると記載されているr
ビルトインがあります。
fc
ユーティリティは POSIX標準ユーティリティ です。
tl; dr !!
は、現在のコマンドに最後のコマンドを追加するだけです。 <backtick>!!<backtick>
は最後のコマンドを実行し、現在のコマンドに出力を追加します。
実際には2つのバリアントがあります。
2つの例を紹介しましょう。
例1
$ mkdir /test
mkdir: /test: Permission denied
$ Sudo !!
Sudo mkdir /test
Password:
上記のように、私はコマンドを実行しており、基本的に最後のコマンドを追加しています。
別のバリエーション
例2
$ find ~/Documents "test.txt"
/Users/<user>/Documents/test.txt
$ vi `!!`
# Opens test.txt. But if you do
$ vi !!
vi find ~/Documents -name "test.txt"
VIM - Vi IMproved 8.1 (2018 May 18, compiled Oct 29 2018 06:55:58)
Unknown option argument: "-name"
More info with: "vim -h"
!n
ターミナルでn番目のコマンドを実行します。ここで、「n」はhistory
コマンドの行番号です。
私が良いxtermエミュレータを使用しているとき。 PuTTY、私のお気に入りの続行方法は、改行を含むコマンドを選択し、それをクリップボードにコピーしてから、マウスを右クリックして貼り付けることです。これにより、シングルクリックでコマンドが繰り返されます。これは、セミコロンで区切られた一連のコマンドでも正常に機能します。
最後のコマンドを要求できる層がいくつかあります。
ラインエディター(コマンドを入力する場所)は、ksh、bashのライブラリreadline、およびzshのライブラリzleによって直接提供されます。 dashなどの他のシェルには、このキーを理解するための編集ライブラリがない 場合があります(--with-libedit
オプションを有効にしてコンパイルした場合を除く)。
Ksh、bash、zshでのこの作業:
Ctrl-P #Emacsモード(前)
Ctrl-N #Emacsモード(次へ)
ESC-k #viモードESCでコマンドモードに、kでアップ
ESC-j #viモードESCでコマンドモードに、jでダウン
多くのシェルによって提供される履歴システムは、いくつかのショートカットの拡張を可能にします:
!! # bash and zsh, may be provided by `alias \!\!='fc -e -'` in ksh.
!-1 # bash and zsh only
履歴コマンドを取得できるコマンドがいくつかあります。
かなり冗長なコマンドのように(印刷のみ):
history 2 | head -n-1
またはolderのため、通常はより移植性の高いfc
コマンド(直接再実行):
fc -e - -1
または、おそらくより単純なfc -s -1
ですが、zshはfcにそのようなオプションを受け入れません。
コマンドをprintだけにしたい場合は、fc -nl -1 -1
を使用します。
編集するには、FCEDIT
をテキストエディター(ex、ed、emacs、viなど)に設定し、fcを直接使用します:fc -1
。
Historyと入力し、実行して使用するコマンドの前の番号を書き留めます!number
!-1を使用することもできます(1は最後に実行するコマンドであり、取得したカウント数に置き換えます)最後に実行されたものを1として下から実行した場合)