8

ここで尋ねられたのと同じことを達成したかったのですが、現在のディレクトリをbash履歴に保存しますが、Zshシェル内にあります。私はこれまでZshのトリックを行ったことがありませんが、これまでのところ次のことを行っています。

function precmd {
  hpwd=$history[$((HISTCMD-1))]  
  if [[ $hpwd == "cd" ]]; then  
    cwd=$OLDPWD
  else
    cwd=$PWD
  fi
  hpwd="${hpwd% ### *} ### $cwd"
  echo "$hpwd" >>~/.hist_log
}

今、私はディレクトリ名で注釈が付けられたコマンドをログファイルに保存します。これは私にとってはうまくいきます。履歴バッファ自体に同じ置換を行う方法があるかもしれないと思っただけです。

4

3 に答える 3

9
function _-accept-line() {
    [[ -z "${BUFFER" ]] || [[ "${BUFFER}" =~ "### ${(q)PWD}\$" ]] || BUFFER="${BUFFER} ### ${PWD}"
    zle .accept-line
}
zle -N accept-line _-accept-line

### ${PWD}コマンドラインに追加します。使用できる最良のソリューションではありませんが、機能します。

UPD: @Dennis Williamson のコメントに基づく回答:

function zshaddhistory() {
    print -sr "${1%%$'\n'} ### ${PWD}"
    fc -p
}
于 2010-05-13T12:07:27.323 に答える
3

すべてのコマンドで保存するのではなく、ディレクトリを変更したときに保存するために、 precmd() 関数の先頭に次を追加しました。

    if [ "$LAST_DIR" != "$PWD" ]
    then
            print -s "##dir## $PWD"
            LAST_DIR=$PWD
    fi

コマンドが新しいディレクトリから実行されるたびに、'##dir## dir name' スタンドアロン行を履歴に追加します。

于 2011-10-13T17:20:22.563 に答える