Zsh

獲取zsh不完整使用者

  • January 5, 2017

我有一個目錄,其中包含一個名為src. 我希望在輸入cd s並點擊TAB完成目錄時。相反,zsh嘗試完成系統上以 a 開頭的所有使用者s

Completing local directory
src/
Completing user
saeumair  sbrg      scan-nix  schlosse  sdwoods   shutdown   
sis-user  smmsp     snitch    srabhina  sshd      sterpeni  sushid    sync 

我猜我的罪名.zshrc是:

zstyle ':completion:*:directory-stack' list-colors '=(#b) \
       #([0-9]#)*( *)==95=38;5;12'

我用它來完成cd歷史。知道如何在不為使用者完成的情況下保留此功能嗎?

使用者是cd命令的有效參數,因此作為完成提供,因為您已cdable_vars打開該選項。使用此選項,cd foo可以使用 代替cd ~foo,它允許foo是任何可以波浪號擴展的東西,包括使用者名或由設置的目錄名hash -d(但不是 shell 變數,儘管有選項的名稱)。

完成程式碼中沒有選項允許命名目錄但不嘗試完成它們。您可以使用cd.

unset -f _cd
autoload -U _cd
functions[_cd_orig]=_cd
_cd () {
 setopt local_options no_cdable_vars
 _cd_orig $@[@]
}

cdablevars選項負責使命名目錄和使用者成為 cd 的有效參數。如果您不使用它,請使用unsetopt cdablevars.

要更改為 cd 完成的內容,您可以使用tag-order樣式。例如,首先嘗試僅本地目錄,它將是:

   zstyle ':completion:*:cd:*' tag-order local-directories

在特定上下文中查看適用標籤的一個方便的快捷鍵是按Ctrl-X h而不是tab

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