zshでは、Ctrl+で履歴を検索できることを知っていますr。ただし、プロンプトで直接コマンドを入力し始めることがよくありますが、その後、履歴を検索する必要があることに気付きます。私がヒットするとCtrl+をr、それがこのような空白の履歴検索プロンプトが表示されます:
履歴検索プロンプトではなく、プロンプトにテキストがあることに注意してください。プロンプトにすでにテキストがある状態で履歴検索を開始するにはどうすればいいですか?
zshでは、Ctrl+で履歴を検索できることを知っていますr。ただし、プロンプトで直接コマンドを入力し始めることがよくありますが、その後、履歴を検索する必要があることに気付きます。私がヒットするとCtrl+をr、それがこのような空白の履歴検索プロンプトが表示されます:
履歴検索プロンプトではなく、プロンプトにテキストがあることに注意してください。プロンプトにすでにテキストがある状態で履歴検索を開始するにはどうすればいいですか?
回答:
zleの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
して各行の末尾に追加することで、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
別の便利なオプションは 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を使用している場合はhistory-substring-search
、plugins=(...)
行に追加します。
それから加えて
bindkey "^[[A" history-substring-search-up
bindkey "^[[B" history-substring-search-down
読んだ行の下のどこかにsource $ZSH/oh-my-zsh.sh
。新しいターミナルを保存して起動するかsource ~/.zshrc
、現在のターミナルで実行します。
注: ^[[A
は、私が使用する端末(kitty)および他の多くの上矢印のエスケープシーケンスです。選択した端末をチェックインするには、入力しshowkey -a
てからエスケープシーケンスを検索するキーを押します。
brew install zsh-history-substring-search
、レポのreadmeで指示を確認し、結果に本当に満足している答えを作成します。
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]}"
)
使用はzsh-autosuggestions
どうですか?
問題は、このプラグインを入力するコマンドごとに、受け入れられるかどうかの提案が表示されることです。試して、フィードバックをお寄せください。
プラグインがないCtrlr場合、一致するコマンドの入力を開始するとすぐに、履歴に逆検索を実行するために押すことができます。
「サブストリング」検索の方が便利であると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」コマンドを使用した場合)。
私は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 -v
ctrl-a、ctrl-eが壊れます。ほとんどの場合、すべてのctrlコマンド。
これは(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
今、これを徹底的に楽しんでいます。