2016-07-25 76 views
0

我爲我經常使用的文件夾定義了幾個別名;例如ZSH中是否有「開頭」別名?

alias x="cd /home/username/git/github/user/project" 

因此,在終端中輸入x直接將我帶到項目文件夾。

我認爲如果一個字符串只以別名開頭,那麼定義一個別名也是很好用的;例如如果我定義

starts-with-alias x="cd /home/username/git/github/user/project" 

打字

x/abc 

會帶我到:

/home/username/git/github/user/project/abc 
+2

你可能要考慮'setopt autocd'和'cdpath + =(/ home/username/git/github/user)',它應該允許'project'自己切換到你的同名目錄....../github/user'目錄。 – chepner

回答

1

使用標準的外殼的功能,你可以不喜歡

x() { cd /home/username/git/github/user/project/"$1"; } 

x將採取你在那裏,和x abc帶你到/home/username/git/github/user/project/abc

不完全是你要求的,但非常接近。

聲明:僅在bash;標準語法可能會有所不同,zsh也是如此。

1

我會建議使用Static Named Directories而不是別名,可能結合選項AUTO_CD and/or CDABLE_VARS

靜態命名的目錄由一個~表示接下來的名稱(我包含任何字母數字字符,_-.)。通常它們用於系統上用戶的主目錄,這意味着~someuser將被用戶someuser的實際主目錄替換。

zsh,你也可以定義自己的靜態命名的目錄有以下兩種方法:

  • 定義一個shell參數與同/開始值:

    x=/home/username/git/github/user/project 
    
  • 或使用帶參數-dhash命令(與別名類似):

    hash -d x=/home/username/git/github/user/project 
    

這兩種方法之間的唯一區別是,第一個(明顯)提供了一個shell參數,你可以在命名的目錄中沒有擴展的情況下可能使用(例如在引用的字符串中)或導出爲環境變量。

% cd ~x 
% pwd 
/home/username/git/github/user/project 

它也可以作爲一個路徑的第一個組件: 無論使用哪種方法,你現在可以使用名稱~x訪問的目錄/home/username/git/github/user/project

% cd ~x/abc 
% pwd 
/home/username/git/github/user/project/abc 

還有一個額外的好處相比,別名它還與其他命令不僅僅是cd

% touch ~x/somefile 
% echo foobar > ~x/somefile 
% cat ~x/somefile 
foobar 

如果在地方的命令發出

隨着選項AUTO_CD啓用,zsh將自動更改到一個目錄:


隨着CDABLE_VARS啓用該選項,如果參數的cd命令(或隱含的cdAUTO_CD啓用)不是一個目錄,並且不以/開頭,zsh將嘗試擴展參數,就好像它以~開頭:

% setopt cdablevars 
% cd x 
% pwd 
/home/username/git/github/user/project 
% cd x/abc 
% pwd 
/home/username/git/github/user/project/abc 

雙全,AUTO_CDCDABLE_VARS,使您可以使用命名的目錄就像別名cd與您可以直接訪問子目錄中的額外的好處。

% setopt autocd cdablevars 
% x 
% pwd 
/home/username/git/github/user/project 
% x/abc 
% pwd 
/home/username/git/github/user/project/abc 

注:當在cd(顯式或隱式的通過AUTO_CD)的名稱需要通過~爲了先被擴大的背景下不使用指定的目錄:

% echo x/abc 
x/abc 
% echo ~x/abc 
/home/username/git/github/user/project/abc