2013-02-02 46 views
9

以前的說法,我發現自己經常想要做這樣簡單的命令:的zsh:展開當前命令行

cp /really/long/path/from/file.txt /really/long/path/to/file.txt

雖然我已經使用快捷鍵像!!!$的時候,它會是不錯的能夠引用當前的命令行中的最後一個參數(並可選地將其展開以進行編輯)。有沒有辦法做到這一點zsh,或其他一些等價的技巧來節省時間?

回答

21

一般情況下,你可以參考個別單詞使用歷史擴展當前命令行替換(展開)。

$ cp /really/long/path/from/file.txt !#:1:s/from/to 

$ cp /really/long/path/from/file.txt !#:$:s/from/to 

!#是歷史擴展爲命令行鍵入到目前爲止:1指定該擴展中的第一個參數(在這種情況下爲長文件路徑)。可以使用:$來代替最後一個參數,而不管迄今爲止輸入了多少個參數。 :s/from/to在所選單詞上執行文本替換。

對於這個任務,你也可以使用括號展開:

$ cp /really/long/path/{from,to}/file.txt 

(注:這兩個是從bash拍攝,但在zsh工作也可能有,我等zsh -only技巧。沒有意識到)。

+0

完美的是,這兩個特徵正是我所期待的。我認爲支撐擴展可能是更好的方法,特別是因爲我可能會忘記'!#'表示當前行 – robbles

1

您可以點擊標籤來擴展zsh上的內容。例如:

如果我做這個命令第一

% ls /etc 

而在這下一行我做

% !!<Tab> 

!!

% ls /etc 

所以我可以更換按我想要的方式編輯。這適用於很多東西,如*和環境變量。例如敲擊標籤關鍵$TERM後,將與(例如,在我的情況)xterm-256color

+0

這很有幫助 - 我不知道你可以在當前命令行中擴展歷史記錄。你知道是否有辦法「撤銷」擴展? – robbles

+1

不確定與emacs綁定,但是使用vi綁定命中'esc',然後'u'來撤消最後一個操作。 –

+0

這意味着前面的第一個參數可以用'!!:1'擴展,只是爲了清晰:) – dezza