我在 zsh 中的 CDPATH 如下所示:
export CDPATH='.:..:../..'
Run Code Online (Sandbox Code Playgroud)
不幸的是,这意味着当我在输入 'cd' 后尝试自动完成时,有太多不相关的自动完成选项,这取决于我在哪里。例如,如果我在我的主目录中,输入 cd 会尝试自动完成系统上的每个用户,因为 CDPATH 有“..”
有没有办法让我的 CDPATH 如上所示,但让 cd、pushd 等的自动完成忽略 CDPATH 值,并且仅基于当前目录自动完成?
path-directories一种方法是在您的建议源中添加以下完成设置以将.zshrc其删除path-directories。
zstyle ':completion:*:complete:(cd|pushd):*' tag-order \
'local-directories named-directories'
Run Code Online (Sandbox Code Playgroud)
或者或另外,以下设置应显示所有相应完成建议组的标题,以便您可以查看哪些目录是本地目录,哪些是来自cdpath.
zstyle ':completion:*' group-name ''
zstyle ':completion:*:descriptions' format %d
Run Code Online (Sandbox Code Playgroud)
您可以对这些描述应用标准提示格式,使它们脱颖而出:
zstyle ':completion:*:descriptions' format %B%d%b # bold
# zstyle ':completion:*:descriptions' format %S%d%s # invert/standout
# zstyle ':completion:*:descriptions' format %U%d%u # underline
# zstyle ':completion:*:descriptions' format %F{green}%d%f # green foreground
# zstyle ':completion:*:descriptions' format %K{blue}%d%k # blue background
# etc.
Run Code Online (Sandbox Code Playgroud)
根据我的经验,这有助于理解不同的来源。
注 1:zsh有两种表示数组变量的表示,例如PATH和CDPATH,其中小写变体是实际数组。这意味着您可以:
cdpath=(path/to/dir /path/to/another/dir)
Run Code Online (Sandbox Code Playgroud)
或者,为了获得您想要的结果:
cdpath=(.. ../..)
Run Code Online (Sandbox Code Playgroud)
我个人认为它比冒号分隔的伪数组更具可读性。
注意 2:CDPATH除非您有多个需要设置的程序,否则不需要导出。
| 归档时间: |
|
| 查看次数: |
4311 次 |
| 最近记录: |