Nat*_*ver 5 bash zsh autocomplete fish readline
我希望当光标位于单词的开头和光标位于单词的末尾时,制表符完成的行为有所不同。
我只见过用制表符完成后缀的 shell,如下所示:
$ tiff2?
tiff2bw tiff2pdf tiff2ps tiff2rgba
Run Code Online (Sandbox Code Playgroud)
但是,有时我还想在插入符号位于单词开头时对前缀进行制表符补全。也就是说,2tiff
如果光标位于单词的开头,我想扩展到所有以 结尾的命令2tiff
,如下所示:
$ ?2tiff
raw2tiff gif2tiff bmp2tiff ppm2tiff pnmtotiff ras2tiff e2mtiff fax2tiff
Run Code Online (Sandbox Code Playgroud)
Fish在某些情况下会这样做:
~> ?2tiff
bmp2tiff (Executable, 17kB) ppm2tiff (Executable, 14kB)
fax2tiff (Executable, 18kB) ras2tiff (Executable, 14kB)
gif2tiff (Executable, 18kB) raw2tiff (Executable, 17kB)
Run Code Online (Sandbox Code Playgroud)
这也有将光标移动到单词末尾的副作用,并且仅在没有有效的后缀完成时才有效:
~> ?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
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下,我都找不到制作bash
或zsh
执行前缀制表符补全的方法。
只要您启用“新型完成系统”并打开complete_in_word
选项,Zsh 就会执行此操作。
autoload -U compinit; compinit
setopt complete_in_word
Run Code Online (Sandbox Code Playgroud)
之后,您可以按Tab单词的任何位置,包括开头,您将获得单词中间的完成建议(对于开头,如果光标位于单词的开头)。(使用一些更高级的设置,完成也可能会在单词的其他地方插入内容。)
zsh 中的另一个选项是使用setopt glob_complete
. 例如,键入*2tiff
并按Tab(光标在词尾)以在词首完成。
在默认配置中存在一个限制,在Tab命令行的开头按下会插入一个制表符而不是完成。我认为这个限制在expand-or-complete
; 如果您绑定Tab到menu-complete
或complete-word
那么它也会在命令行的开头完成。使用expand-or-complete
,您可以在单词的开头获得补全,前提是它不是命令行上的第一个非空白内容,例如 in=2tiff
或;2tiff
。