이전 명령의 매개변수를 입력합니다.

이전 명령의 매개변수를 입력합니다.

이전 명령줄에서 오른쪽 화살표 키를 사용하여 한 번에 하나의 매개변수를 채울 수 있습니까?

$ mogrify -resize 50% file.jpg
$

이제 오른쪽 화살표를 누르면 가 채워지고 mogrify, 다시 오른쪽 화살표를 누르면 까지 채워져야 합니다. mogrify -resize다시 누르면 mogrify -resize 50%가 계속됩니다.

지금까지의 명령줄이 이전 명령줄과 일치하지 않으면 가장 최근에 일치하는 명령부터 채워야 합니다.

$ mogrify -resize 50% file.jpg
$ echo hi
$ mo

mogrify오른쪽 화살표를 누르면 not 가 채워져야 합니다 echo.

이를 지원하도록 zsh를 어떻게 구성합니까?

답변1

다음 코드는 Right명령줄 끝에 있다는 점을 제외하면 정상적으로 작동합니다. 명령줄 끝에 있는 경우 현재 줄의 텍스트로 시작하는 일치하는 이전 기록 줄을 찾습니다(공백을 포함하여 정확히 동일한 텍스트여야 함). 발견되면 다음 단어가 시작될 때까지 일치하는 줄의 다음 부분을 삽입합니다. 숫자 매개변수 N을 사용하여 일치하는 N번째 행에서 추출합니다.

function immediate-complete-word-from-full-history {
  emulate -L zsh
  setopt extended_glob
  local line=${${history[(R)${(b)LBUFFER}*]}[${NUMERIC:-1}]}
  local blank=$' \t\n\f'
  if [[ -z $line ]]; then return; fi
  line=${line#$LBUFFER}
  LBUFFER+=${line%"${line##[^$blank]##[$blank]#}"}
}

function forward-char-or-immediate-complete-word-from-full-history {
  if [[ -n $RBUFFER ]]; then
    zle forward-char
  else
    immediate-complete-word-from-full-history
  fi
}

zle -N forward-char-or-immediate-complete-word-from-full-history
bindkey '\e[C' forward-char-or-immediate-complete-word-from-full-history
bindkey '\eOC' forward-char-or-immediate-complete-word-from-full-history

알려진 버그: 개행이 포함된 히스토리 라인에서는 작동하지 않습니다. 개행은 줄 내 실제 개행과 구별할 수 없는 fc으로 출력되기 때문입니다. 완전히 올바른 솔루션은 로 시작해야 합니다 .\n\n$history

관련 정보