時々、次のような git サブモジュールを grep で検索する必要があります。
git submodule foreach 'git grep x'
しかし、zsh に切り替えてから、オプションがない場合でもサブモジュールごとに less プロンプトが開かれるようになりました。出力がすべてターミナルに印刷される方がずっと望ましいです。
私の現在の解決策は、次の電話に電話することです:
git submodule foreach 'git grep x' > /tmp/a && cat /tmp/a
これは私が望んでいることを実現しますが、オプションやよりエレガントなソリューションが欠けているような気がしてなりません。何かありますか?
答え1
Git が使用するページャーを変更してみてください:
GIT_PAGER="cat" git submodule foreach 'git grep x'
または、出力が画面からはみ出す場合にのみ、使用量を減らしたい場合は、次のようにします。
GIT_PAGER="less -FX" git submodule foreach 'git grep x'
を使用してプロジェクトごとにページャーを設定することgit config
も、もちろん環境変数をグローバルに設定することもできます。
答え2
他の方法についても説明します。
方法 1:--nopager
git submodule foreach 'git --nopager grep x'
方法2: ポケベルを完全に無効にする
git config --global core.pager cat
git-config のマニュアルページから:
core.pager git が出力をページ分割するために使用するコマンド。GIT_PAGER 環境変数で上書きできます。git は、ページャーの実行時に LESS 環境変数が設定されていない場合は、それを FRSX に設定することに注意してください。LESS 変数を他の値に設定することで、これらの設定を変更できます。あるいは、core.pager オプションを設定することで、プロジェクトまたはグローバル ベースでこれらの設定を上書きできます。core.pager を設定しても、上記の LESS 環境変数の動作には影響がないため、この方法で git のデフォルト設定を上書きする場合は、明示的に指定する必要があります。たとえば、下位互換性を保つために S オプションを無効にするには、core.pager を less -+S に設定します。これは git によってシェルに渡され、最終コマンドは LESS=FRSX less -+S に変換されます。
方法3:pager.<cmd>
core.pager の代わりに pager.setting を使用して、単一の git サブコマンドのページングを無効にすることもできます。また、git リポジトリごとに設定を変更することもできます (--global を省略)。
git config --global pager.grep cat
git-config のマニュアルページから:
ページャー。値がブール値の場合、tty に書き込むときに特定の git サブコマンドの出力のページ区切りをオンまたはオフにします。それ以外の場合は、pager の値で指定されたページャを使用してサブコマンドのページ区切りをオンにします。コマンドラインで --paginate または --no-pager が指定されている場合は、このオプションよりも優先されます。すべてのコマンドのページ区切りを無効にするには、core.pager または GIT_PAGER を cat に設定します。
方法4: lessの動作を変更する ( -F -X
)
less を再設定して、画面サイズより大きいコンテンツを持つファイルのみを「条件付きで」ページングするようにしたり ( -F
)、その後 less が画面をクリアしないように無効にしたりすることができます ( X
)。
git config --global core.pager less -F -X
参考文献
答え3
この場合、コマンド全体を再ページングしていました
git submodule ... | less
ただし、サブコマンドからの潜在的な書式設定は失われます。
その後、「git status」でも同じ問題があることに気づいたので、「git ステータスの出力にページャーをオンにするにはどうすればよいですか?「私は提案します
git config --global pager.submodule "less -FX"