【发布时间】:2022-06-19 06:23:11
【问题描述】:
在 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 multi-lines
export COMPLETION_WAITING_DOTS="false"
问题是当我在实际上是别名的“l”之后按 TAB 时:
alias l='grc -es --colour=auto ls --color -Gh -C -lrt'
grc 是一个为文件着色的工具。
确实,我没有将建议的最近修改或创建的文件或目录作为第一个结果。
在按 TAB 键这些最近(修改或创建)文件或目录后,我可以在 zsh completion 中添加哪个选项以获得第一个结果?
应用的第一个命令是“l”,对应别名:
alias l='grc -es --colour=auto ls --color -Gh -C -lrt'
-
一旦我输入“
l”,当我触摸 TAB (auto)-completion 时,我希望在执行“l”+ TAB 完成的提示附近显示最近修改的文件作为建议..
例如,下图是输入简单的“l”命令时(见上面的别名):
主要目标:这篇文章最重要的目标:如果我输入“l+TAB+TAB”,我希望最近的文件/目录首先作为建议出现 :在我的情况下,此命令之后的第一个建议是filename2,第二个“TAB”之后是建议dir_1,第三个建议是dir_8,等等(参见简单命令的顺序“ l")。
- 现在,如果我输入“
l+TAB”,我会得到:
在选项中,当我执行“l+TAB”但我没有知道在~/.zshrc 中添加或修改哪一行。这不是优先事项。
更新 1: 在"l" alias 之后,我几乎找到了typing twice on TAB key 的解决方案,可以将其同化为ls -lrt。这里是 peudo 魔术命令:
bindkey '\t' reverse-menu-complete
但问题在于,使用此选项时,当我第一次按下 TAB 时,会自动使用最新的文件或目录完成建议。
示例:我如果这样做:$ l +TAB,我会在上面捕获以下内容:
我想要获得的是当我在 TAB 上第二次输入时获得最新的文件建议,而不是在我第二次输入时获得。我希望你能理解我的要求。如果不清楚,请告诉我。
更新 2: 我接近最终想要的行为。我设置:
zstyle ':completion:*:complete:(ls|cd|cp|mv|vim|cat|more|tail|head|open):*' file-sort date reverse
bindkey '^\t' reverse-menu-complete
bindkey '^[[Z' menu-complete
如果我执行第一个l + TAB,我会首先自动添加正确的最新文件,然后第二个TAB 推送建议从最新到最旧的文件(倒序)。
它只是缺少一个修改l + TAB,它不必添加建议文件,只需列出从最旧到最新的所有文件,然后在第二个TAB 之后,首先用@建议较旧的最新文件987654360@.
【问题讨论】:
-
这里散布了多个问题,并且您的
completion字符串似乎有不同的版本(有些使用modification,有些使用date)。最后一个问题似乎是“如何计算终端仿真窗口的大小并将其与列出当前目录中所有文件所需的行数进行比较”;你可能想在一个单独的问题中问这个问题?您的title的答案已经给出:zstyle ':completion:*' file-sort date,然后输入l,然后输入TAB,第一个建议是最新文件。 -
我认为您确实在尝试更改完成菜单的行为(而不是其中的选项)。检查compsys
standard style文档的menu部分;尝试zstyle ':completion:*' menu yes=long select在屏幕上显示太多选项时显示菜单。或者总是尝试设置AUTO_MENU和MENU_COMPLETE选项(测试时我似乎需要两者,而不是非此即彼,但请查看手册页)。如果这些都没有帮助,您能否在问题中澄清一下,以便清楚您想要什么:) -
要为菜单着色,请查看zsh guide, chapter 6.5.2,对于
list-colors,我认为可能会满足您的需求。至于为什么在您的屏幕截图中似乎选择了其中三个项目,那将是一个完全不同的问题:) -
您能否更好地解释或说明您所说的“无论我在终端的顶部还是底部,都靠近提示符”?对于
3.2和3.3这两个问题,行为都与指定的完全相同:reverse在您的zstyle中(请参阅file-sort部分的the Completion System's Standard Styles 文档)。为什么从zstyle的两行 行中删除reverse不能解决此问题? -
此外,您的问题列出了两种不同的 zstyle,如果您在此处澄清或删除任何不必要的编辑,将会大大改进,因为实际上很难复制您的系统。跨度>
标签: sorting zsh iterm2 zshrc zsh-completion