Shell 可以完成制表符前缀吗?

Shell 可以完成制表符前缀吗?

我希望制表符补全在光标位于单词开头时与光标位于单词末尾时的行为有所不同。

我只见过用制表符完成后缀的 shell,如下所示:

$ tiff2␣
tiff2bw    tiff2pdf   tiff2ps    tiff2rgba

但是,有时我也想在插入符号位于单词开头时用制表符完成前缀。也就是说,2tiff 如果光标位于单词的开头,我想扩展到以 结尾的所有命令2tiff,如下所示:

$ ␣2tiff
raw2tiff gif2tiff bmp2tiff ppm2tiff pnmtotiff ras2tiff e2mtiff fax2tiff

在某些情况下这样做:

~> ␣2tiff
bmp2tiff  (Executable, 17kB)  ppm2tiff  (Executable, 14kB)
fax2tiff  (Executable, 18kB)  ras2tiff  (Executable, 14kB)
gif2tiff  (Executable, 18kB)  raw2tiff  (Executable, 17kB)

这还有将光标移动到单词末尾的副作用,并且仅在没有有效后缀完成的情况下才有效:

~> ␣tiff
tiff2bw                    (Convert a color TIFF image to greyscale)
tiff2pdf                    (Convert a TIFF image to a PDF document)
tiff2ps                                    (Convert a TIFF image to)
tiff2rgba                 (Convert a TIFF image to RGBA color space)
…and 10 more rows

bash在这两种情况下,我都找不到制作或zsh 执行前缀制表符补全的方法。

答案1

兹什前提是您启用“新型补全系统”并打开complete_in_word选项

autoload -U compinit; compinit
setopt complete_in_word

之后,您可以按Tab单词中的任意位置(包括开头),您将获得单词中间的补全建议(如果光标位于单词的开头,则为开头)。 (对于一些更奇特的设置,补全也可能会在单词的其他位置插入内容。)

zsh 中的另一个选项是激活通配符补全setopt glob_complete。例如,键入*2tiff并按Tab(光标位于单词末尾)可在单词开头完成。

有一个限制,在默认配置中,按Tab命令行开头会插入一个选项卡而不是完成。我认为这个限制是在expand-or-complete;如果你绑定Tabmenu-complete或者complete-word然后它也在命令行的开头完成。使用expand-or-complete,您确实可以在单词的开头完成,前提是它不是命令行上的第一个非空白内容,例如 in=2tiff;2tiff

相关内容