현재 내 .zshrc에는 다음이 있습니다.
bindkey '^[[A' up-line-or-search
bindkey '^[[B' down-line-or-search
그러나 이것은 공백 문자가 나타날 때까지만 현재 입력과 일치하는 것 같습니다. 예를 들어 는 sudo ls /
내 기록에서 로 시작하는 모든 줄과 일치하는 sudo
반면, 나는 전체 입력과 일치하는 줄만 일치시키길 원합니다. (즉 sudo ls /etc
, 일치하지만 일치하지 않음 sudo cat /var/log/messages
)
원하는 동작을 얻으려면 무엇을 변경해야 합니까?
관련이 있는 경우 전체 .zshrc는 다음과 같습니다.https://gist.github.com/919566
답변1
zsh는 다음을 사용하여 이 기능을 제공합니다.
history-beginning-search-backward
history-beginning-search-forward
전임자.
bindkey "^[[A" history-beginning-search-backward
bindkey "^[[B" history-beginning-search-forward
ctrl+를 통해 정확한 키 코드를 찾으세요.vKEY
전임자.
ctrl+ vUP
ctrl+ vDOWN
ctrl+ vPageUp
ctrl+ vPageDown
등
Mac을 사용하는 경우 OSX Catalina에는 다음 사항이 적용됩니다.
bindkey "\e[5~" history-search-backward
bindkey "\e[6~" history-search-forward
답변2
이것2013년 블로그 게시물커서 앞의 모든 단어와 일치하는 여러 가지 키 바인딩이 권장됩니다.
# Cycle through history based on characters already typed on the line
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 "$key[Up]" up-line-or-beginning-search
bindkey "$key[Down]" down-line-or-beginning-search
$key[Up]
귀하의 컴퓨터에서 및 가 작동하지 않으면 대신 $key[Down]
시도해 볼 수 있습니다 .$terminfo[kcuu1]
$terminfo[kcud1]
답변3
이것은기록된 행동:
down-line-or-search
버퍼에서 한 줄 아래로 이동합니다. 이미 맨 아래 줄에 있는 경우 버퍼의 첫 번째 단어로 시작하는 줄을 기록에서 앞으로 검색합니다.
원하는 것을 정확히 수행하는 기존 위젯이 없는 것 같으므로 직접 만들어야 합니다. 유사하게 동작 up-line-or-search
하지만 첫 번째 단어 대신 줄의 시작 부분(커서까지)을 검색 문자열로 사용하는 위젯을 정의하는 방법은 다음과 같습니다 . 특히 여러 줄 입력에 대해서는 실제로 테스트하지 않았습니다.
up-line-or-search-prefix () {
local CURSOR_before_search=$CURSOR
zle up-line-or-search "$LBUFFER"
CURSOR=$CURSOR_before_search
}
zle -N up-line-or-search-prefix
또 다른 방법은 history-beginning-search-backward
커서가 첫 번째 줄에 있을 때만 호출하는 것입니다. 검증되지 않은.
up-line-or-history-beginning-search () {
if [[ -n $PREBUFFER ]]; then
zle up-line-or-history
else
zle history-beginning-search-backward
fi
}
zle -N up-line-or-history-beginning-search
답변4
내 질문에 대한 답을 찾았습니다여기, 내 생각엔 완벽해.
예를 들어, 이러한 기능을 "Page Up" 키와 "Page Down" 키에 바인딩한 다음 "Page Up"을 누르면 입력하기 시작한 내용(첫 번째 단어뿐만 아니라)을 사용하여 기록을 검색합니다.
즉, 입력하면 sudo ls /etc
표시 sudo ls
되지만 sudo ls /etc
표시되지는 않습니다 sudo cat...
.
아래는 내 zshrc에서 발췌한 것입니다.
## Page UP and Page Down through History
autoload -Uz history-search-end
zle -N history-beginning-search-backward-end \
history-search-end
zle -N history-beginning-search-forward-end \
history-search-end
bindkey "\e[5~" history-beginning-search-backward-end
bindkey "\e[6~" history-beginning-search-forward-end