これ--unified=<n>
オプションを使用すると、行数を設定できます。文字にも同じことをする方法はありますか?
はい
使用時にコンテキストを変更するには、X文字を制限してください。git diff --color-words=. file.ext
考慮すべき特別な状況
前および/または次の変更の文脈で変更が行われます。
はい
1つの長い行を含む縮小ファイルの比較
長い話を短く
私は変更とその文脈を除いて、その行のすべてを切り取りたいと思います。
ベストアンサー1
このスクリプトは、少なくとも予想される長いエスケープシーケンス(着色用)を使用して操作を実行します。たとえばと呼んでくださいgit-diff-word-context -U 5
。文字数を設定することを許可git diff
し、インターセプトは-U
(それぞれ)すべてのパラメータを受け入れます。タスクを完了する--unified=
ために使用されます。grep
#!/usr/bin/env bash
ESCAPE=$'\e'
START_DIFF="$ESCAPE\\[3[12]m"
END_DIFF="$ESCAPE\\[m"
NOESCAPE="[^$ESCAPE]"
CONTEXT="20"
STDIN=false
ARGS=()
while [ "${1::1}" = "-" ]; do
case "$1" in
"-U"|"--unified")
CONTEXT="$2"
shift
;;
"-U"*)
CONTEXT="${1#-U}"
;;
"--unified="*)
CONTEXT="${1#--unified=}"
;;
"--stdin")
STDIN=true
;;
"--")
break
;;
*)
ARGS+=("$1")
;;
esac
shift
done
set -o pipefail
ok() {
"$@"
true
}
if $STDIN; then
cat
else
git diff --color-words='[^\n]' "${ARGS[@]}" "$@"
fi |
ok grep -oP "$NOESCAPE{0,$CONTEXT}(($START_DIFF[^$ESCAPE]+$END_DIFF)+$NOESCAPE{0,$CONTEXT})+"
これを呼び出す最も簡単な方法は、例えばgit config alias.diffwc '!path/to/git-diff-word-context'
。
--stdin
たとえば、optionsを介して呼び出してフィルタとして使用することもできますgit show --color-words | git-diff-word-context --stdin -U5
。
外部diffドライバとして設定するには、追加の手順を実行する必要があります(GIT_EXTERNAL_DIFF
内部参照man git
)。 IMHO、git diff
この場合、任意のパラメータを渡すことは特に困難です。