Up以前のコマンドを反復処理するために使用できることを知っています。最後のコマンドの実行には、単にUp+が含まれEnterます。しかし、私はで多くの時間を過ごすので、Happy Hacking Keyboardを買うことを考えていましたvim
。
このキーボードには矢印キーがありません。このような動作を実現する方法を知る唯一の方法は、Ctrl+ Rを押して前のコマンドを繰り返し始めることです。
UNIX端末で矢印キーなしでUp+ をエミュレートする簡単な方法はありEnterますか?
Up以前のコマンドを反復処理するために使用できることを知っています。最後のコマンドの実行には、単にUp+が含まれEnterます。しかし、私はで多くの時間を過ごすので、Happy Hacking Keyboardを買うことを考えていましたvim
。
このキーボードには矢印キーがありません。このような動作を実現する方法を知る唯一の方法は、Ctrl+ Rを押して前のコマンドを繰り返し始めることです。
UNIX端末で矢印キーなしでUp+ をエミュレートする簡単な方法はありEnterますか?
回答:
とcsh
または任意のシェル実行csh
様ヒストリ置換(tcsh
、bash
、zsh
):
!!
それからEnter。
または、代わりに:
!-1
それからEnter。
またはCtrl+ P、Enter
また、それを注意!!
して!-1
(それは遅すぎるかもしれないとき)あなたがそれらを実行するまで、あなたのための自動展開しません。
使用している場合bash
、あなたは置くことができますbind Space:magic-space
に~/.bashrc
、次に押すと、Spaceあなたが実行する前にそれらを点検することができ、インラインそれらを自動的に拡大するコマンドの後。これは、少し前に実行されたコマンドからの履歴展開に特に役立ちます。たとえば、で!echo
始まる最後のコマンド実行をプルしecho
ます。マジックスペースを使用すると、コマンドを実行する前にプレビューできます。
これはbindkey ' ' magic-space
、tcsh
またはで行うのと同等ですzsh
。
magic-space
それは一つの甘いオプションです!
histverify
オプションもありますshopt
。これにより、結果を評価し、それを実行するかどうかを決定できます。
!!
は、その拡張をインプレースで使用することです。たとえばsudo !!
。
コマンドライン編集機能を備えたほとんどのシェルは、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
。次に、たとえば、次のことができます
!!
)。マイナスキー-は、「上に移動」コマンドとしても機能します。!-12
)。vi
あなたが使用する必要がありますので、コマンドモードvi
(例えば、編集コマンドをI、A、C、R実際に履歴からのコマンドに追加する、またはその小文字の対応の一つ)。sudo !!
です。!-2:- !$
。(残念ながら、名前付きバッファをサポートしていないようです。)vi
トリックは素晴らしかったです!!!
delete
ZtlでCtl + u を取得
私のお気に入りはCTRL+ Pthen CTRL+O
これはデフォルトで機能し、追加の設定は不要です。^ Pは最後のコマンドに切り替え、^ Oは現在の行を実行します
CTRL+ Oは何度でも使用できることに注意してください
^J
ls
、pwd
以前に行ったことがある場合でも、空白行をエコーするだけです。
承知しました!あなたは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、すでに何も変更せずに動作するはずです。
すべてのPOSIXシェルが実装して、ユーザーの携行用オプション(含んをksh
、zsh
、bash
、yash
)、あなたも使用できるfc
コマンドを:
fc -e : -1
例を参照してください。
$ echo "hello"
hello
$ fc -e : -1
echo "hello"
hello
Jonathan Lefflerによるhistoryの回答からの一連のコマンドの実行の詳細。
私は頻繁にスーパーユーザーとしてコマンドをやり直す必要があると思うので、
sudo !!
そもそもタイプsudo
するのを覚えているかのように前のコマンドをやり直します。
ksh
シェルは、デフォルトの別名があるr
最新のコマンドを繰り返します。にバインドされていfc -s
ます:
alias r='fc -s'
興味深いことに、組み込みのbash
ドキュメントfc
(help fc
、およびマニュアル自体にもあります)にも言及されていますが、そのシェルのデフォルトのエイリアスではありません。
これで使用する便利なエイリアスは
r='fc -s'
であるため、入力すると最後のコマンドが実行され、入力をr cc
開始するcc
と最後のコマンドがr
再実行されます。
ではbash
、履歴の展開をで無効にしている場合でも機能しset +H
ます。
内zsh
殻があり、r
同じであることが実証されている組み込みfc -e -
。
この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"
vi `!!`
。非常に便利
!n
ターミナルでn番目のコマンドを実行するために使用できます。ここで、「n」はhistory
コマンドの行番号です。
!?
が最後のコマンドに展開されますか?混同していないのは確かですか!!
(他の回答で既に説明しました)。
最後のコマンドを要求できるいくつかのレイヤーがあります。
行エディタ(コマンドを入力する場所)は、ksh、bashのライブラリreadline、およびzshのライブラリzleによって直接提供されます。ダッシュなどの他のシェルには、このキーを理解するための編集ライブラリがない場合があります(--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
または、より古く、したがって通常はより移植性の高いfc
コマンド(直接再実行):
fc -e - -1
または、もっと単純かもしれfc -s -1
ませんが、zshはfcのそのようなオプションを受け入れません。
コマンドのみを印刷する場合は、次を使用しますfc -nl -1 -1
。
編集するにFCEDIT
は、テキストエディター(ex、ed、emacs、viなど)に設定し、fcを直接使用しますfc -1
。