zshで一重引用符で `git commit -m`を実行してください。

zshで一重引用符で `git commit -m`を実行してください。

コミットメッセージに!そして$などの項目を使用することがありますが、手動でエスケープする必要がありますが、このような一重引用符を使用する場合はそうではありませんgit commit -m 'My $message here!'。私はgcメッセージにつながるすべてのテキストを書く関数を書こうとしましたが、単一引用符を使用することに成功しませんでした。私が試したすべてのものはまだ二重引用符を使用してその$message部分を隠すように見え、それも!機能しません。

私はこれを試しました:

gc() {
  git commit -m ''$*''
}

これ:

gc() {
  message="$*"

  git commit -m ''$message''
}

また、メッセージを確認するときにgit log機能しない他の方法を試しても、次の単語が表示されませんでした。$一重引用符で動作しますが、とにかく二重引用符を使用します。

gc My $message hereメッセージになるべき内容の後にすべてのテキストを実行したいと思いますgc。一重引用符を使用することを強制することはできず、最終的に二重引用符になります。のみ出力されますMy here

私が望む方法で動作するようにこの関数を書く方法はありますか?これが可能かどうかはわかりません。ありがとうございます!

あなたはBard、ChatGPT、Claude、Bing AIよりもスマートです。なぜなら、私は彼らに何時間も運がなかったからです。

答え1

TL、DR:いいえ。

あなたが要求することは不可能です。を作成するとき、gc My $message hereこれはmessage変数の値を拡張し、その拡張を関数引数の一部として使用するコマンドです。

コメントマークを追加するエイリアスとしてシェルをだまし、シェル履歴からコメントを読み取る関数を呼び出すことで、必要なものを取得できます。これにより、関数は改行文字を除くすべての文字を受け入れることができます。

setopt interactive_comments
alias gc='gc_function #'
function gc_function {
  emulate -LR zsh
  setopt extended_glob
  local msg=${history[$HISTCMD]#*[[:space:]]##}
  git commit -m "$msg"
}

これは完全に堅牢ではありません(そしてそうではありません)。私が投稿したバージョンには;後にスペースやその他のスペース文字が必要ですgc。単語以外の文字を使用している場合は、コミットメッセージが期待したものと異なる場合があります。

私はこれをお勧めしません。 1行のコミットメッセージを書くのは簡単ですが、良いコミットメッセージを書くのは難しいです。良いコミットメッセージは、コミットが実行するアクションと方法を説明します。良いコミットメッセージはエディタに記録されます。一行のコミットメッセージを書くと、間違っていて後悔するでしょう。

関連情報