zsh History-beginning-search-backwards는 필요에 따라 커서를 배치하지 않습니다.

zsh History-beginning-search-backwards는 필요에 따라 커서를 배치하지 않습니다.

Bash에서는 다음을 사용했습니다.

% cat .inputrc
"\e[A": history-search-backward
"\e[B": history-search-forward

.zsh에서도 동일한 동작을 원했기 때문에 다음 키 바인딩을 시도했습니다.

"^[[A" history-beginning-search-backward
"^[[B" history-beginning-search-forward

바로 이전 명령을 보기 위해 (텍스트를 입력하지 않고) 위로 화살표를 쏠 때 커서가 줄 끝이 아니라 시작 부분에 있다는 점을 제외하고는 이것이 내가 원하는 것과 거의 같습니다.

'bindkey'^[[A'history-search-backward'가 닫혀 커서를 끝에 두지만 첫 번째 단어만 검색합니다. 예를 들어 'ssh foo'를 입력하면 The에서 최신 'ssh'가 반환됩니다. "ssh foo"로 시작하지 않는 기록의 최신 줄입니다. 또한 검색할 때 커서가 줄 끝 부분에 위치하는데 이는 내가 원하는 것과도 다릅니다( history-search-backwardsbash와 zsh 모두 history-beginning-search-backward입력을 중단한 위치에 커서를 유지합니다).

동일한 기능으로 커서를 줄 끝에 위치시킬 수 있습니까 history-beginning-search-backward?

답변1

키 에 바인딩하면 Up여러 줄 명령을 편집할 때 커서를 위로 이동할 수 없습니다.

이것이 기본 위젯이 명령의 두 번째 또는 여러 줄 아래에 있으면 커서를 위로 이동시키고, 그렇지 않으면 기록에서 이전 명령을 불러오는 것입니다 Up.up-line-or-history

이전 명령이 기록에서 나타날 때 커서 왼쪽에 있는 것과 동일한 선행 하위 문자열이 있는 명령이 나타나도록 이를 변경하려면 자동 로드 가능한 위젯이 있습니다.

for direction (up down) {
  autoload $direction-line-or-beginning-search
  zle -N $direction-line-or-beginning-search
  key=$terminfo[kcu$direction[1]1]
  for key ($key ${key/O/[})
    bindkey $key $direction-line-or-beginning-search
}

Up(terminfo는 또는 를 눌렀을 때 전송된 시퀀스를 얻기 위해 여기에서 쿼리되며 , 대부분의 터미널에서 지원하는 두 키보드 전송 모드를 모두 포함하기 위해 의 변형으로 Down바인딩되고 대체됩니다 .)O[

또는 up/down-line-or-history다음 위젯을 사용하도록 위젯을 재정의할 수 있습니다.

for direction (up down) {
  autoload $direction-line-or-beginning-search
  zle -N $direction-line-or-{history,beginning-search}
}

Up이는 / 뿐만 아니라 Down패턴의 Ctrl+ P/ 를 포함하여 이러한 위젯을 사용하는 모든 키맵에 영향을 미칩니다 .Nemacs

답변2

zsh에서는 키를 셸 기능에 바인딩할 수 있습니다. 쉘 함수는 다음과 같이 등록되어야 합니다.작은 부품그리고 zle -N. 버퍼, 클립보드 등의 내용을 포함한 여러 변수에 액세스할 수 있습니다. 통과할 수 있다zle내장.

history-beginning-search-backward이 코드(테스트되지 않음)는 버퍼가 처음에 비어 있는 경우에만 커서를 다음 줄 끝에 배치합니다 . 이것이 정확히 당신이 원하는 것인지는 잘 모르겠지만, 그렇지 않다면 적응하기 쉬울 것입니다.

function history-beginning-search-backward-end-of-line {
  local original_buffer_length=$#BUFFER
  zle history-beginning-search-backward
  if ((original_buffer_length == 0)); then
    CURSOR=$#BUFFER
  fi
}
zle -N history-beginning-search-backward-end-of-line
bindkey "^[[A" history-beginning-search-backward-end-of-line

관련 정보