Bash
製表符完成前綴的外殼?
當游標位於單詞的開頭時,我希望製表符完成的行為與游標位於單詞末尾時的行為不同。
我只見過用製表符完成後綴的 shell,如下所示:
$ tiff2␣ tiff2bw tiff2pdf tiff2ps tiff2rgba
但是,有時我還想在插入符號位於單詞開頭時對前綴進行製表符補全。
2tiff
也就是說,如果游標位於 word 的開頭,我想擴展所有以結尾的命令2tiff
,如下所示:$ ␣2tiff raw2tiff gif2tiff bmp2tiff ppm2tiff pnmtotiff ras2tiff e2mtiff fax2tiff
Fish在某些情況下會這樣做:
~> ␣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
執行前綴製表符完成的方法。
Zsh 會這樣做,前提是您啟用“新型完成系統”並打開
complete_in_word
選項。autoload -U compinit; compinit setopt complete_in_word
之後,您可以按
Tab
單詞中的任意位置,包括開頭,您將獲得單詞中間的補全建議(如果游標在單詞的開頭,則為開頭)。(通過一些更高級的設置,補全也可能在單詞的其他地方插入東西。)zsh 中的另一個選項是使用
setopt glob_complete
. 例如,鍵入*2tiff
並按下Tab
(游標位於單詞末尾)以在單詞開頭完成。有一個限制,在預設配置中,
Tab
在命令行開頭按下會插入一個製表符而不是完成。我認為這個限制在expand-or-complete
; 如果您綁定Tab
到menu-complete
或complete-word
然後它也在命令行的開頭完成。使用expand-or-complete
,如果它不是命令行上的第一個非空白字元,例如在=2tiff
or中,您確實會在單詞的開頭完成補全;2tiff
。