Qualityandstyle

Macでは基本的にターミナルを開けばShellでコントロール可能です。 これがあるから使っている!という人も多いかと思います。 Finderをターミナルにドラッグドロップするとパスが表示されたりなど、 CUIとGUIの親和性も非常に高いです。さて個人的に作成した便利なエイリアス達を紹介します。

基本的に~/.bashrc~/.zshrcなどに下記の行をコピーすれば動く簡単な仕様です。

md [Linux/MacOSX]

カレントディレクトリにあるmarkdownファイルを全てvimバッファに載せ開きます。

alias 'md'='vim ./*.md'

複数バッファを同時に開きますが、あまりその動きは想定していません。 現在のGitのプロジェクト等ではMarkdown形式のREADMEファイルなどが必ず置かれていると思います。 そういったディレクトリに移動して、ホームポジションに近いmdというコマンドで簡単に開けることを期待しています。 とりあえずファイルが沢山あるディレクトリでも移動してmdと打てば何かしらその場にあるドキュメントファイルを開けるので あまり考えなくて良いです。 Vimを開いた後では:bn:bpなどでバッファの前後を開けますので次々に移動させ任意のファイルを確認します。

個人的にはvimをターミナルで利用するため指定していますが、openコマンドを組み合わせて 他のエディタでも良いかもしれません。

dic [Linux/MacOSX]

引数の単語の和訳を出力します。

dic () {
  w3m "http://ejje.weblio.jp/content/$1" | grep "用例"
}

ややハック気味なプログラムです。weblioのWebサイトをCUIブラウザで出力させ、 「用例」の箇所を抜き出します。動作はこのような感じです。w3mコマンドはbrew等でインストール可能です。

ただの単語の和訳というよりは用例=フレーズというのがポイントです。 ピンポイントに和訳を出されてもすぐ忘れてしまいますので流れで覚えます。 たまにノイズも入るのでそこは微調整を個別にしてください。

sha1 [Linux/MacOSX]

引数として渡される文字列のsha1のハッシュを返します。

alias sha1='echo -n "${1}" | openssl sha1 | sed "s/^.* //"'

opensslの種類によって出力される文字列に揺れがあるため、 sedで切り取りをしています。

ただのハッシュ値ですが、手元でサクっと生成できると意外に便利です。 適当な文字列を叩き込んで簡単なパスワード代わりに利用可能です。

自分のSaltなど用意すれば、自分だけ思い出すことが可能なパスワードも簡単に生成 可能です。システム開発などで基本的に使うテクニックですが、 簡単にCUI上から出来ることで実生活にも役立ちます。

up [Linux/MacOSX]

一つ上のディレクトリにCDして、リストを表示させます。

alias up="cd ..; ls -l"

大したことはないですが、自分のコマンドをヒストリ解析した結果この流れの作業をよくやっていたため、作成して使っています。 「移動先でどのようなディレクトリがあるのか?」というのをすぐにフィードバックが得られるので 非常に便利です。cd ..よりupのほうがキーの配置も近いので、楽です。

cdする時にlsを合わせて出力してくれるものもあっても良いかもしれませんが、 個人的にはあまり使いません。そもそもディレクトリを下るときはファイルの中身がある程度推測できますし、 ディレクトリの上に移動するときはフォルダ一覧も見えるような流れにすれば、 「上に移動=表示」「下に移動=そのまま」とディレクトリの移動方向が明確になるので混乱が少ないです。

f [MacOSX]

ターミナルのカレントディレクトリをFinderで開きます。

alias f="open ."

こちら有名ですが、 Macのopenコマンドを利用することで簡単にカレントディレクトリを開くことが出来ます。 ファイルの移動や日本語ファイルの取り扱いなどGUIのほうが早く作業できるケースなど多いと思います。 このコマンドを叩くことでシームレスに移動可能です。 GUIが得意な領域はGUIを使って高速作業です。

cdf [MacOSX]

Finderのアクティブウィンドウのパスにターミナルで移動します。

cdf () {
        target=`osascript -e 'tell application "Finder" to if (count of Finder windows) > 0 then get POSIX path of (target of front Finder window as text)'`
        if [ "$target" != "" ]
        then
                cd "$target"
                pwd
        else
                echo 'No Finder window found' >&2
        fi
}

fコマンドの逆で、今のFinderのカレントパスに移動します。GUIで作業した後など、 シームレスに移動可能です。以下がもう少し詳しいかと思います。

jumping to the finder location in terminal http://blog.glidenote.com/blog/2013/02/26/jumping-to-the-finder-location-in-terminal/

z(j) [Linux/MacOSX]

過去のコマンドヒストリからファジーに移動してくれます。

brew install z
z work
# cd /Users/Myname/workspace してくれる

断片さえ記憶していれば移動してくれます。とりあえずターミナルを立ち上げてworkspaceに移動しています。 同様のjというコマンドもありますが、インストールが手間なのといまこちらのほうが 更新も多いので、zに乗り換えました。ただ、jのほうが指の位置が近いため、以下も設置します。

alias j="z"

自分のケースであれば、jコマンドを利用して、適当に移動したあとfコマンドを利用してFinderを開きます。 Finderで色々やった後、iTermを再度アクティブにさせcdfをしてターミナルに戻ります。 また必要になればfをしてFinderを開きます。 まさにGUIとCUIをハイブリッド生活になれるとなかなか戻れません。

jj [Linux/MacOSX]

カレントパス以下のディレクトリでGrepマッチしたディレクトリに移動します。

jj () {
    if [ $1 ]; then
        JUMPDIR=$(find . -type d -maxdepth 1 | grep $1 | tail -1)
        if [[ -d $JUMPDIR && -n $JUMPDIR ]]; then
            cd $JUMPDIR
        else
            echo "directory not found"
        fi
    fi
}

見えているディレクトリを適当にコマンド叩いて移動したいことも多いかと思います。 ただYYYYMMDD_Dirnameのようなディレクトリルールで配置されている箇所はBashのTab補完が あまり便利ではないです。確実に年あたりの所でサジェストが一度止まるからです。

ただディレクトリ名自体はユニークなものにしているケースも多いと思いますので、 うまく唯一マッチングするような文字列を組み合わせて移動するようにします。

cleanup [Linux/MacOSX]

カレントディレクトリ以下にある空ディレクトリを削除します。

cleanup () {
    find . -type d -maxdepth 2 -empty -exec rmdir -v {} \; 2>/dev/null
    find . -type d -maxdepth 2 -empty -exec rmdir -v {} \; 2>/dev/null
}

意外と出来てしまう空ディレクトリ。こちらのコマンドで安全に削除です。 Finderで作業中でもターミナルをアクティブにさせたのち、cdfを行い、 該当ディレクトリへ移動し、このコマンドを発行です。

リカーシヴに全部強制削除だと何か不安が残るため、 経験則的に2階層だけ削除するように設定しています。 不足があればコマンドを何度か叩けば問題ありません。

ssheuc [Linux/MacOSX]

OS設定がEUC-JPのサーバにUTF8環境から文字化けせずに接続します。

alias ssheuc='TERM=xterm cocot -t UTF-8 -p EUC-JP ssh '

tmuxなど基本的にUTF-8しか表示をサポートしておりません。 その時に困るのが他の文字コードを利用しているサーバです。 それをcocotを利用することで、全て表示をUTF8に統一させ文字化けを回避できます。 tmuxでもpaneを分割してその中でeuc-jpのサーバに文字化けなくアクセスが出来るようになります。

Macであればbrewでインストール可能です。