ファジー検索履歴:複数行コマンドに対して行をそのまま保持しながら履歴を表示します。

ファジー検索履歴:複数行コマンドに対して行をそのまま保持しながら履歴を表示します。

検索履歴を難読化するために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

関連情報