현재 내 .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
답변
이것은 문서화 된 동작입니다 .
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
답변
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
등
답변
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
(이 답변의 이전 버전 $terminfo
에서는 블로그 게시물에 대한 의견 중 하나에서 권장 된대로 사용 했습니다. 일부 terminfo 값은 여기 에 나열되어 있습니다 .)