标签: zsh-completion

如何将自定义git命令添加到zsh完成?

我已经阅读了一些关于zsh完成的指南,但我仍然感到困惑.在我们的开发环境中,我们有一个名为的自定义Git命令git new-branch.我想zsh在输入just git ne和a 之后为我自动完成它Tab.我怎样才能做到这一点?

git zsh-completion

12
推荐指数
1
解决办法
1026
查看次数

如何将Shell补全推迟到bash和zsh中的另一个命令?

我试图编写一个将其他Shell实用程序包装到单个CLI中的Shell脚本实用程序,并试图使Shell完成在zsh和bash中工作。

例如,假设CLI名为util

util aws [...args] #=> runs aws
util docker [...args] #=> runs docker
util terraform [...args] #=> runs terraform
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想要的是zsh和bash补全中的一种方式,它能够独立于包装脚本的补全实现说“像其他命令Y一样完成此子命令X”。

就像是:

compdef 'util aws'='aws'
compdef 'util docker'='docker'
compdef 'util terraform'='terraform'
Run Code Online (Sandbox Code Playgroud)

扩展目标将是允许对另一个二进制文件中的子命令完成任意子命令:

util aws [...args] #=> completes against `aws`
util ecr [...args] #=> completes against `aws ecr`
Run Code Online (Sandbox Code Playgroud)

有可能吗?我一直在尝试模拟单个二进制文件的完成脚本,但是在编写其他完成脚本的方式上有很大的不同。

bash zsh bash-completion zsh-completion completion

12
推荐指数
1
解决办法
356
查看次数

zsh 问题:在提示符附近显示最新的文件和目录以及建议的最新文件或目录

在 MacOS Big Sur 11.3 上,这是我的.zshrc. 我想获取最新的修改或创建靠近提示的文件和目录(从最新到最旧的排序)。这是我当前的配置~/.zshrc

# ZSH completion
autoload -Uz compinit
compinit
# Colorize completions using default `ls` colors.
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"

# Zsh reverse auto-completion
zmodload zsh/complist
bindkey '^[[Z' reverse-menu-complete
# To get new binaries into PATH
zstyle ':completion:*' rehash true

zstyle ':completion:*:complete:(ls):*' file-sort date reverse
zstyle ':completion:*:complete:(cd):*' file-sort date reverse
zstyle ':completion:*:complete:(cp):*' file-sort date reverse
zstyle ':completion:*:complete:(mv):*' file-sort date reverse

# Variables not very well known
# Disable prompt disappearing on …
Run Code Online (Sandbox Code Playgroud)

sorting zsh zshrc zsh-completion iterm2

11
推荐指数
1
解决办法
1557
查看次数

zsh完成long列表的last_prompt行为

我目前配置我的zsh选项卡完成:

 autoload -U compinit && compinit
 zstyle ':completion:*:default' menu select=0
 zstyle ':completion:*:default' select-scroll 0
Run Code Online (Sandbox Code Playgroud)

我喜欢这个是:

  1. 毫不含糊的完成立即完成
  2. 尽可能扩大模糊的完成(标签的第一次攻击)和歧义被列入我(第二次攻击)
  3. 进一步点击标签(列表出现后又一个标签笔划)我通过菜单选择',即提示停留在歧义列表上方,其中一个突出显示并插入提示中,然后进一步点击标签,我去下一个项目.即使在无法显示歧义列表的情况下,提示下方的列表也会滚动.

我不喜欢的:

  • 如果列表太长而无法显示,则首先完全打印并且提示结束于列表下方,并且仅在下一个笔划时,我再次在终端顶部进行菜单选择模式.

所以我想将行为改为:

  1. 毫不含糊的完成立即完成
  2. 模糊完成尽可能扩展(选项卡的第一次打击)和模糊性列在我身上,总是低于提示,即使列表太长也无法完全显示(无论是第一次还是第二次中风)
  3. 进一步点击标签(列表出现后又一个标签笔划)我通过菜单选择',即提示停留在歧义列表上方,其中一个突出显示并插入提示中,然后进一步点击标签,我去下一个项目.即使在无法显示歧义列表的情况下,提示下方的列表也会滚动.

一个关键的方面是在第一个插入提示之前显示歧义列表.否则我已经可以使用了

zstyle ':completion:*:default' menu select=0 yes=0
Run Code Online (Sandbox Code Playgroud)

zsh-completion

10
推荐指数
0
解决办法
266
查看次数

自定义 git“bang”别名的 Zsh 完成 - Git 分支名称

我有一个 Git 别名update,我想为其配备分支名称完成功能。别名定义如下:

[alias]
        update = "!f() { git push . origin/$1:$1; }; f"
Run Code Online (Sandbox Code Playgroud)

(它使用其上游版本更新本地跟踪分支,而无需检查该分支。不过,对于特定问题并不重要。)

我希望该命令为其$1参数补全现有的分支名称。我知道我可以定义一个调用_git-update来控制完成的函数,但是我缺少一些使其工作的部分:

_git-update ()
{
  ***some-function-here*** "$(__git_branch_names)"
}
Run Code Online (Sandbox Code Playgroud)

我正在使用安装在 OS X 上的完成brew install zsh-completions,这是在https://github.com/zsh-users/zsh-completions设置的。

(这个问题直接类似于/sf/answers/2891556601/,但针对 Zsh 而不是 Bash。)

git zsh tab-completion zsh-completion git-alias

10
推荐指数
1
解决办法
578
查看次数

忽略zsh git自动完成中的ORIG_HEAD

我使用oh-my-zsh和git自动完成.

如果我输入git checkout org并点击TAB,我会得到以下结果:

ORIG_HEAD
origin/HEAD
origin/mybranch
Run Code Online (Sandbox Code Playgroud)

如何使自动完成忽略ORIG_HEAD

git zsh zsh-completion

9
推荐指数
1
解决办法
441
查看次数

在 Linux 上在哪里放置 zsh 自动完成脚本?

安装cheat(命令行中的命令备忘单)后,我尝试使用提供的 zsh 脚本启用自动完成功能。但是,我似乎没有找到脚本的正确位置。

迄今为止

  • 我取了cheat.zsh;
  • 复制到~/.oh-my-zsh/custom/plugins/cheat/_cheat.zsh
  • 作弊添加到plugins我的数组中~/.zshrc
  • 重新加载我的外壳。

键入时不会自动完成cheat d<TAB>

那么在Linux上在哪里放置zsh​​自动完成脚本?

linux ubuntu zsh zsh-completion oh-my-zsh

9
推荐指数
2
解决办法
8702
查看次数

从文件中创建zsh完整参数

zsh很棒,但它的完成系统非常多样化.文档缺乏很好的例子.是否有用于完成特定应用程序的模板.完成将从文件中获取其匹配数据,由换行符分隔?

我尝试修改我的旧示例,将匹配数据"生效":

~ % cat .zsh/completers/_jazzup 
#compdef jazz_up
_arguments "2: :(`mpc lsplaylists|sed -e 's# #\\\\ #g'`)"
Run Code Online (Sandbox Code Playgroud)

我可以cat my_file在那里提供而不是mpc调用等等但是有没有更优雅的方式来完成这个简单的任务?并且该完成具有特定于位置:您是否可以提供一个示例,其中zsh将在识别程序名称后的任何时刻尝试完成?

匹配数据将具有空格等等,完成应该逃避WS.例子:

Foo bar
Barbaric
Get it (42)
Run Code Online (Sandbox Code Playgroud)

现在,如果为命令配置完成Say,我们应该从以下方面获得这种行为zsh:

$ Say Fo<TAB>
$ Say Foo\ bar
$ Say Ge<TAB>
$ Say Get\ it\ \(42\)
Run Code Online (Sandbox Code Playgroud)

zsh zsh-completion

8
推荐指数
1
解决办法
1834
查看次数

Git 选项卡完成停止在远程分支上工作

我已将 git 更新到其最新版本 (2.29.0) 并使用 ZSH 5.8。

我曾经在分支之间切换,git checkout remote_br<tab>以在分支之间快速切换,即使分支只是远程一个atm。我见过的git已经取得了很多关于开关/结账的变化最近,事情是我对远程分支机构的自动完成不工作了(与结账或交换机)。

我已经尝试将最新版本添加contrib/completion/git-completion.zsh到我的 zsh,但我仍然有我的问题。我在这里错过了什么吗?

git zsh zsh-completion oh-my-zsh

8
推荐指数
1
解决办法
750
查看次数

自定义脚本的 ZSH 自动完成

我已经在网上搜索了很多小时,通宵达旦,因为我在这个兔子洞中迷失了:D,但我很难找到工作代码的示例。

我有一个 bash 脚本,其调用方式如下例所示:

foo-tools.sh switch <version number>
foo-tools.sh start 
foo-tools.sh open-ports on 
foo-tools.sh kube get logs 
foo-tools.sh kube edit ing default-ingress -oyaml
Run Code Online (Sandbox Code Playgroud)

我使用 zsh 和 oh-my-zsh 作为我的 shell。

我希望能够输入“foo-tools.sh”来列出所有可用选项,并且我希望能够使用“foo-tools.sh k”自动完成选项,这意味着它应该列出以“foo”开头的所有可用选项-tools.sh k*" 或者如果只有一个选项自动完成命令。

我在一些 stackoverflow 线程上找到了这段代码,这是我让它完全工作的结束:

#compdef foo-tools.sh

_foo_tools_sh() {
    typeset -A opt_args
    local alternatives

    alternatives=(
        'args:rv options:_foo_tools_sh_options'
    )

    _alternative $alternatives && return 0

    return 1
}

_foo_tools_sh_options() {
    local -a arguments=(
        'start:Start VP'
        'stop:Stop VP]'
        'kube:Kube CMD'
        'kube logs:Kube logs'
        'info:Display info'
        'get:Get CMD'
        )

    _sequence _describe 'cmds' arguments …
Run Code Online (Sandbox Code Playgroud)

terminal zsh zsh-completion oh-my-zsh

8
推荐指数
1
解决办法
1338
查看次数