Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

概要

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

takc923
よろしくお願いします。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした