미리보기가 포함된 실시간 검색 기록을 본 적이 있는데, 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줄 기록 미리보기의 공백이 다른 유형의 공백 문자이거나... 아주 작은 중앙 점이거나, 검정색 배경에 검정색 텍스트라면 상관하지 않습니다...