Zsh

如何覆蓋我的 shell(Oh My Zsh)中的別名?

  • December 18, 2021

我想給我的 ls 命令起別名,但是我相信它有一個先前定義的別名,我相信它會在我的定義之前首先被呼叫!我正在使用 .zshrc 來定義我的別名,這就是我所做的:

alias ls="ls --classify --almost-all --group-directories-first"

這是別名命令輸出:

$ alias | grep "ls="
ls='ls --color=tty'

是否有任何可能的操作來查看另一個別名的定義位置?還是用新的覆蓋它?

注意:我使用 ZSH,我已經在 .profile 和其他我知道可能有幫助的相關文件中搜尋了它。如果有任何文件我需要檢查,請發表評論。

alias命令用相同的名稱覆蓋先前的別名。因此,一般來說,如果您希望別名覆蓋 zsh 框架定義的別名,請將它們放在.zshrc. 函式定義、變數賦值、鍵綁定等其他事情也是如此。一般來說,最新的定義勝出。

“最新定義獲勝”的一個極端情況是它只是同類對象的最新定義。特別是,別名、函式和外部命令是不同種類的對象,例如在定義同名別名後定義函式並不會覆蓋別名。你需要先打電話unalias。(另請注意,語法foo () { … }when foois an alias 擴展了別名 - 確保unalias首先,或使用function foo { … }語法。)

有時可以通過掛鉤函式在執行時覆蓋設置。例如,在進入或離開版本控制目錄時,幫助進行版本控制的框架通常會更改變數以及可能的別名或函式。發生這種情況時,您必須修改現有的鉤子或在您不完全喜歡的鉤子之後執行自己的鉤子。


如果您無法確定別名的設置位置,請執行script -c 'zsh -x',然後鍵入exit。這將創建一個名為的文件typescript,其中包含 zsh 在其初始化期間執行的所有命令的日誌。在該文件中,搜尋alias ls=. (也可能是類似的東西alias foo=bar ls=whatever。)

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