web-dev-qa-db-ja.com

zshのプロンプトで入力済みのテキストを含む履歴を検索するにはどうすればよいですか?

Zshでは、私は履歴を検索できることを知っています Ctrl+r。ただし、多くの場合、プロンプトで直接コマンドを入力し始めますが、履歴を検索する必要があることに気付きます。打ったとき Ctrl+r、次のような空白の履歴検索プロンプトが表示されます。

history search Prompt not pre-filled

プロンプトにテキストがあるが、履歴検索プロンプトにはないことに注意してください。プロンプトに既にあるテキストで履歴検索を開始するには、次のようにします。

history search Prompt pre-filled

62
Sean Mackesey

zle's history-search 機能:

bindkey "^[[A" history-beginning-search-backward
bindkey "^[[B" history-beginning-search-forward

これはバインドします Up そして Down (独自のエスケープシーケンスに合わせて調整)プロンプトで既に入力されている内容に基づいて、後方および前方の履歴検索に。

したがって、「vim」と入力して、 Up、zshは、「vim」で始まるコマンドについてのみ、履歴を逆方向にたどります。

history-search-end 関数(通常/usr/share/zsh/functions/Zle/)と追加-endは、次のように各行の最後に追加します。

autoload -U history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^[[A" history-beginning-search-backward-end
bindkey "^[[B" history-beginning-search-forward-end
49
jasonwryan

別の便利なオプションはhistory | grepです

エイリアスを割り当てます。

alias hg='history | grep'

次に、hg whateverと入力して、使用したコマンドを検索できます。

$ hg chmod                                                                                                       
 1309  chmod +x rotate_files.sh 
 1385  chmod +x rotate_files_270.sh 
 1512  chmod +x testy.sh 
 1528  chmod +x act_on_2_numbers.sh 
 2142  chmod +x ~/bin/display_tmux_pane_pwd.sh
 4532  chmod +x cat_files.rb 

私はこのエイリアスを私のドットファイルに入れました。

21
Michael Durrant

oh-my-zsh を使用している場合は、plugins=(...)行にhistory-substring-searchを追加します。

それから加えて

bindkey "^[[A" history-substring-search-up
bindkey "^[[B" history-substring-search-down

source $ZSH/oh-my-zsh.shを読む行の下のどこかに。新しいターミナルを保存して起動するか、現在のターミナルでsource ~/.zshrcを実行します。

注:^[[Aは、私が使用するターミナル(キティ)やその他の多くの端末で上矢印のエスケープシーケンスです。選択したターミナルをチェックインするには、showkey -aと入力し、エスケープシーケンスを検索するキーを押します。

16
joelostblom

https://github.com/zsh-users/zsh-history-substring-search でスクリプトを使用することをお勧めします

以前に入力したコマンドの任意の部分を入力して、 Up そして Down 一致するコマンドを循環するキー。

7
number5

特定のシステムで機能する場合と機能しない場合がある"$terminfo[kcuu1]"などのハードコードされたものではなく、"$key[Up]"または"^[[A"を使用することを強くお勧めします。

その他のキーについては、/etc/zsh/zshrcをご覧ください。これは私のシステムでどのように見えるかです。 terminfoキーが定義されている可能性が高いと思います。

key=(
    BackSpace  "${terminfo[kbs]}"
    Home       "${terminfo[khome]}"
    End        "${terminfo[kend]}"
    Insert     "${terminfo[kich1]}"
    Delete     "${terminfo[kdch1]}"
    Up         "${terminfo[kcuu1]}"
    Down       "${terminfo[kcud1]}"
    Left       "${terminfo[kcub1]}"
    Right      "${terminfo[kcuf1]}"
    PageUp     "${terminfo[kpp]}"
    PageDown   "${terminfo[knp]}"
)
6
zzxyz

zsh-autosuggestions

問題は、このプラグインを入力するコマンドごとに、受け入れられるかどうかのいくつかの提案が表示されることです。試して、フィードバックをお寄せください。

プラグインがなければ、押すことができます Ctrlr 履歴で逆検索を実行するには、一致したコマンドの入力を開始するとすぐに、候補として表示されます。

5
SergioAraujo

vi-mode プラグインを使用します。そして、私の〜/ .zshrcには次のバインディングがあります:

bindkey "^P" history-beginning-search-backward
bindkey "^N" history-beginning-search-forward

これにより、^Pおよび^Nテキストを入力しない場合は通常の後方検索および前方検索として、入力する場合はフィルター検索として。

2
Slobodan Ilic

代わりに zaw を使用できます。これにより、検索が完全に優れたマルチキーワードスーパー検索に置き換えられ、問題も修正されます。検索履歴は、zawが検索できるものの1つにすぎません。

小さい ここにイントロ/ディスカッション

1
Brad Parks

「サブストリング」検索の方が便利であることにchefloは同意します。そこにはコメントできないので新しい答えを出しました。 oh-my-zshを使用し、〜/ .zshrcのplugins =(...)に「history-substring-search」を追加します。次に〜/ .zshrcをソースします。これ以上何も追加する必要はありません。 「bindkey」を使用して確認します。

"^ [OA" history-substring-search-up 
 "^ [OB" history-substring-search-down

その後、「to」と上矢印を入力すると、「history」が表示され、「to」が強調表示されます(以前に「history」コマンドを使用した場合)。

1
James

Oh-My-Zsh以外の回答

これは私(macOS上)で機能し、上/下矢印で簡単にサブストリング履歴にアクセスできます。キーバインドはあなた次第です。

部分文字列の検索履歴は、文字列で始まるコマンドにアクセスするよりも優れています。これは、ほとんどの場合、ctrl-rに似ています。グロブや正規表現の一致がない場合です。

zsh-users/zsh-history-substring-search の説明から開始

brew install zsh-history-substring-search

# add the following to .zshrc
source /usr/local/share/zsh-history-substring-search/zsh-history-substring-search.zsh
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down

これを徹底的に楽しんでいます。

1
Merlin

私はoh-my-zshを使用し、joelostblom、Jamesのサブストリングソリューションを使用しているため、.zshrcを次のように変更します(13行目で「source $ ZSH/oh-my-zsh.sh」という行を見つけます) 、その周囲のコードを変更します。)

plugins=(
  git
  history-substring-search
)

source $ZSH/oh-my-zsh.sh

bindkey -v
bindkey "^[[A" history-substring-search-up
bindkey "^[[B" history-substring-search-down
0
user3633852