.zshrc に書いてちょっと便利にしたこと

もふもふあげさん ネット
この記事は約3分で読めます。
スポンサーリンク

仕事で利用するほどの頻度ではないのであまり困ってたわけでもなかったのだけど、つまりは結局知らなかったというだけの話でして、知ったら「なんだよこれ便利じゃないか」と感激したのが function を利用した関数の話。不便だなぁとか思っていないと調べないから、こんなことになる。

結構有名らしいのだけど、知らなかったものだから超感激したのは cd してからの ls を自動化する記述。ディレクトリ移動したら必ず中身を確認するので、これは本当にありがたかった。というわけで、.zshrc に以下を記述。

function chpwd() { ls }

上記の記述より上の箇所で alias 指定を行っていて、ls したときは自動的に ls -al となるようにしていたので、結果的に cd でディレクトリを移動したら自動で ls -al が実行されるという感じ [01] 。で、他に面倒なことしてなかったかな……と思い返してみたのだけど、よくよく考えると MacBook から VPS サーバにファイルを転送するときが該当していた。

最近のファイル転送では FTP クライアントを使ってはいなくて、scp コマンドを利用してファイルを送り込んでいるのだけど、zsh の補完機能だけで対応するとコピペしないとダメな状況で(覚える気がない割に長ったらしいし)なんだか面倒なことをしていたわけです。

そういうわけで、MacBook から VPS サーバへファイルを転送するために .zshrc に追記したのは以下。ファイルの転送先は VPS サーバでのユーザディレクトリにある tmp ディレクトリ。

function scpf { scp -P 22 $1 hoge@xxx.xxx.xxx.xxx:~/tmp }
function scpd { scp -P 22 -r $1 hoge@xxx.xxx.xxx.xxx:~/tmp }

scpf はファイル転送で利用して、ディレクトリを転送するなら -r オプション付きの scpd を利用してみようかなとか。ポート番号は当然 VPS サーバでの設定に合わせるとして、指定したファイル(もしくはディレクトリ)を xxx.xxx.xxx.xxx という IP アドレスの VPS サーバへ hoge というアカウントでログインして tmp ディレクトリの中へ送るという感じ [02] 。例として MacBook のデスクトップにある foo.txt という名称のファイルを転送するなら以下のようになる。

# scpf ~/Desktop/foo.txt

指定したファイルパスが $1 に代入されて実行されるので、ターミナルから以下のコマンドを実行したのと同じ。

# scp -P 22 ~/Desktop/foo.txt hoge@xxx.xxx.xxx.xxx:~/tmp

これ、履歴からの自動補完だとファイル名のところまで削ってタイプし直すことになってしまい、転送先の部分が消えちゃうから不便で不便で。

というわけで、へたれなりにちょっと便利にしてみた次第。もっと早く知っておけば良かったし。ついでだから zsh の補完関数に関してもいろいろ調べてはみたのだけど、いろいろと奥が深いらしい。気が向いたらもうちょっと複雑なこともやってみよう。

References

References
01 記述位置が逆になると alias 指定が機能しないので、単純に ls するだけになって少し悩んだのは内緒です。
02 VPS サーバへは公開鍵認証でログインできるようにしているので、コマンドを叩くだけでさくっと転送。
タイトルとURLをコピーしました