퍼지 검색 기록: 여러 줄 명령에 대해 줄을 그대로 유지하면서 기록을 표시합니다.

퍼지 검색 기록: 여러 줄 명령에 대해 줄을 그대로 유지하면서 기록을 표시합니다.

검색 기록을 난독화하기 위해 zsh 위젯을 개발 중입니다.

skim-history() {
  origquery=${BUFFER}
  output=$(history -1 1 | sd '^[ ]*[0-9]*[ ]*' '' | sk --tac --no-sort --exact)

  if [ $? -eq 0 ]; then
    BUFFER=$output
  else
    BUFFER=$origquery
  fi

  CURSOR=$#BUFFER
}

zle     -N   skim-history
bindkey '^R' skim-history

존재하다 history -1 1 | sd '^[ ]*[0-9]*[ ]*' '' | sk --tac --no-sort --exact,표준 편차처음부터 숫자만 ​​제거하는 sed 대신 sed를 사용하세요.SKfzf를 대체합니다.

이 위젯은 여러 줄 명령을 제외하고 훌륭하게 작동합니다.

예를 들면 다음과 같습니다.

여기에 이미지 설명을 입력하세요.

좋다:

여기에 이미지 설명을 입력하세요.

\n그래서 그것은 내가 원하는 것이 아닌 개행 문자를 대체합니다 .

.zsh_history명령은 파일에서 다음과 같습니다.

: 1657176206:0;function brcd() {\
 cd $(broot --only-folders --hidden --cmd "$1;:pp")\
}\

나는 찾았다! NUM 올바른 형식으로 기록을 가져옵니다.

여기에 이미지 설명을 입력하세요.

내 위젯에 어떤 변경이 필요합니까? 이 문제를 어떻게 해결할 수 있나요?

답변1

여기 있어요. 해결책은 다음과 같습니다.

skim-history() {
  num=$(fc -l 1 -1 | sk --tac --no-sort --exact | rg -o '^[ ]*([0-9]*)[ ]*' -r '$1')

  if [ -n "$num" ]; then
      zle vi-fetch-history -n $num
  fi
}

zle     -N   skim-history
bindkey '^R' skim-history

관련 정보