変更するために(実行せずに)前のコマンドを呼び出す方法は?


14

最後のコマンドを実行せずに取得できるトリックを思い出せません。

上矢印キーを押してコマンドを変更するときに!1255コマンドにアクセスできるようにしたいとしましょう。それでは、コマンドを呼び出して、コマンドラインに表示されるが実行されず、その後矢印キーでアクセスできるようにするコツは何ですか?

エコーを入れてみましたが、コマンドの前にエコーがあります。正しく行う方法を覚えていません。


4
「:P」のように「!1255:P」私は適切にあなたの要求を理解していれば、おそらくただの接尾辞試す
テオフラストス

@Theophrastusはい、正確に、私はこれを忘れていました:p部分とそれを見つけるためにグーグルで正しいキーワードを取得することができなかったようです...ありがとう。
アルチュラスM

回答:


21
!1255:p

これをします

!履歴のリコール
1255は行番号の
:p印刷ですが実行されません

次に、上矢印キーを使用して、前の(実行されていない)コマンドを取得し、必要に応じて変更できます。

私はよくこれをhg( "History Grep")-私のお気に入りのエイリアスと組み合わせます。

$ alias hg  # Maybe use hgr instead if you are a Mercurial CLI user.
alias hg='history | tail -200 | grep -i'

これは、大文字小文字に関係なく、最近の履歴行でテキストを検索し、次のように使用されます。

特定のファイルを編集するために最近のviコマンドを検索し、それらの1つを再利用して同じファイルを編集しますが、ファイル拡張子は異なります。

$ hg variables
 6153  vi Variables/user-extensions.js 
 6176  vi Variables/user-extensions.js 
 6178  vi Variables/user-extensions.js 
 6190  vi Variables/user-extensions.js 
 6230  hg variables
$ # Notice the difference in case with V and v is ignored
$ !6190:p
vi Variables/user-extensions.js 
$ ["up-arrow"]
$ vi Variables/user-extensions.[now change .js to .html]

またhga、私の履歴全体を検索するように定義します( "History Grep All"):

$ alias hga
alias hga='history | grep -i'

しかし、私の履歴は(意図的に)非常に大きく、出力が多すぎるため、後で端末内のページをスクロールバックするのに影響するため、あまり使用しません。


2
これhgMercurialのCLIです。
-usandfriends

1
いいですね。回答に追加されました。
マイケルデュラント

12

打撃Ctrl+をR(コメントで合図@gnpとして結合Emacsの逆インクリメンタルサーチキーです)、端末にすると、特定のコマンドのhistroryで検索することができます。コマンドが表示され、実行する前に編集できます。次のようなものが表示されます。

ここに画像の説明を入力してください

ソース


1
ありがとう!本当に私の質問に対する直接的な答えではありませんが、私はこれを知らなかったので、本当に便利だと思います。どうもありがとうございました!
アルトゥラスM

1
また注目すべきは、Ctrl + Rはemacsの逆インクリメンタル検索です。多くのemacsキーバインドは、多くのGNUツールで機能します:Ctrl + A、Ctrl + E、Ctrl + K、Ctrl + Yなど。
GnP

@gnp情報をありがとう、私はそれを知りませんでした。
ハムザアブバッド

私にかかった長い二つの鍵の事を学んだ後、CTRL-Rで快適に時間を。1.入力中は出力を無視します。2.目的のコマンドに十分に一意に入力できる十分な知識があることを確認してください
マイケルデュラント

7

fcコマンドが何をしたいん

fc -l <number> その番号の周りのコマンド履歴をリストします

fc <number>コマンドラインエントリvim(または既定のエディターと思われるもの)を開くので、編集することができ:wq、上矢印で使用できるようになります。


7

bash Ctl+alt+eではシェルが展開されるため、!1255この組み合わせを入力してから押すと、現在の行が履歴エントリ1255の内容に置き換えられます


Ubuntuで私のためにそれをしませんでした
マイケルデュラント

@ MichaelDurrant、14.04(kubuntu)で試してみたところ、うまくいきました。man bashとして文書化されていshell-expand-lineます。gnome-terminalのショートカットセットがあるかもしれません。
アドニス

@adonis私はこれを知らなかった、本当にありがとう、本当にそれも私が要求していたことをする。そして確かに、私はこの機能からより多くの用途を見つけることができます。驚くばかり!ありがとう!
アルトゥラスM

4

実行の代わりにリストを指定しながらfcコマンドを使用したい(-l)

fc -ln -1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.