ZSH には、ディレクトリの選択、kill (kill[tab][tab]) によるプロセスの選択など、強力なメニュー選択の自動補完機能があります。矢印を使用して選択肢間を移動できます。
履歴検索 (CTRL+R) のメニュー ポップアップも表示できますか? メニューで、現在の CTRL+R 検索バーの一致をナビゲートできるような方法は?
答え1
これはあなたが求めていることとは程遠いことは承知していますが、根本的な問題を解決するかもしれません。
履歴を検索すると、結果が満載のページを表示するシェル履歴拡張機能があります。また、現在のディレクトリ、git リポジトリ、終了ステータス、およびホストに基づいて、関連する結果を最初に表示します。
プロジェクトはここからインストールできます:https://github.com/curusarn/resh
CTRL+ を使用して起動しますR(逆検索を置き換えます)。
検索アプリケーションの外観は次のようになります。
免責事項:私はこのプロジェクトの作者であり、これは恥知らずな自己宣伝です
答え2
zsh-navigation-tools
は、次のような機能があります。 oh-my-zsh を使用する場合は、zsh-navigation-tools
を追加するだけplugins=(...)
で.zshrc
、Ctrl + R で、上/下および検索/フィルタリング付きのスクロール履歴が表示されます。 oh-my-zsh がなくても使用できますが、セットアップに手間がかかりそうです。
答え3
私の知る限りでは、ありません。
多分あなたが試したいのは
predict-on
、あなたが尋ねていることに関連したことを実行する です:autoload -U predict-on zle -N predict-on zle -N predict-off bindkey '^X1' predict-on bindkey '^X2' predict-off
答え4
それは可能です。原則として、_kill
履歴イベントでも機能するように完了を変更しました。
次に例を示します。エントリを選択した後、[ENTER] キーを 1 回押してイベント番号を受け入れ (コマンド ラインには fe と表示されますhc 780
)、もう一度 [ENTER] キーを押してコマンドを実行します。(実行前にコマンド ラインを変更する場合は、fc
の代わりにを使用します)。hc
$ hc Makefile[TAB]
history event
1906 9.3.2013 18:10 vi Makefile
1867 9.3.2013 17:26 less Makefile
780 3.2.2013 17:54 cat Makefile
776 3.2.2013 17:51 cat ../Makefile
これを使用するには、追加されたファイルを のディレクトリに配置し$fpath
、 に次の行を追加します~/.zshrc
。
zstyle ':completion:*:historyevent' command 'fc -dE -lr 1'
zstyle ':completion:*:historyevent' sort no
最後に、新しいzsh
セッションを開始します。
注意してください。これは手っ取り早い解決策ですが、しばらくの間はうまく機能していました。
_歴史イベント
#autoload
local out histevent list expl match desc listargs all nm ret=1
_tags historyevent || return 1
all=(-U)
match="*[[:blank:]]*[[/[:blank:]]$PREFIX*$SUFFIX*"
nm="$compstate[nmatches]"
out=( "${(@f)$(_call_program historyevent fc -l 2>/dev/null)}" )
desc="$out[1]"
out=( "${(@M)out[2,-1]:#${~match}}" )
histevent=( "${(@)${(@M)out##[^0-9]#[0-9]#}##*[[:blank:]]}" )
if zstyle -T ":completion:${curcontext}:historyevent" verbose; then
list=( "${(@Mr:COLUMNS-1:)out}" )
desc=(-ld list)
else
desc=()
fi
_wanted processes expl 'history event' \
compadd "$@" "$desc[@]" "$all[@]" -a - histevent && ret=0
if [[ -n "$all" ]]; then
zstyle -s ":completion:${curcontext}:historyevent" insert-ids out || out=menu
case "$out" in
menu) compstate[insert]=menu ;;
single) [[ $compstate[nmatches] -ne nm+1 ]] && compstate[insert]= ;;
*) [[ ${#:-$PREFIX$SUFFIX} -gt ${#compstate[unambiguous]} ]] &&
compstate[insert]=menu ;;
esac
fi
return ret
_fc
#compdef fc
local curcontext="$curcontext" line state ret=1
_arguments -C \
'-e[editor command]' \
'-l[list last history events]' \
'-n[suppress numbers]' \
'-r[reverse order]' \
'*:history event:->historyevent' && ret=0
if [[ -n "$state" ]]; then
_alternative \
'historyevent:: _historyevent' && ret=0
fi
return ret