标签: zsh-completion

git添加自动完成文件名

我正在开发一个git项目.由于我有很多文件夹深度,我想改进我的自动完成以使用文件名而不仅仅是路径.

这是一个例子:

$git status                                                                                                                        1 ?  ?master 
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   app/src/main/java/fr/pasteque/client/BaseFlavor.java
    modified:   app/src/main/java/fr/pasteque/client/widgets/RestaurantTicketsAdapter.java

no changes added to commit (use "git add" and/or "git commit -a")
Run Code Online (Sandbox Code Playgroud)

我显然必须添加一个文件:

git add app/src/main/java/fr/pasteque/client/BaseFlavor.java

但我很乐意写: git add BaseFlavor.java

git add **/BaseFlavor.java 作品!

但完成,就像git add **/Base<tab>,不..

任何想法如何完成?

提前致谢!

git zsh zshrc zsh-completion

7
推荐指数
1
解决办法
1747
查看次数

ZSH 在打开应用程序选项卡自动完成上挂起

我经常使用命令在 Mac 上打开应用程序open -a <application-name>。我最近也一直在使用选项卡自动完成来完成我的命令。例如,我尝试在编写open -a或后执行此操作open -a Safa,但是当我点击选项卡时,zsh 挂起,我无法在窗口中输入任何其他内容。这也没有提供应有的自动完成选项。我在终端和 iTerm2 中都尝试过此操作,但问题仍然存在。

我使用的是 zsh 5.7.1。我的电脑上还安装了 Oh My Zsh。

以防万一有帮助,这是我的.zshrc文件:

# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH

# Path to your oh-my-zsh installation.
export ZSH="/Users/noahwilder/.oh-my-zsh"

# Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case,
# to …
Run Code Online (Sandbox Code Playgroud)

shell terminal command-line zsh zsh-completion

7
推荐指数
1
解决办法
3261
查看次数

不确定将 Oh My Zsh 的补全放在哪里

我正在使用 zsh,哦我的 zsh,我对在哪里放置完成文件有点困惑。

例如,安装时kind,我这样做:

brew install kind
kind complete zsh > ~/.oh-my-zsh/cache/completions/_kind
Run Code Online (Sandbox Code Playgroud)

我预计竣工kind工作将开始进行。我是否将它们放在错误的目录中?

如果我autoload -U compinit && compinit在当前终端中执行此操作,则完成工作将一直持续到我重新启动终端为止。

我认为我的.zshrc水平相当标准,这基本上就是我所拥有的:

# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
  source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi

export ZSH="$HOME/.oh-my-zsh"

DISABLE_MAGIC_FUNCTIONS="true"

plugins=(
  git
  gh
  docker …
Run Code Online (Sandbox Code Playgroud)

zsh zshrc zsh-completion oh-my-zsh

7
推荐指数
1
解决办法
6788
查看次数

绑定键以在Zsh中的上下文的任何位置完成文件名

有时我想要一个文件名而不是zsh为我猜测的.例如,我有一个没有正确.png后缀的PNG文件,这使得zsh认为它不是图片,并且当我输入Tab完成参数时不会列出它display.

我想知道是否有是完成了一个文件名的任何地方上下文,就像一个键序列^XC_correct_filename,或者如何配置的zsh做的事情吗?

zsh zsh-completion

6
推荐指数
2
解决办法
1205
查看次数

使用zsh的compdef或者compctl完成某个目录下所有命令的_hosts

我使用 afuse 通过 sshfs 将其他主机自动挂载到我的本地文件系统。像这样:

afuse -o timeout=30 -o mount_template=sshfs -C %r:/ %m -o unmount_template=fusermount -u -z %m ~/remote/
Run Code Online (Sandbox Code Playgroud)

这很好用,但我希望能够使用我的 ~/remote 目录自动完成/TAB 命令。Zsh 认为 ~/remote 是空的,这是可以理解的,因为 afuse 是一个神奇的虚拟 FUSE 文件系统。一旦我手动输入主机,子目录就可以正常工作。例如 ~/remote/host/[TAB] 工作正常。

大多数 zsh compdef 教程都专注于为您的自定义命令构建自定义完成程序。那不是我想要的。

我一直在尝试使用 compdef 将特定目录的完成覆盖到我的主机文件中(使用内置的 _hosts 完成功能),但据我所知, compdef 基于每个命令工作。我希望我的完成者能够处理所有试图在该目录上执行普通文件/目录完成的命令。

感觉它是如此基本,以至于它是单线的,如果我知道的话。我怎样才能做到这一点?

zsh fuse sshfs zsh-completion

6
推荐指数
1
解决办法
1036
查看次数

zsh根据参数完成

我是一个非常开心的zsh用户,尤其欣赏它的完成子系统.最近我试图增强一些完成命令,特别是那些我经常使用的命令(例如rm).在zsh中使用以下命令:

rm <TAB>
Run Code Online (Sandbox Code Playgroud)

使zsh按预期完成当前目录的文件.我想要做的是使zsh完成以下变体:

rm -r <TAB>
Run Code Online (Sandbox Code Playgroud)

只有目录.

任何知道如何参数完成的zsh Guru,以便考虑(-r)参数?

shell zsh zsh-completion

6
推荐指数
1
解决办法
361
查看次数

zsh中的多点路径,如`cd ....`

所有shell都理解这些命令:

$ cd .
$ cd ..
Run Code Online (Sandbox Code Playgroud)

zsh也会理解:

$ cd ...
$ cd ....
Run Code Online (Sandbox Code Playgroud)

如果你说:

$ alias -g ...='../..'
$ alias -g ....='../../..'
Run Code Online (Sandbox Code Playgroud)

现在,当我开始输入时,如何才能使其完成正确的制表工作cd ..../<TAB>?我记得它是在oh-my-zsh中实现的,但我现在已经停止使用了.

如果它不仅可以用于cd我想要执行,那么也将不胜感激cat ..../a/b/..../c/d | less.

zsh zsh-completion zsh-zle

6
推荐指数
4
解决办法
2307
查看次数

哦我的 zsh - compdef git 插件 - 为什么需要 _git

请参阅git.plugin.zsh 文件中的这一行:

compdef _git gdv=git-diff
Run Code Online (Sandbox Code Playgroud)

zsh 用户 compdef 教程中,compdef引用现有命令的解释如下:

compdef cmd1=cmd2
Run Code Online (Sandbox Code Playgroud)

显而易见的问题:为什么_git需要?

git zsh zsh-completion oh-my-zsh

6
推荐指数
0
解决办法
330
查看次数

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

问题:

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

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

建议的解决方案:

可以简单地编辑源代码控制上下文来完成所有文件名,而不管它们的源代码控制状态如何。但是有几个限制:

  1. 我不知道该怎么做。
  2. 有一个“逃生舱口”可能会很好,无论上下文如何,我都可以强制完成文件。

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

到目前为止我所拥有的:

Zsh 显然有一种简单的方法可以做到这一点,如本问题所述。所以我在我的中添加了以下几行.zshrc

zle -C complete complete-word complete-files
bindkey '^[[Z' complete
complete-files () { compadd - $PREFIX* }
Run Code Online (Sandbox Code Playgroud)

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

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

zsh autocomplete zsh-completion oh-my-zsh

5
推荐指数
1
解决办法
1485
查看次数

zsh 完成虚拟路径

我想为具有虚拟文件树的工具创建 zsh 完成。例如,我的文件树如下所示:

/
|- foo/
|  |- bar
|  |- baz/
|     |- qux
|- foobar
Run Code Online (Sandbox Code Playgroud)

我的工具mycmd有一个用于列出当前目录的子命令:

$ mycmd ls
foo/
foobar
$ mycmd ls foo/
bar
baz/
Run Code Online (Sandbox Code Playgroud)

我实际的 zsh 完成看起来是这样的:

_mycmd_ls() {
    if [ ! -z "$words[-1]" ]; then
        dir=$(dirname /$words[-1])
        lastpart=$(basename $words[-1])
        items=$(mycmd ls $dir | grep "^$lastpart")
    else
        items=$(mycmd ls)
    fi
    _values -s ' ' 'items' ${(uozf)items}
}


_mycmd() {
    local -a commands

    commands=(
        'ls:list items in directory'
    )

    _arguments -C -s -S -n …
Run Code Online (Sandbox Code Playgroud)

zsh zsh-completion

5
推荐指数
1
解决办法
139
查看次数