Zsh에서 histreedit는 어디에 있나요?

Zsh에서 histreedit는 어디에 있나요?

shopt -s histreeditZsh에서 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되고 명령어가 동시에 실행되며, 확장 전 코드는 히스토리에 저장되지 않습니다.

  1. 확장이 실패할 수 있으며 다시 수행해야 합니다.
  2. 원하는 이벤트 대신 잘못된 이벤트로 확장될 수도 있고, 단어 표시기를 사용하는 경우 잘못된 단어나 단어 유형으로 끝날 수도 있고, 수정자가 예상대로 작동하지 않아 결국 잘못된 주문을 실행하게 될 수도 있습니다. .

histreedit1에는 도움이 되지만 2에는 도움이 되지 않습니다. histverify(1991년 zsh 2.1 기준, 2.0(1996) 이후 bash에서도 지원됨) 2에는 도움이 되지만 1에는 도움이 되지 않습니다.

IMO, 더 나은 접근 방식은 기본적으로 모드에서 + 및 + expand-history에 바인딩되는 위젯을 사용하고 WYSIWYG 방식으로 명시적으로 확장을 실행하여 무엇을 얻을 수 있는지(실패 시 경고음이 울림), +로 실행 취소할 수 있는 항목을 확인하는 것입니다. 기본적으로 바인딩되지는 않지만 바인딩되도록 의도된 위젯은 공백을 삽입하고 기록 확장을 수행합니다.Alt!AltSpaceemacsCtrl_magic-spaceSpace

관련 정보