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


58

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

履歴検索プロンプトが事前入力されていません

履歴検索プロンプトではなく、プロンプトにテキストがあることに注意してください。プロンプトにすでにテキストがある状態で履歴検索を開始するにはどうすればいいですか?

履歴検索プロンプトが事前に入力されています

回答:


44

zleのhistory-search機能を使用できます。

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

これは、プロンプトですでに入力された内容に基づいて、履歴検索にバインドしUpDown(独自のエスケープシーケンスに合わせて)前後にバインドします。

したがって、「vim」と入力してヒットするとUp、zshは「vim」で始まるコマンドのみの履歴を逆方向に走査します。

さらに、次のように、history-search-end関数(通常はにあります/usr/share/zsh/functions/Zle/)を使用-endして各行の末尾に追加することで、zshの履歴から目的のコマンドを選択したら、行の末尾にカーソルを置くことができます。

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

よかった。ありがとう。両方のbindkeyコマンドの「-end」を削除して、それらを機能させる必要がありました。私はあなたの答えを編集していません。それらが必要な状況があるかもしれませんか?
ショーンマッケジー

問題ありません:明確にしたい詳細で回答を更新しました。
-jasonwryan

これは、2015年11月下旬、私がoh my zshの最新バージョンにアップグレードしたときまで機能していました。何か案は?提案?これを見ている人はいますか?デバッグ方法
ハニは15

2
@hanielabed Oh-my-Zshはclusterfsckです。私は...それは履歴検索のように根本的な何かを壊すまったく驚いていないよ
jasonwryan

1
空の履歴検索からカーソルを最後までジャンプする方法はありますが、部分検索でも同じ位置に留まりますか?これは現在bashで起こっていることです。
CMCDragonkai

19

別の便利なオプションは 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 

このエイリアスをドットファイルに入れます。


17
何がhg私を思い出させますか...そうそう、Mercurial!

12

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

それから加えて

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

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

注: ^[[Aは、私が使用する端末(kitty)および他の多くの上矢印のエスケープシーケンスです。選択した端末をチェックインするには、入力しshowkey -aてからエスケープシーケンスを検索するキーを押します。


このキーマッピングが何をするのかは不明です。上記の答えは、「これは、プロンプトで入力された内容に基づいて、上下に(独自のエスケープシーケンスに合わせて)履歴検索にバインドします。」
コリンD

@ColinD明確にするためのメモを追加
joelostblom

1
部分文字列検索が最適で、そのスーパーセットはコマンドで始まります。oh-my-zshユーザーでなくても実装するにはbrew install zsh-history-substring-search、レポのreadmeで指示を確認し、結果に本当に満足している答えを作成します。
マーリン


4

特定のシステムで動作する場合と動作しない場合があるハードコーディングされたものを使用"$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]}"
)

4

使用はzsh-autosuggestionsどうですか?

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

プラグインがないCtrlr場合、一致するコマンドの入力を開始するとすぐに、履歴に逆検索を実行するために押すことができます。


2

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

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

それは私が使用できるようになります^P^N、私がしなければ通常通り前後の検索私は、任意のテキストを入力しない場合、そして濾過検索など。


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」コマンドを使用した場合)。


1

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

ここで小さなイントロ/議論


0

私は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

bindkey -vctrl-a、ctrl-eが壊れます。ほとんどの場合、すべてのctrlコマンド。
マイケルオゼリャンスキー

0

非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

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

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