將 .zshrc 修正為 ~/.zshrc

將 .zshrc 修正為 ~/.zshrc

有沒有辦法設定某種別名,以便當我這樣做時:

cd some/directory
vim .zshrc

是嗎vim ~/.zshrc

答案1

答案比你想的要簡單得多,因為你問錯問題了。

如果您真正的意思是“如何創建一個別名,允許我編輯我的別名,~/.zshrc而不管我當前的工作目錄如何?”那麼答案很簡單:

alias zshconfig="vim ~/.zshrc" 

這個例子來自我自己~/.zshrc,我經常使用它。

一個更好的選擇,建議@mateen-ulhaq在下面的評論中,將是:

alias zshrc="vim ~/.zshrc" 

換句話說,不要嘗試為檔案名稱或檔案名稱的路徑添加別名。這兩種情況都是可能的,但可能會產生不可預測的副作用,從而在以後給您帶來問題,例如@邁克爾-霍默已指出。

但既然您知道您的首選$EDITORvim,只需vim為該特定檔案的呼叫添加別名,您就可以開始工作了。 (將命令和參數的特定組合別名為不常見的字串會更安全,這樣在脫離上下文的情況下使用的可能性較小。)

然而,更一般地說,我的建議是您不應該擔心優化兩個字元序列~/,而是應該習慣於鍵入它。繼續…伸出你的左手小指,就像艾迪範海倫練習音階一樣。 (這將幫助您掌握vim它,因為您可能應該習慣Esc用小指敲擊琴鍵!)

隨著您的打字技巧的提高,您將獲得該~/序列的肌肉記憶,這將幫助您在引用主目錄中的檔案時可靠地鍵入該字元序列。你會故意快速地輸入它,並且不會偶然地輸入它。

依賴別名的缺點是,無論它們可以在您的家庭電腦上加速多少,當您需要ssh進入客戶端私有子網路中的某個遠端 Docker 容器並發現所有別名都消失時,它們都會減慢您的速度。

答案2

我真的不明白這一點,但是是的。您所做的事情比僅僅為命令提供不同的名稱或一些預設參數更複雜,因此您需要一個函數,而不是別名。

function vim {
  if [[ $# -eq 1 && $1 == .zshrc && ! -e .zshrc ]]; then
    set -- ~/.zshrc
  fi
  command vim "$@"
}

說明:當您執行 時vim,它將呼叫該函數。在最後一行中,command vim …呼叫外部命令,並將"$@"傳遞給函數的參數傳遞給它。在兩者之間,如果只有一個參數,並且該參數是確切的字串.zshrc,並且當前目錄中沒有調用文件.zshrc,則命令行將替換為~/.zshrc.如果這些條件不完全符合您的要求,請調整它們。

答案3

大概您正在使用 zsh 作為您的 shell,這確實具有「全域別名」功能這可以讓你這樣做:

% alias -g .zshrc='~/.zshrc'
% echo .zshrc
/home/mwh/.zshrc

那是,任何地方當該單字.zshrc出現在命令列中時,它會被替換為~/.zshrc,然後像往常一樣進行波浪號擴展。它必須是自己的 shell“單字”,因此如果它只是較長名稱的子字串,則它不會被擴展。這適用於任何命令。

全域別名是出了名的問題,因為它們確實會在任何地方默默地擴展,因此您可以rm .zshrc在另一個目錄中運行,它會瞄準您自己的點檔案。它們也適用於 shell 內部函數,甚至是那些已經定義的函數。在這種情況下,它似乎相對不太可能引起問題,但請注意它的可能性。您可以使用 來專門命名目前目錄中的文件,或使用或 用引號括起來來./.zshrc取得文字字串。\.zshrc

相關內容