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상호 작용 측면에서 확실히 배울 가치가 있는 몇 가지 고급 기능이 있습니다. 안타깝게도 bash.zsh


또한 해결책은 아니지만 밀접하게 관련되어 있습니다.

zsh 배포판에는 history-beginning-search-menu찾고 있는 작업의 일부를 수행하지만 유용성이 없는 위젯이 포함되어 있습니다.

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

현재 입력부터 시작하여 히스토리 라인을 나열하고 목록에서 번호별로 선택합니다.

다음 에서 +를 누르세요 Control.P|

$ 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줄 기록 미리보기의 공백이 다른 유형의 공백 문자이거나... 아주 작은 중앙 점이거나, 검정색 배경에 검정색 텍스트라면 상관하지 않습니다...

관련 정보