나는 그것이 작동하기를 원합니다 ( 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
}