更喜欢引用而不是转义以完成 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 选项卡。请注意,完成后,光标将在引号内,您需要向右移动一个字符才能将引号留在后面,因此不幸的是,即使作为变体也不理想。
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 选项卡。请注意,完成后,光标将在引号内,您需要向右移动一个字符才能将引号留在后面,因此不幸的是,即使作为变体也不理想。