web-dev-qa-db-ja.com

以前のコマンドを(実行せずに)変更して変更する方法は?

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

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

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

14
Arturas M
!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'

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

21
Michael Durrant

ヒッティング CtrlR (これは、emacsのコメント内で@gnpが動いたときの逆インクリメンタル検索キーバインディングです)、ターミナルで特定のコマンドの履歴を検索できます。コマンドが表示され、実行前に編集できます。次のようなものが表示されます。

enter image description here

ソース

12
Hamza Abbad

fcコマンドはあなたが望むことをします

fc -l <number>は、その番号周辺のコマンド履歴を一覧表示します

fc <number>は、そのコマンドラインエントリをvim(またはデフォルトのエディタが私が想定しているものであれば何でも)で開くので、それを編集でき、:wqを使用すると、上矢印。

7
Gravy

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

7
adonis

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

fc -ln -1
4
Meow