Zsh
Zsh 引用目前參數列表的最後一個元素並展開它
假設我做類似的事情:
ln a_file_with_a_long_filename.pdf ~/path/to/a/new/hardlink/a_file_with_a_long_filename_slightly_modified.pdf
如果我的游標位於 zsh
a_file_with_a_long_filename.pdf
中字元串的末尾,有沒有辦法引用和擴展?ln a_file_with_a_long_filename.pdf ~/path/to/a/new/hardlink/
如果沒有,你會建議減少打字工作嗎?
這聽起來像是一個有趣的程式碼高爾夫挑戰。這是一個選項:
- 使用文件名執行一個無害的命令;輸入足夠的文件名以允許 TAB 完成。
: a_file<TAB>
- 用於
!!$
引用上一個命令的最後一個參數:ln !!$ ~/path/to/a/new/hardlink/!!$
由於 zsh 的有用引用,即使面對包含 IFS 的文件名,這也是安全的。您會注意到,只要在第一個 之後點擊空格
!!$
,zsh 就會擴展文件名;如果您在命令末尾添加一個免費空格,則同上。所需字元數為:
- 3 x 2 = 6 兩個
!!$
- 2 為
:<SPACE>
8 + 加上足夠的初始選項卡完成。
使用預設的 Emacs 綁定,它只有兩個鍵:(
ESC-2 ESC-^_
即Esc
2
Esc
Ctrl
+_
或Alt
+2
Ctrl
+Alt
+_
)。這是copy-prev-word
帶有數字參數 2 的命令(預設參數 1 將複製~/path/to/a/new/hardlink/
)。如果文件名包含(帶引號的)空格,則需要ESC-2 ESC-x copy-prev-shell-word RET
. 您可能希望將此命令綁定到更方便的鍵,特別是如果您的鍵盤佈局Shift
需要_
. 您也可以在 vi 模式下使用這些命令,但預設情況下它們都沒有綁定到鍵。如果您弄錯了數字參數,請按
Ctrl
+_
撤消,然後重試。