Zsh

Zsh 引用目前參數列表的最後一個元素並展開它

  • November 20, 2018

假設我做類似的事情:

ln a_file_with_a_long_filename.pdf ~/path/to/a/new/hardlink/a_file_with_a_long_filename_slightly_modified.pdf

如果我的游標位於 zsha_file_with_a_long_filename.pdf中字元串的末尾,有沒有辦法引用和擴展?ln a_file_with_a_long_filename.pdf ~/path/to/a/new/hardlink/

如果沒有,你會建議減少打字工作嗎?

這聽起來像是一個有趣的程式碼高爾夫挑戰。這是一個選項:

  1. 使用文件名執行一個無害的命令;輸入足夠的文件名以允許 TAB 完成。
: a_file<TAB>
  1. 用於!!$引用上一個命令的最後一個參數:
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+_撤消,然後重試。

引用自:https://unix.stackexchange.com/questions/482827