zsh에서 기록 확장에 대한 별칭을 추가하는 방법은 무엇입니까?

zsh에서 기록 확장에 대한 별칭을 추가하는 방법은 무엇입니까?

나는 그것이 작동하기를 원합니다 ( extendedglob그리고 필요합니다 histsubstpattern):

alias ri='^(#b)E(?)^E${(l:2::0:)$((match[1]+1))}'

하지만 그렇지 않습니다:

$ alias sss='^(#b)E(?)^E${(l:2::0:)$((match[1]+1))}'                                               
$ echo /Users/evar/Downloads/Video/Teenage_Mutant_Ninja_Turtles_2003_S02E01_DVDRip_30NAMA.mkv
/Users/evar/Downloads/Video/Teenage_Mutant_Ninja_Turtles_2003_S02E01_DVDRip_30NAMA.mkv
$ sss                                                                                             
zsh: command not found: Pocket

별칭 대신 함수를 사용해도 괜찮지만 결과는 같습니다.

나도 시도해보고 export ss='^(#b)E(?)^E${(l:2::0:)$((match[1]+1))}'해봤 $ss지만 실패했다 zsh: command not found: ^(#b)E(?)^E${(l:2::0:)$((match[1]+1))}.

사용 eval '^(#b)E(?)^E${(l:2::0:)$((match[1]+1))}'도 실패했습니다 zsh: command not found: Pocket.

업데이트: 관련(중복 가능성이 있는) 질문이 발견되었습니다.

zsh에서 bash의 `history -p`를 대체합니까?

https://stackoverflow.com/questions/27494753/how-to-get-last-command-run-without-using

https://stackoverflow.com/questions/48696876/using-history-expansion-in-a-bash-alias-or-function

답변1

아니요. 내역 확장은 별칭이나 매개변수 확장보다 먼저 발생합니다.

저는 개인적으로 히스토리 확장을 싫어하므로 가장 먼저 비활성화합니다.

E<n>여기서는 기록 확장 별칭을 사용하는 대신 커서 왼쪽의 숫자를 증가시키는 위젯을 만드는 것을 제안합니다 .

increment-episode() {
  emulate -L zsh
  setopt extendedglob
  LBUFFER=${LBUFFER/(#b)(*E)(<->)/$match[1]${(l:${#match[2]}::0:)$((match[2]+1))}}
}

zle -N increment-episode

bindkey '\e+' increment-episode

그런 다음 +를 누르면 Up각 단계에서 무슨 일이 일어나고 있는지에 대한 시각적 피드백을 얻을 수 있으며 당시 csh 기록 확장(70년대 IMO의 기능)처럼 맹목적으로 작업하는 대신 마음대로 실행 취소/다시 실행/적응할 수 있습니다. 하지만 이제는 더 빠르고 강력한 터미널과 라인 편집기가 있으므로 덜 명확해졌습니다.Alt+

그러나 기록에서 이전 명령의 코드를 증가된 숫자로 맹목적으로 평가하려면 E다음을 수행할 수 있습니다.

rerun-with-next-episode() {
  emulate -L zsh
  setopt extendedglob
  local new
  new=${${history:0:1}/(#b)E(<->)/E${(l:${#match[1]}::0:)$((match[1]+1))}}

  # display it
  print -ru2 -- $new

  # put it on the history
  print -rs -- $new

  # evaluate it
  eval -- $new
}

관련 정보