2012-11-19 14 views
2

我經常需要引用一段文字在bash命令例如一種方式,類似於歷史擴展:是否有引用該命令的其它部分在bash被輸入

git mv _fav-locations-cluster.html.erb partials/_fav_locations_cluster.html.erb 

編輯# 1

注意,它是從短線會 - >強調

我想這樣做(其中$ 0和標籤將eval'd或東西):

git mv _fav-locations-cluster.html.erb partials/'$0 and tab' 

其中$ 0和tab將引用第一個參數。這是可能的bash或zsh?

+2

是不是可以簡單地做'git mv _fav-locations-cluster.html.erb partials /'? –

+0

實際上從破折號變爲下劃線,所以需要整片 – timpone

+0

@timpone在這種情況下,完成也不是正確的,因爲它只會重現第一個參數,您必須回去編輯它......我只會教我的手指''git mv _fav _fav <編輯預先路徑和正確的名稱>'... – twalberg

回答

5

歷史擴張確實可以參照目前正在鍵入的行:

$ git mv _fav-locations-cluster.html.erb partials/!#:2:gs/-/_/ 

!#是指當前行。 :2指定第二個單詞(文件名),:gs/-/_/_代替-的所有出現。擴展後,命令是

$ git mv _fav-locations-cluster.html.erb partials/_fav_locations_cluster.html.erb 
+0

thx - 看起來像這樣,thx @chepner – timpone

0

在我.zshrc我:

bindkey -M emacs "\M-;" copy-prev-word 

這允許我使用 + ;複製上一個單詞。在您的示例中,默認情況下會複製partials/,但該小部件也可以使用數字前綴來指定應該使用較早的單詞。所以使用Meta + 之前copy-prev-word綁定將完成您正在尋找。

Bash可能有類似的命令可用。

0

git mv {,partials/}_fav-locations-cluster.html.erb

2

一個簡單的竅門是在可變粘值,並使用該;這會爲你上面的例子工作:

f=_fav-locations-cluster.html.erb; git mv "$f" partials/"${f//-/_}" 

,或者創建一個功能:

f() { git mv "$1" partials/"${1//-/_}".erb; }; f _fav-locations-cluster.html 
+0

thx您的意見,但沒有你的例子將工作,因爲破折號 - >下劃線。我問是否有一種通用的方式來處理這樣的事情,而不是這種確切的情況,但是提供了這個EXACT案例,以便它不是簡單地移動重命名文件。 – timpone

+0

啊,錯過了連字符 - >下劃線開關。看我的編輯。 –

+0

酷,thx。看起來不錯。但沒有辦法做到作爲一個評估或內聯(抱歉,真的不知道 - 因此問題)?似乎它會非常強大。 – timpone

0

除了其他的解決方案:

f=_fav-locations-cluster.html.erb; git mv $f partials/$f 

這種解決方案的好處是,你可以使用$ f在隨後的命令中。缺點是a)需要兩個命令才能完成相同的任務,並且b)之後會得到一個殘差變量$ f。

+0

嗯...所以需要考慮到破折號 - >下劃線。似乎不是一個快速的方法來做到這一點。同意你對缺點的看法。 – timpone

相關問題