【问题标题】:zsh issue : have the most recents files and directories near to the prompt and suggested most recent files or directorieszsh 问题:在提示符附近有最近的文件和目录,并建议最近的文件或目录
【发布时间】: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'
  1. 一旦我输入“l”,当我触摸 TAB (auto)-completion 时,我希望在执行“l”+ TAB 完成的提示附近显示最近修改的文件作为建议..

例如,下图是输入简单的“l”命令时(见上面的别名):

主要目标:这篇文章最重要的目标:如果我输入“l+TAB+TAB”,我希望最近的文件/目录首先作为建议出现 :在我的情况下,此命令之后的第一个建议是filename2,第二个“TAB”之后是建议dir_1,第三个建议是dir_8,等等(参见简单命令的顺序“ l")。

  1. 现在,如果我输入“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_MENUMENU_COMPLETE 选项(测试时我似乎需要两者,而不是非此即彼,但请查看手册页)。如果这些都没有帮助,您能否在问题中澄清一下,以便清楚您想要什么:)
  • 要为菜单着色,请查看zsh guide, chapter 6.5.2,对于list-colors,我认为可能会满足您的需求。至于为什么在您的屏幕截图中似乎选择了其中三个项目,那将是一个完全不同的问题:)
  • 您能否更好地解释或说明您所说的“无论我在终端的顶部还是底部,都靠近提示符”?对于3.23.3 这两个问题,行为都与指定的完全相同:reverse 在您的zstyle 中(请参阅file-sort 部分的the Completion System's Standard Styles 文档)。为什么从zstyle两行 行中删除reverse 不能解决此问题?
  • 此外,您的问题列出了两种不同的 zstyle,如果您在此处澄清或删除任何不必要的编辑,将会大大改进,因为实际上很难复制您的系统。跨度>

标签: sorting zsh iterm2 zshrc zsh-completion


【解决方案1】:

让任何命令的文件/目录完成(除非被不同的完成覆盖),按修改日期(从最近到旧)排序,作为详细列表 -

  1. 将以下内容添加到~/.zshrc
autoload -Uz compinit
compinit
zmodload zsh/complist

zstyle ':completion:*' file-list all
zstyle ':completion:*' file-sort date
  1. 重新加载 zsh 配置文件 - 在现有终端会话上运行 source ~/.zshrc 或打开新终端会话以使更改生效

  2. 触发详细列表完成 - 在点击 TAB 之前 - 在命令之后点击 空格。例如l<space><TAB>

  3. 继续点击TAB 进行选择

【讨论】:

  • 感谢您的回答。不幸的是,这不起作用。我邀请您查看我的 UPDATE ,其中我使用 bindkey 接近解决方案,但在我列出所有文件之前出现了建议。当我第二次键入时,我想获得最新的文件建议。最好的问候
  • @Eladio :您是否理解我在 UPDATE 中的最后一个问题,该问题是关于做得不好的建议(建议在第一个 l +TAB 时立即发布最新的问题,而我想要第二次TAB 推送之后的最新建议)?问候
猜你喜欢
  • 2022-06-11
  • 1970-01-01
  • 2014-10-17
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
相关资源
最近更新 更多