Zshでは、私は履歴を検索できることを知っています Ctrl+r。ただし、多くの場合、プロンプトで直接コマンドを入力し始めますが、履歴を検索する必要があることに気付きます。打ったとき Ctrl+r、次のような空白の履歴検索プロンプトが表示されます。
プロンプトにテキストがあるが、履歴検索プロンプトにはないことに注意してください。プロンプトに既にあるテキストで履歴検索を開始するには、次のようにします。
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
別の便利なオプションは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
私はこのエイリアスを私のドットファイルに入れました。
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
と入力し、エスケープシーケンスを検索するキーを押します。
https://github.com/zsh-users/zsh-history-substring-search でスクリプトを使用することをお勧めします
以前に入力したコマンドの任意の部分を入力して、 Up そして Down 一致するコマンドを循環するキー。
特定のシステムで機能する場合と機能しない場合がある"$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]}"
)
問題は、このプラグインを入力するコマンドごとに、受け入れられるかどうかのいくつかの提案が表示されることです。試して、フィードバックをお寄せください。
プラグインがなければ、押すことができます Ctrlr 履歴で逆検索を実行するには、一致したコマンドの入力を開始するとすぐに、候補として表示されます。
vi-mode プラグインを使用します。そして、私の〜/ .zshrcには次のバインディングがあります:
bindkey "^P" history-beginning-search-backward
bindkey "^N" history-beginning-search-forward
これにより、^P
および^N
テキストを入力しない場合は通常の後方検索および前方検索として、入力する場合はフィルター検索として。
代わりに zaw を使用できます。これにより、検索が完全に優れたマルチキーワードスーパー検索に置き換えられ、問題も修正されます。検索履歴は、zawが検索できるものの1つにすぎません。
小さい ここにイントロ/ディスカッション
「サブストリング」検索の方が便利であることに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」コマンドを使用した場合)。
これは私(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
これを徹底的に楽しんでいます。
私は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