zsh 相当于 bash 中的“pushd -n”是什么?

zsh 相当于 bash 中的“pushd -n”是什么?

我想将目录推送到目录堆栈上,以便使用“波形符简写”引用它(例如,~1引用目录列表中的第二个条目),但我不想实际切换到该目录。在 bash 中,这似乎可以使用标志-nto 来完成pushd

zsh 中的等效项是什么?

答案1

您可以编辑dirstack多变的。

function insertd {
  emulate -L zsh
  typeset -i n=0
  while [[ $1 == [+-]<-> ]]; do
    n=$1
    shift
  done
  if (($# != 1)); then
    echo 1>&2 "Usage: insertd [+N|-N] DIR"
    return 3
  fi
  dirstack=($dirstack[1,$n] $1 $dirstack[$n,-1])
}

如果您想将此行为添加到pushd自身中,可以将其设为函数。

function pushd {
  if [[ $1 == -n ]]; then
    shift
    insertd "$@"
  else
    builtin pushd "$@"
  fi
}

这个简单的版本并不-n像 bash 那样对待 和 另一个选项的组合。

你甚至可以编辑变量直接地。

vared dirstack

答案2

你总是可以推送它然后交换。

例如,pushd -q ~/Downloads; pushd

相关内容