Bash

製表符完成前綴的外殼?

  • July 20, 2016

當游標位於單詞的開頭時,我希望製表符完成的行為與游標位於單詞末尾時的行為不同。

我只見過用製表符完成後綴的 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

在任何一種情況下,我都找不到製作bashzsh 執行前綴製表符完成的方法。

Zsh 會這樣做,前提是您啟用“新型完成系統”並打開complete_in_word選項

autoload -U compinit; compinit
setopt complete_in_word

之後,您可以按Tab單詞中的任意位置,包括開頭,您將獲得單詞中間的補全建議(如果游標在單詞的開頭,則為開頭)。(通過一些更高級的設置,補全也可能在單詞的其他地方插入東西。)

zsh 中的另一個選項是使用setopt glob_complete. 例如,鍵入*2tiff並按下Tab(游標位於單詞末尾)以在單詞開頭完成。

有一個限制,在預設配置中,Tab在命令行開頭按下會插入一個製表符而不是完成。我認為這個限制在expand-or-complete; 如果您綁定Tabmenu-completecomplete-word然後它也在命令行的開頭完成。使用expand-or-complete,如果它不是命令行上的第一個非空白字元,例如在=2tiffor中,您確實會在單詞的開頭完成補全;2tiff

引用自:https://unix.stackexchange.com/questions/296988