6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

zshAdvent Calendar 2013

Day 17

zshでファイル名を入力するとlessで開き、ディレクトリ名を入力するとls -laする(コマンドが見つからなかった時の処理をカスタマイズする)

Posted at

概要

Twitterを眺めてたら

「ディレクトリを指定したらls -la、ファイルを指定したらless」ってできないのかな
https://twitter.com/kyo_ago/status/411365469552005120

っていうのを見かけて、zshなら出来そうだなーと思って調べたら出来そうだったので書きました。

Code

以下を.zshrcに記述する。

unsetopt auto_cd
function command_not_found_handler() {
    if [ $# != 1 ]; then
        return 127
    elif [ -d $0 ]; then
        ls -la $0
        return 0
    elif  [ -f $0 ]; then
        less $0
        return 0
    else
        return 127
    fi
}

解説

zshにはcommand_not_found_handlerという関数があり、コマンドが見つからなかった時の処理をカスタマイズ出来ます。引数はその時見つからなかったコマンドです。
また、127をreturnするとコマンドが見つからなかった時の通常処理が発動し、0を返すとそれが発動しません。
で、上記のコードでは、「引数が1つじゃなかったら通常の処理、ディレクトリならls -la、ファイルならlessで開き、それ以外は通常の処理」となっています。
また、zshにはauto_cdというオプションがあり有効にすると、ディレクトリ名を入力した場合そのディレクトリにcdします。この時command_not_found_handlerが発動しないので、このオプションをcommand_not_found_handlerの定義の前で無効にしてます(oh-my-zshを使ってると勝手に有効になるらしいです)

ちなみに、lesslsも引数を複数とれるのでこのcommand_not_found_handlerも複数の引数に対応しようと思えば出来ます。面倒なので書いてないです。

参考:http://mollifier.hatenablog.com/entry/20091207/p1

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?