typoでも動くbash alias

前回に引き続きCUIなネタを。

シェルでコマンドを打つとき、長いコマンドは補完を使うので打ち間違えないのですが、「vi」や「ls」などの短いコマンドは補完を使わないのでよく打ち間違えます。特に入力に右手と左手を両方を使うコマンドは、両手の連携が必要になるので、毎回正確に入力するのは非常に困難です。

そこで、たとえ「sl」だろうと「lls」だろうと「lss」だろうと、「ls」を起動してくれるように設定しています。これで毎日のストレスを数%削減できます。


ということで、まずはls。slは当然lsのaliasですよね。汽車が走り出した上にSIGINTも無視するなんて、ネタであってマジではないですよね。

alias sl="ls"
alias lls="ls"
alias lss="ls"
alias l="ls"
alias ll="ls -l"
alias lll="ll"
alias llll="ll"
alias la="ls -a"
alias lsa="ls -a"
alias lla="ls -la"
alias lld="ls -ld"
alias lsd="ls -d"


さらにvi。手が滑ろうともvi。

alias vi="vim"
alias vii="vi"
alias vu="vi"
alias viu="vi"
alias vui="vi"
alias vl="vi"


mkdirとrmdir。これは効きます。

alias mdkir="mkdir"
alias rdmir="rmdir"


make。alias mkae="make"も良いですが、1文字にしておけば打ち間違えることはないので安心です。

alias m="make -j3"


後は手のクセに合わせてaliasをどんどん追加していくと、どうtypoしようと動いてくれて快適です。


しかし~/.bashrcに書いていくと他の設定と混ざってしまって見通しが悪くなるので、別のファイルにわけておくと良い感じです。私は先ほどのalias群を「~/.bash_aliases」というファイルを作って書いていき、~/.bashrcに以下のように書いてあります。

if [ -f $HOME/.bash_aliases ];then
        . $HOME/.bash_aliases
fi


ところで、「vipw」や「visudo」はあるのに、「vibash」や「vivim」が無いなんてあり得ないないですよね。そこで~/.bash_aliasesに以下を。

alias vialias="vi $HOME/.bash_aliases"
alias vibash="vi $HOME/.bashrc"
alias vivim="vi $HOME/.vimrc"
alias viscreen="vi $HOME/.screenrc" 


aliasでさらに快適なシェル生活を。


fing

find | grep hogehoge

とは良くやりますが、パイプはaliasできないので困った。(zshはできるらしいので、そろそろzshに乗り換えるべきか…)

そこで、与えられた引数を良きに解釈して、findを適宜grepしてくれるコマンド「fing」を作ってみました。

fing() {
        local find_real=`which find`
        if [ -n "$1" -a -z "${1##-*}" -o -z "$1" ];then
                # (引数が与えられている and 第一引数が-から始まっている)or 引数が与えられていない
                $find_real "$@"
        else
                local dir="."
                if [ -d "$1" ];then    # 第一引数がディレクトリ
                        dir="$1"
                        shift    # 引数を一つシフト
                fi
                if [ -n "$1" -a -z "${1##-*}" -o -z "$1" ];then
                        # (引数が与えられている and 第一引数が-から始まっている)or 引数が与えられていない
                        $find_real "$dir" "$@"
                else
                        $find_real "$dir" | grep --color "$@"
                fi
        fi
}
alias find="fing"

引数がなかったり、第一引数が「-」が始まる文字列だったら、単純にfindを実行します。ディレクトリでない第一引数や、第一引数にディレクトリが与えられていて、第二引数に「-」から始まらない文字列が与えられていたら、findしてgrepしてくれます。

違和感なくfindと同じように使えるので、思い切って「alias find="fing"」としてしまうのも一興です。