ZSH: 주요 검색 기록을 위아래로?

ZSH: 주요 검색 기록을 위아래로?

현재 내 .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

관련 정보