我有一个shell模式,将某些文件标记为"无聊",即备份文件,pyo
文件,vim备份,自动生成的目录等.我们称之为$BORING_STUFF
.
zstyle ':completion:*' file-patterns \
'%p:globbed-items' \
'*(^-/):regular-files' \
'*(^-/):boring-files' \
'.*(^-/):hidden-files' \
'*(-/):regular-directories' \
'*(-/):boring-directories' \
'.*(-/):hidden-directories'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我的每个组的范围也受适用的约束ignore-patterns
.(这样boring-files
只包含无聊的文件,regular-files
不包含枯燥的文件)
我希望总是出现大胆的项目,如果没有其他匹配项,则只显示其他项目.(Aka.touch <tab>
将显示常规目录和常规文件,但不显示隐藏文件,同时touch .<tab>
将显示隐藏文件.)
在zsh中,我试图了解哪些命令具有现有的完成,以便我可以为不能执行的命令编写完成.
有没有办法列出zsh将完成的命令而无需点击完成文件?例如,是否有一个内置命令会列出它们?
Vim具有“智能大小写”功能,使搜索不区分大小写,但前提是搜索包含所有小写字母。在搜索任何大写字母时,smartcase会假定您要区分大小写。有没有办法在zsh的制表符完成中获得相同的行为?
在 bash shell 脚本中,您可以提示用户输入并使用该-e
标志为用户启用 readline 完成。(例如read -e -p 'GET YOUR FILE: ' file
,允许用户使用制表符完成来查找文件。)
ZSH 的完成更加先进且可扩展,因此我希望我能够找到一个允许类似行为的 zsh 内置函数。
我最近从 bash 切换到 zsh。如何实现以下选项卡完成行为:
输入第一个字母,然后按TAB
。完成输入直到第一个不明确的字母并立即显示选项/替代方案。
目前,它的行为是这样的:
# ls .m*
.mysql_history .matlab .matplotlib .mono .mozilla
# cd .m<TAB>
.matlab/ .matplotlib/ .mono/ .mozilla/
# cd .mo<TAB>
.mono/ .mozilla/
# cd .ma<TAB><TAB> (here two tabs are necessary: the first one completes to .mat,
the second one show .matlab and .matplotlib)
Run Code Online (Sandbox Code Playgroud)
在最后一种情况下,我想去掉第二个选项卡。zshs 完成系统可以做到这一点吗?
这是我的当前.zshrc
:
HISTFILE=~/.histfile
HISTSIZE=10000
SAVEHIST=1000
# Options
setopt autocd
# Aliases
alias ls='ls --color -h --group-directories-first'
alias ll='ls -laF --color -h --group-directories-first'
alias la='ls -A --color -h --group-directories-first' …
Run Code Online (Sandbox Code Playgroud) 我正在编写一些 zsh 补全,但我一直在思考如何拥有多组补全。
-J
我使用参数docs添加了组名称。
compadd -J group1 "$@" completion1 completion2
compadd -J group2 "$@" completion3 completion4
Run Code Online (Sandbox Code Playgroud)
然后我将其添加zstyle
到我的~/.zshrc
文档中(标题group-name
:)
zstyle ':completion:*' group-name ''
Run Code Online (Sandbox Code Playgroud)
完成情况正常,但组名称未显示。我究竟做错了什么?
我想知道 zsh 使用哪个函数来完成命令的制表符。\n对于许多命令(make
、ls
、cd
\xe2\x80\xa6),我显然可以猜测_<COMMANDNAME>
,但实际上我可能已经用 覆盖了此设置compdef _mycd cd
。
我想知道这个问题的原因有两个:
\n\n_nice
,但我可能不依赖shift; CURRENT--; _normal
)我发现有关Azure CLI(az
命令)的bash [1]可用命令完成的提示,但是我没有找到有关如何为zsh安装/启用该命令的任何指示。如果可能的话,有人知道该怎么做吗?如果相关,我使用oh-my-zsh。
被 macOS Catalina 拖入 21 世纪,现在默认为它的 shellzsh
而不是bash
它的 shell,我试图恢复一些 bash 的行编辑行为。具体来说,如果我在行尾:
bash$ ls /foo/bar/baz
Run Code Online (Sandbox Code Playgroud)
然后我按 Alt-左箭头键,光标跳到“baz”,然后是“bar”,然后是“foo”。与大多数环境(例如 Safari 和使用 Cocoa 文本编辑功能的应用程序)一样,它将斜杠视为单词分隔符。
在zsh
,当我尝试做同样的事情时,第一个 Alt-Left Arrow 将光标一直跳回到“/foo/bar/baz”的开头,这使得它对于直接编辑 long 的部分不太有用.
这可以在zsh中配置吗?如果是这样,如何?
iTerm 2
在终端( on )中使用向上和向下箭头时Mac OS Catalina
,我可以使用向上和向下箭头浏览最后的命令。
我使用ZSH
(Oh-my-zsh
准确地说),如果我输入 例如vim
然后按向上键,它将浏览我的历史记录以查找以 开头的任何命令vim
。
我觉得必须将手移到箭头键上很烦人,所以我想绑定ctrl-j
并ctrl-k
上下浏览。
我看着bindkey
并绑定^j
到down-history
和^k
到up-history
。这允许我浏览我的历史记录,但不能使用“智能”功能(我不确定这里的术语是否正确) - 它只是在我的历史记录中上下移动,而不考虑我的输入。
我已经浏览了手册上的标准小部件Zsh Line Editor
,但我找不到正确的命令。
我应该绑定哪个命令^j
来^k
获得我想要的结果?
zsh-completion ×10
zsh ×9
bash ×2
autocomplete ×1
azure ×1
azure-cli ×1
linux ×1
shell ×1
zshrc ×1