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

git でよく使う "^"(サーカムフレックス) が zsh に解釈されて困る件

More than 5 years have passed since last update.

問題

zsh をいろんな設定と共に使っていると起きること。

home% git reset HEAD^
zsh: no matches found: HEAD^

小手先では、サーカムフレックスをエスケープすれば問題ないのですが、釈然としない…

原因

setopt extendedglob すると、サーカムフレックスがファイル名のパターンマッチに使われるようになります(引用の1)。
そして、パターンマッチしてファイルが見つからなかった時アボートする(引用
2)、という振る舞いが合わせ技として効いているようです。

対処

  1. エスケープし続ける
    • tig したり、一覧性のよいフロントエンドが使えるならそうすればいいんじゃね?
  2. サーカムフレックスじゃなくて"~"(チルダ)を使う
    • コメントいただきました。daimatz さん、ありがとうございます!
  3. zle を駆使する
  4. setopt no_nomatch する
    • 振る舞いが変わってしまうので、何か不都合があるかもしれませんが、コマンドヒストリの 95% くらいが git reset の人なら問題ないんじゃないかな
  5. 特定のコンテキストでだけ unsetopt extendeglob する
    • プロンプトにブランチ名を表示するのと同じように、カレントディレクトリが git リポジトリであることを判別して unsetopt したらどうでしょ
  6. setopt extendedglob を捨てる
    • それをすてるなんてとんでもない!

引用

*1 man zshall から抜粋。

PATTERN MATCHING
The shell has a rich set of patterns which are available for file matching (described in the documentation as filename generation' and also known for historical
reasons as
globbing') and for use when programming. These are described in the section `Filename Generation' in zshexpn(1).

   Of particular interest are the following patterns that are not commonly supported by other systems of pattern matching:

   **     for matching over multiple directories

   ~, ^   the ability to exclude patterns from matching when the EXTENDED_GLOB option is set

   (...)  glob qualifiers, included in parentheses at the end of the pattern, which select files by type (such as directories) or attribute (such as size).

*2 sh との振る舞いの違い

zshfaq02

The next most classic difference is that unmatched glob patterns cause the command to abort; set NO_NOMATCH for those.

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
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