不是重复的:
我不是在寻找一种方法来完成目录名称或从固定目录执行脚本。我试图解决的问题是在不按的情况下完成当前目录/
我希望 zsh 完成选项卡.
以./
喜欢 bash。
使用 bash,我习惯于按下.TABTAB以查看当前工作目录中的所有文件,因为它首先完成./
并显示该目录中的所有内容。我希望/不惜一切代价避免的原因是,这/在我的德语键盘上要困难得多,TAB因为它要么用 2 个手指带 shift 要么在小键盘上远离,我宁愿切换回 bash 而不是键入 a /
。我想实现什么,换句话说 bash 做什么:
$ . <TAB>
$ ./ <TAB>
foo.sh somedir/
$ ./ <F><TAB>
$ ./foo.sh <ENTER>
Run Code Online (Sandbox Code Playgroud)
当我点击时使用 zsh / oh-my-zsh.TAB我得到.
(点空间)这对我来说根本没有用。
zstyle ':completion:*' special-dirs true
with setopt auto_cd
(这是 oh-my-zsh 默认值)给了我一个更不实用的选项../
on top,所以我已经把它关掉了。我很高兴完成cd
..
打开$PATH
,它应该保持这种状态。虽然我不介意完成 eg f<TAB>
to./foo.sh
例如。我怎么能教zsh来完成.
,以./
甚至更好的本地目录中的内容,对吗?或者是否有另一种方式以不涉及的有效方式处理本地脚本文件/?
伟大的挑战!在命令行上尝试一下,如果有效,请将其添加到 ~/.zshrc
bindkey '^I' dotcomplete
zle -N dotcomplete
Run Code Online (Sandbox Code Playgroud)
function dotcomplete() {
if [[ $BUFFER =~ ^'\.'$ ]]; then
BUFFER='./'
CURSOR=2
zle list-choices
else
zle expand-or-complete
fi
}
Run Code Online (Sandbox Code Playgroud)
它添加了一个在每次按 TAB (^I) 时运行的函数。如果您当前输入的行仅包含一个点(^=行首,'\.'=超级转义点,$=行尾),则用 ./ 替换该点,然后继续正常完成。
它并不完全按照您的要求执行,即将点视为当前目录。但它会节省您想要保存的击键次数。