省時省力Shell小技巧一則
經常與 Shell 為伍的你是不是也會經常碰到下面這些情境:
1$ mv /somewhere/file /your/folder/
2$ vi /your/folder/file
要保存某些文件到特定目錄,然後開始查看/編輯
1$ cp /somewhere/foo.c /somewhere/foo.c.orig
2$ vi /somewhere/foo.c
或者先備份某個文件,然後開始搗鼓
1$ tar zcvf archives.tgz /somewhere/folder /and/somewhere/file1 /and/somewhere/file2
2$ scp archives.tgz
[email protected]:~/blabla/
或者要打包某些目錄/文件,然後上傳什麼的。在上面這些情境中,當你輸入第二條命令時,可以試試像這樣:
1$ mv /somewhere/file /your/folder/
2$ vi Alt-.file
按住 Alt 再按點,你會發現上一條命令的最後一個參數已經被自動輸入了,繼續輸入 file 回拆。
1$ cp /somewhere/foo.c /somewhere/foo.c.orig
2$ vi Alt-1+Alt-.
先按 Alt 再按數字鍵 1,保持 Alt 鍵不松,再按點,幫助你補全上一個命令的第一個參數。
1$ tar zcvf archives.tgz /somewhere/folder /and/somewhere/file1 /and/somewhere/file2
2$ scp Alt-2+Alt-.
[email protected]:~/blabla/
先按 Alt 再按數字鍵 2,保持 Alt 鍵不松,再按點,自動補全上一個命令的第二個參數。
用 zsh 的同學要設置一下,5 個應該足夠了。
bindkey "^[1" digit-argument
bindkey "^[2" digit-argument
bindkey "^[3" digit-argument
bindkey "^[4" digit-argument
bindkey "^[5" digit-argument
bindkey "^[-" neg-argument
這些個數字參數在使用時,bash 是從左往右正數的,zsh 是從後往前逆數的。即
$ touch 1a 2b 3c 4d 5e
bash 的 Alt-1 是 1a,Alt-2 是 2b。zsh 的 Alt-1 是 5e,Alt-2 是 4d,Alt--1 (Alt-負1) 是 1a,Alt--2 (Alt-負2) 是 2b。