回答:
これをコピーして貼り付けてください.zshrc
:
カーソルはローカル履歴を使用しています:
bindkey "${key[Up]}" up-line-or-local-history
bindkey "${key[Down]}" down-line-or-local-history
up-line-or-local-history() {
zle set-local-history 1
zle up-line-or-history
zle set-local-history 0
}
zle -N up-line-or-local-history
down-line-or-local-history() {
zle set-local-history 1
zle down-line-or-history
zle set-local-history 0
}
zle -N down-line-or-local-history
またCTRL、グローバルヒストリをステップ実行するためにキーバインディング(+カーソル)が必要な場合は、これも以下に追加します.zshrc
。
bindkey "^[[1;5A" up-line-or-history # [CTRL] + Cursor up
bindkey "^[[1;5B" down-line-or-history # [CTRL] + Cursor down
これを機能させるには、オプションSHARE_HISTORY(16.2.4履歴を参照)を有効にする必要があります。実行してsetopt
、「sharehistory」がリストされているかどうかを確認します。に追加setopt sharehistory
しない場合は.zshrc
。その後、上記のようにset-local-historyを使用できます。文書には次のように書かれています:
デフォルトでは、履歴移動コマンドはインポートされた行とローカル行を訪問しますが、set-local-history zleバインディングを使用してこれをオンとオフに切り替えることができます。一部のコマンドがインポートされたコマンドを無視し、一部のコマンドがそれらを含むようにするzleウィジェットを作成することもできます。
デフォルトではグローバル履歴が使用されることに注意してください(すべての機能は「zle set-local-history 0」で終了します。つまり、ローカル履歴は無効になっています)。したがって、CTRL+ Rを押すと、デフォルトでグローバル履歴が検索されます(ほとんどの場合、これは理にかなっています)。
これは@mpyによるソリューションと非常に似ていますが、コピー&ペーストの準備ができています。カーソルキーを上下に上書きします。このメールリストエントリを使用しました。
こちらもご覧ください:
${key[Up]}
ます。次に(編集モードで)Ctrl + Vを押してから上矢印を入力します。これにより、正しいキーコードが挿入されます。下矢印についても同じことを行います。
Ctrl+R
ます。
ローカル履歴項目のみを表示する特別なzleウィジェットをセットアップできます。
function only-local-history () {
zle set-local-history 1
zle up-history
zle set-local-history 0
}
zle -N only-local-history
それ↑がup-line-or-history
(デフォルトだと思う)にバインドされていると仮定すると、このウィジェットをCTRL+ などの別のキーストロークにバインドできます↑。
bindkey "^[Oa" only-local-history
これが機能するかどうかは、おそらく端末に依存しています。上記の行はで機能しURxvt/Screen
ます。xterm
あなたが必要となります
bindkey "^[[1;5A" only-local-history
ためCTRL+ ↑。
別のバリアントは
function peek-history () {
zle set-local-history
zle up-history
zle set-local-history
}
zle -N peek-history
したがって、ローカル履歴を有効にしている場合は、グローバル履歴を覗くことができ、その逆も可能です。
@lumbicの答えは、いくつかの変更を加えただけで私にとってはうまくいきました。
setopt share_history
up-line-or-local-history() {
zle set-local-history 1
zle up-line-or-history
zle set-local-history 0
}
zle -N up-line-or-local-history
down-line-or-local-history() {
zle set-local-history 1
zle down-line-or-history
zle set-local-history 0
}
zle -N down-line-or-local-history
bindkey '^[OA' up-line-or-history # Cursor up
bindkey '^[OB' down-line-or-history # Cursor down
bindkey '^[[1;5A' up-line-or-local-history # [CTRL] + Cursor up
bindkey '^[[1;5B' down-line-or-local-history # [CTRL] + Cursor down
このコードは、グローバル履歴をデフォルトにし、ローカル履歴にCTRL-矢印を使用します。
注:zsh 5.0.2とoh-my-zshを併用しています。
Ctrl+arrows
ローカルな歴史のために。
ここで他の回答にリストされているオプションを試しましたが、それらに満足していませんでした。ウィジェット1 up-history
またはup-line-or-history
含まない検索を開始し、ウィジェット1は、 up-line-or-beginning-search
それを使用しながら、地域の歴史・プリファレンスを変更する際にうまく動作しないようです。2
だから私は次の設定に来ました。それは可能Ctrl、グローバルな歴史を参照するには+矢印をAlt+矢印はスマート最初の検索(のデフォルトを使用するだけ(バッシュに似ている)地域の歴史やスタンドアロンの矢印を参照するにはオーマイZshのを)。
up-line-or-local-history() {
zle set-local-history 1
zle up-line-or-search
zle set-local-history 0
}
zle -N up-line-or-local-history
down-line-or-local-history() {
zle set-local-history 1
zle down-line-or-search
zle set-local-history 0
}
zle -N down-line-or-local-history
bindkey "${key[Up]}" up-line-or-beginning-search
bindkey "${key[Down]}" down-line-or-beginning-search
bindkey "^[[1;5A" up-line-or-search # [CTRL] + Cursor up
bindkey "^[[1;5B" down-line-or-search # [CTRL] + Cursor down
bindkey "^[[1;3A" up-line-or-local-history # [ALT] + Cursor up
bindkey "^[[1;3B" down-line-or-local-history # [ALT] + Cursor up
1それらのdown
対応物も暗黙的に意味されます。
2検索に使用される先頭は、ローカル履歴設定を変更した後に再定義されるため、最初に見つかったコマンド全体が、2番目の検索で検索される先頭として使用されます。
ここでのさまざまな答えに基づいて、私は要約版を作成することができました:
function up-line-or-history() {
zle set-local-history 1
zle .up-line-or-history
zle set-local-history 0
}
function down-line-or-history() {
zle set-local-history 1
zle .down-line-or-history
zle set-local-history 0
}
# Overwrite existing {up,down}-line-or-history widgets with the functions above.
zle -N up-line-or-history
zle -N down-line-or-history
このバージョンは、既存のウィジェットとウィジェットを新しいユーザー定義ウィジェットで上書きします。このウィジェットは、ローカル履歴を有効にし、元のウィジェットを呼び出します。これは、接頭辞付きの名前で使用できます。詳細については、zleウィジェットのドキュメントを参照してください。up-line-or-history
down-line-or-history
.
これは、既存のキーバインドを保持できることを意味します。したがって、現在の端末で上矢印を入力するためのエスケープシーケンスを把握する必要がなくなります。
autoload -U up-line-or-beginning-search
autoload -U down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search # Up
bindkey "^[[B" down-line-or-beginning-search # Down
上記の答えは私のために働いた。
参照:https : //coderwall.com/p/jpj_6q/zsh-better-history-searching-with-arrow-keys