更喜欢引用而不是转义以完成 ZSH

Prefer quoting vs. escaping for ZSH completion

ZSH 是一个很棒的 shell,所有为它编写的优秀的自动完成脚本都让学习和使用变得轻而易举。

但是,我不喜欢自动完成将使用 foo\ bar 而不是 'foo bar'

有什么办法可以改变这种行为吗?

更多评论,但需要更好的格式,所以这里开始。

我相信这在 ZLE 中应该是可行的,但我不知道是否已经有可用于此目的的代码,而且自从我上次编写较低级别的 ZLE 以来已经有一段时间了,所以我没有时间梳洗一下并自己编写代码...

但是,这在使用库存函数时是有可能的。我说的是 quote-and-complete-word:

# This widget uses the completion system to double-quote the current word
# if it is not already quoted, then attempts to complete normally.  If the
# normal completion fails, the quotes are removed again.
#
# To use it:
#   autoload -Uz quote-and-complete-word
#   zle -N quote-and-complete-word
#   bindkey '\t' quote-and-complete-word

因为它无条件地引用了这个词,所以将标签绑定到它显然是一个坏主意,但你可以绑定其他东西,比如 alt tab:

autoload -Uz quote-and-complete-word
zle -N quote-and-complete-word
bindkey '^[^I' quote-and-complete-word

(或 ^[[Z 换档选项卡。)

当您需要完成引用的内容时,请按 alt 选项卡。请注意,完成后,光标将在引号内,您需要向右移动一个字符才能将引号留在后面,因此不幸的是,即使作为变体也不理想。