gpt4 book ai didi

autocomplete - 如何在 oh-my-zsh 下强制完成文件名?

转载 作者:行者123 更新时间:2023-12-02 03:33:32 28 4
gpt4 key购买 nike

问题:

有时,当我尝试在 zsh 中执行操作时,它不会完成我想要的文件名,因为它们不适用于当前上下文。两个例子:

  • 我想强制添加一个当前在 hg 或 git 中被忽略的文件。 oh-my-zsh 试图通过仅完成未忽略的文件来帮助我,但在这种情况下,这是一个障碍。我被迫手动输入文件的完整路径。
  • 我想使用 git diff区分我硬盘上的两个任意文件。这些文件不驻留在任何存储库中,但谁在乎呢?! git diff --no-index是区分任何两个文件的一种非常好的方法。但是因为它们不在仓库中,所以 zsh 不会完成它们。

  • 建议的解决方案:

    我可以简单地编辑源代码控制上下文以完成所有文件名,而不管它们的源代码控制状态如何。但是有几个限制:
  • 我不知道该怎么做。
  • 拥有一个“逃生舱”可能会很好,无论上下文如何,我都可以强制文件完成。

  • 所以,我决定改为绑定(bind)一个快捷键来强制正常的、无上下文的文件完成。

    我目前拥有的:

    Zsh 显然有一种简单的方法来做到这一点,如 this question 中所述。 .所以我在我的 .zshrc 中添加了以下几行:
    zle -C complete complete-word complete-files
    bindkey '^[[Z' complete
    complete-files () { compadd - $PREFIX* }

    这会导致 shift-tab 启动文件完成。它在标准 zsh 中运行良好!但是嘘,由于某种原因,当我获取 oh-my-zsh 时它不起作用。 :-(

    那么有没有办法让它与 oh-my-zsh 一起工作,或者有没有我可能会觉得令人满意的替代解决方案?

    最佳答案

    我这样做的方式(将默认的 diff 命令替换为 git 中的命令)非常简单。

    将此添加到您的 ~/.zshrc :

    diff() {
    git diff --no-index "$@"
    }

    在我使用别名之前,但由于 zsh 可以“解决”它们,所以它使用了 git diff 中的自动完成功能,无意间导致了和你一样的问题。

    使用函数解决了这个问题,因为 zsh 恢复到经典的“仅文件”完成。

    关于autocomplete - 如何在 oh-my-zsh 下强制完成文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25210388/

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