zsh-historyプレビューでトップ10のゲームをリアルタイムで検索しますか?

zsh-historyプレビューでトップ10のゲームをリアルタイムで検索しますか?

プレビューを含むリアルタイム検索履歴を見たことがあります。BUFFER行の下のリストに履歴の最初の10件の一致が表示され、キーを押すたびに更新され、残りの時間は標準のCtrl + R検索と同様に機能します。 (ただし、この機能を使用するユーザーが3週間消えて連絡が取れません)

tl;dr: このプラグイン/スクリプトをご存知で、私にリンクしていただける方はいらっしゃいますか?

または、プログラムしてリストを正しく更新するのに役立ちますか?

私の現在のコードは次のように更新されていません(最初から静的リストにすぎず、検索は完全に自然には見えません)。

zle -N search

bindkey "^R" search

search () {
echo "";
fc -ln -30 | grep $(printf "%q\n" "$BUFFER");
<standard-history-backwards-search-widget>; #not on linux atm
}

答え1

あなたはすでに知っているかもしれませんzsh-history-substring-search

私が知っているのは、今見ているプレビューは実行されていませんが、それ以外は非常に似ているようです。

知らないなら試してみる価値があります。

zsh-history-substring-search緊密なfishシェルベースの履歴検索。fishインタラクションの面で確かに学ぶ価値があるいくつかの高度な機能があります。残念ながら。bashzsh


また、解決策ではありませんが、密接に関連しています。

zshディストリビューションには、history-beginning-search-menu探しているタスクの一部を実行しますが有用ではないウィジェットが含まれています。

autoload -Uz history-beginning-search-menu
zle -N history-beginning-search-menu
bindkey '^P' history-beginning-search-menu

現在の入力から始まり、履歴行をリストし、リストから番号で選択します。

以下で+を押しますControlP|

$ dialog  -| 
Enter digit:
1 dialog  --infobox text 5 15| sed 's/...104..//'
2 dialog  --yesno SomeText 0 0
3 dialog  --yesno text 0 0
4 dialog  --yesno text 5 15

答え2

質問の他の部分に答えるには、
「...プログラムを正しく作成してリストを更新するのに役立ちます」:

完成したアイテムを一覧表示したり、リストを更新したり、リストを消去したりする機能を直接使用できますzle -R
独自の「管理されていない」テキストを作成するには、zle -M.fromを
使用できますpinfo zsh

zle -R [ -c ] [ DISPLAY-STRING ] [ STRING ... ]
zle -M STRING
[ ... ]

    -R [ -c ] [ DISPLAY-STRING ] [ STRING ... ]
          Redisplay the command line; this is to be called from within
          a user-defined widget to allow changes to become visible.  If
          a DISPLAY-STRING is given and not empty, this is shown in the
          status line (immediately below the line being edited).

          If the optional STRINGs are given they are listed below the
          prompt in the same way as completion lists are printed. If no
          STRINGs are given but the -c option is used such a list is
          cleared.

          Note that this option is only useful for widgets that do not
          exit immediately after using it because the strings displayed
          will be erased immediately after return from the widget.

          This command can safely be called outside user defined
          widgets; if zle is active, the display will be refreshed,
          while if zle is not active, the command has no effect.  In
          this case there will usually be no other arguments. [...]

    -M STRING
          As with the -R option, the STRING will be displayed below the
          command line; unlike the -R option, the string will not be
          put into the status line but will instead be printed normally
          below the prompt.  This means that the STRING will still be
          displayed after the widget returns (until it is overwritten
          by subsequent commands).

zstyle ':completion:*' ...私はレイアウトの詳細がどのように構成されていると確信しています。

シェルに組み込まれているいくつかのオプションはprintそれ自体で役立つか、文字列を生成してから次のコマンドラインでその文字列を印刷すると便利ですzle -M
pinfo zsh

print [ -abcDilmnNoOpPrsSz ] [ -u N ] [ -f FORMAT ] [ -C COLS ]
[ -R [ -en ]] [ ARG ... ]
     With the '-f' option the arguments are printed as described by
     printf.  With no flags or with the flag '-', the arguments are
     printed on the standard output as described by echo, with the
     following differences: the escape sequence '\M-X' metafies the
     character X (sets the highest bit), '\C-X' produces a control
     character ('\C-@' and '\C-?' give the characters NUL and delete),
     and '\E' is a synonym for '\e'.  Finally, if not in an escape
     sequence, '\' escapes the following character and is not printed.

    [  ...  ]
    -a
          Print arguments with the column incrementing first.  Only
          useful with the -c and -C options.

    -b
          Recognize all the escape sequences defined for the bindkey
          command, see *note Zle Builtins::.

    -c
          Print the arguments in columns.  Unless -a is also given,
          arguments are printed with the row incrementing first.

    -C COLS
          Print the arguments in COLS columns.  Unless -a is also given,
          arguments are printed with the row incrementing first.

    -l
          Print the arguments separated by newlines instead of spaces.

    -m
          Take the first argument as a pattern (should be quoted), and
          remove it from the argument list together with subsequent
          arguments that do not match this pattern.

    -n
          Do not add a newline to the output.

    -o
          Print the arguments sorted in ascending order.

    -p
          Print the arguments to the input of the coprocess.

    -P
          Perform prompt expansion (see *note Prompt Expansion::).

    -s
          Place the results in the history list instead of on the
          standard output.  Each argument to the print command is
          treated as a single word in the history, regardless of its
          content.

    -S
          Place the results in the history list instead of on the
          standard output.  In this case only a single argument is
          allowed; it will be split into words as if it were a full
          shell command line.  The effect is similar to reading the
          line from a history file with the HIST_LEX_WORDS option
          active.

    -u N
          Print the arguments to file descriptor N.

    -z
          Push the arguments onto the editing buffer stack, separated
          by spaces.

    [  ...  ]

完成値に空白が含まれていたときに克服できない障害物があったことを覚えています。ほとんどの完成メカニズムは、スペースで区切られた単語に対して機能します。したがって、この問題を解決するには注意、回避策、またはヒントが必要な場合があります。
しかし、インタラクティブなリアルタイム10行の履歴プレビューの空白が他の種類の空白文字であるか...非常に小さな中央点、または黒の背景に黒のテキストであれば問題ありません...

関連情報