限制Git Tab自动完成

fzsnzjdm  于 2022-11-20  发布在  Git
关注(0)|答案(1)|浏览(135)

我最近升级了我的笔记本电脑,并一直在确保我的开发工作流程是我所习惯的。除了Git标签自动完成之外,一切都工作正常。
通常我可以输入git che,然后点击tab键,它会自动完成到git checkout。但不管什么原因,在我的新笔记本电脑上,它不会这样做。现在它会列出所有以“che”开头的选项(check-attr,check-ignore,cherry,cherry-pick等)。
我读了很多书,但似乎不知道是什么导致了这一点,也不知道如何改变它。
规格:笔记本电脑- Macbook Pro M1 shell - zsh
注意:我认为这可能与Zsh的tab-completion library有关,但不知道如何更改它。
我已经阅读了文档并更新了zshrc文件
添加和删除:
autoload -Uz compinit && compinit

jdzmm42g

jdzmm42g1#

有趣的问题!我调查了一下,发现如下:
git有两个独立的zsh补全系统:

  1. git(https://github.com/git/git/blob/master/contrib/completion/git-completion.zsh)附带的一个,如the docs you linked所示,它基于任何可用的git二进制文件提供了你所拥有的补全系统。
    1.与zsh(https://github.com/zsh-users/zsh/blob/master/Completion/Unix/Command/_git)一起发布的版本要复杂得多,而且显然更能感知上下文。
    使用一个空的zshrczsh -d -f -i)启动一个新的zsh会话,我们会看到:
josh% autoload -Uz compinit && compinit
josh% git che<TAB>
check-attr       -- display gitattributes information
check-ignore     -- debug gitignore/exclude files
check-mailmap    -- show canonical names and email addresses of contacts
check-ref-format -- ensure that a reference name is well formed
checkout         -- checkout branch or paths to working tree
checkout-index   -- copy files from index to working directory
cherry           -- find commits not merged upstream
cherry-pick      -- apply changes introduced by some existing commits

然后,在加载其他完井系统后(我将在下面讨论如何准确地执行此操作):

josh% git che<TAB>

变成

josh% git checkout

那么我们如何切换呢?我的方法是通过OMZ插件gitfast。我实际上并不(但愿不会)使用OMZ,而是克隆插件并将其源代码导入到我的fpath中的zshrcfpath=( $XDG_CONFIG_HOME/ohmyzsh/plugins/gitfast $fpath )
但看起来更直接的方法是按照该repo中_git的说明操作:

# The recommended way to install this script is to make a copy of it as a
# file named '_git' inside any directory in your fpath.
#
# For example, create a directory '~/.zsh/', copy this file to '~/.zsh/_git',
# and then add the following to your ~/.zshrc file:
#
#  fpath=(~/.zsh $fpath)
#
# You need git's bash completion script installed. By default bash-completion's
# location will be used (e.g. pkg-config --variable=completionsdir bash-completion).
#
# If your bash completion script is somewhere else, you can specify the
# location in your ~/.zshrc:
#
#  zstyle ':completion:*:*:git:*' script ~/.git-completion.bash

相关问题