shopt -s histreedit
Zsh에서 Bash에 해당하는 것은 무엇입니까?
참고용으로만배쉬 참조 매뉴얼:
histreedit
set 및 Readline을 사용하는 경우 사용자에게는 실패한 기록 교체를 다시 편집할 수 있는 기회가 제공됩니다.
답변1
AFAIK, zsh에는 이에 상응하는 기능이 내장되어 있지 않습니다. (in )과 같은 작업을 수행하여 대략적으로 계산할 수 있습니다 ~/.zshrc
.
accept-line() {
pre_HISTCMD=$HISTCMD pre_BUFFER=$BUFFER pre_CURSOR=$CURSOR
zle .$WIDGET
}
zle-line-init() {
if (( $? == 1 && HISTCMD == pre_HISTCMD )) && [[ -z $BUFFER ]]; then
BUFFER=$pre_BUFFER CURSOR=$pre_CURSOR
fi
}
zle -N zle-line-init
zle -N accept-line
$?
실패한 기록 확장이 설정 되어 있고 기록 항목을 추가하지 않는다는 사실을 처리합니다 1
(확장이 기록 행에 추가되지 않는 한, 이 트릭은 많은 특수한 경우에서 작동하지 않을 수 있습니다).
이제 IMO에서는 기록 확장(70년대 후반에 csh에 의해 도입됨)이 80년대에 자리를 잡았지만 터미널이 느리고 줄 편집이 매우 기본이었을 때 나는 기록 기반 완성과 같은 기록 추출 위젯을 사용하는 것을 선호합니다. Ctrl+ r, Alt+ p및 기록에서 데이터를 가져오는 기타 위젯.
나는 1990년대 후반부터 대화형 zsh 셸에서 히스토리 확장을 체계적으로 비활성화해 왔습니다. 내 주요 문제 중 하나는 당신이 보는 것이 당신이 얻는 것이 아니라는 것입니다. 눌러야 확장이 완료 Enter되고 명령어가 동시에 실행되며, 확장 전 코드는 히스토리에 저장되지 않습니다.
- 확장이 실패할 수 있으며 다시 수행해야 합니다.
- 원하는 이벤트 대신 잘못된 이벤트로 확장될 수도 있고, 단어 표시기를 사용하는 경우 잘못된 단어나 단어 유형으로 끝날 수도 있고, 수정자가 예상대로 작동하지 않아 결국 잘못된 주문을 실행하게 될 수도 있습니다. .
histreedit
1에는 도움이 되지만 2에는 도움이 되지 않습니다. histverify
(1991년 zsh 2.1 기준, 2.0(1996) 이후 bash에서도 지원됨) 2에는 도움이 되지만 1에는 도움이 되지 않습니다.
IMO, 더 나은 접근 방식은 기본적으로 모드에서 + 및 + expand-history
에 바인딩되는 위젯을 사용하고 WYSIWYG 방식으로 명시적으로 확장을 실행하여 무엇을 얻을 수 있는지(실패 시 경고음이 울림), +로 실행 취소할 수 있는 항목을 확인하는 것입니다. 기본적으로 바인딩되지는 않지만 바인딩되도록 의도된 위젯은 공백을 삽입하고 기록 확장을 수행합니다.Alt!AltSpaceemacs
Ctrl_magic-space
Space