mv hoge hoge.bak したあと元に戻したい。
やりたい
$ mv hoge hoge.bak # 何らかの作業 $ mv hoge.bak hoge
とか、一時的にバックアップして元に戻すことって割とあると思います。
そんな時に、一々打ち直すのはめんどくさい。なので、てきとーにシェルの関数を書きました。
やった
function swap_last_arg() { local last_arg="${${(z)BUFFER}[-1]}" local last_1_arg="${${(z)BUFFER}[-2]}" local other="${${(z)BUFFER}[0, -3]}" BUFFER="${other} ${last_arg} ${last_1_arg}" } zle -N swap_last_arg bindkey "\C-s" swap_last_arg
こんな感じ。最後の行はCtrl-Sにこれを割り当てているだけなので、お好きなキーに割り当てて使ってください。
つかう
$ mv hoge hoge.bak # 何らかの作業 # シェルのヒストリからこれを呼び出す。 $ mv hoge hoge.bak # Ctrl-Sをタイプすると… $ mv hoge.bak hoge # こんな感じにオプションがついていても大丈夫です。 $ mv -v hoge hoge.bak
現在のバッファの、最後の引数と最後から二番目の引数を交換します。 前の方にならばオプションがついていても問題ありません。
別にmv
に限ったものではないので、他のコマンドでも利用できると思います[要出典]。
しくみ
"${(z)hoge}"
の様にすると、hoge
変数の中身をzshの単語分割規則に従って単語分割してくれるようなので、それを利用しています。
zshすごい。