gpt4 book ai didi

shell - 导航到 ZSH 中的目录 (bash)

转载 作者:行者123 更新时间:2023-12-04 02:08:19 27 4
gpt4 key购买 nike

我正在使用 Oh-My-ZSH创建一些辅助功能和功能以减轻我重复的工作负担。

我需要从计算机中的任何位置导航到我的 Frontend 目录。这是我的:

frontend(){
cd ~/Desktop/Work/Frontend
cd $1
}

现在,当我键入 frontendfrontend myProject 时,这很有效,但是,我所有的项目文件夹都以 .m 之类的东西为后缀, .tablet

我怎样才能写出这样的东西:

  • 会让我自动导航到后跟 .something

  • 的文件夹
  • 当有多个选项(如 project.mproject.tablet)时,将提示我选项,类似于您在终端中点击 Tab 键,然后为自动完成提供了多个选项。

我希望我的问题是有道理的。

谢谢。

最佳答案

先找zsh方案,再找bash方案。

更新:事实证明,zsh 实现(基于内置 compctl)比 bash 简单得多> 实现(基于内置的 complete)。

将感兴趣的代码保存到文件中(例如,frontend)并source它(例如,../frontend);以交互方式,或者最好是从您的 bash/zsh 配置文件。

一旦到位,~/Desktop/Work/Frontend 中子目录名称的自动完成将按如下方式工作:

  • 例如,键入 frontend myProject 并按 TAB 键。
  • myProject 然后与 ~/Desktop/Work/Frontend 中的子目录名称进行前缀匹配:
    • 如果只有 1 个匹配项,myProject 将立即扩展为完整的子目录名称。
    • 否则,会发出哔声,表示存在多个匹配项:
      • zsh: 立即列出所有匹配的子目录的名称。
      • bash:再次按 TAB 键列出所有匹配子目录的名称
      • 继续键入,直到前缀匹配明确为止,然后再次按 TAB 键。

注意:在 bash 中,也只需要按 TAB 一次 来列出多个匹配项,将以下内容添加到您的 shell 配置文件 bind "set show-all -if-含糊不清”


zsh解决方案:

# Define the shell function.
frontend(){
cd ~/Desktop/Work/Frontend/"${1:-}"
}

# Tell zsh to autocomplete directory names in the same directory as
# the function's when typing a command based on the shell function.
compctl -/ -W ~/Desktop/Work/Frontend frontend

bash解决方案:

注意:complete -o dirnames 不带参数,不幸的是 - 它总是自动完成当前 目录。因此,需要一个返回潜在匹配项的自定义 shell 函数,并结合 -o filenames

# Define the main shell function.
frontend(){
local BASEDIR=~/Desktop/Work/Frontend
cd "$BASEDIR/${1:-}"
}

# Define the custom completion function.
_frontend_completions() {
local BASEDIR=~/Desktop/Work/Frontend

# Initialize the array variable through which
# completions must be passed out.
COMPREPLY=()

# Find all matching directories in the base folder that start
# with the name prefix typed so far and return them.
for f in "$BASEDIR/${COMP_WORDS[COMP_CWORD]}"*; do
[[ -d $f ]] && COMPREPLY+=( "$(basename "$f")" )
done

}

# Tell bash to autocomplete directory names as returned by the
# _frontend_completions() helper functoin when typing a command
# based on the main shell function.
complete -o filenames -F _frontend_completions frontend fe

关于shell - 导航到 ZSH 中的目录 (bash),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22106852/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com