Colorare lo spazio bianco nell’output di git-diff

Per quanto riguarda la formattazione del codice, sono una specie di purista :). Molto spesso rimuovo spazi bianchi non necessari (linee con solo w, ws alla fine delle linee, ecc.). Ho persino dato il vim per mostrare quel tipo di linee colorate al rosso.

Il mio problema è che usando gitdiff vedo spesso qualcosa del genere:

- else{ + else{ 

Anche se ho git-diff colorato non riesco a vedere la differenza (in quella particolare situazione ho rimosso 1 ws alla fine della riga). C’è un modo per dire a git-diff di mostrare che è stato colorato in rosso? (ad esempio quelli abbinati a / \ s + $ / regexp).

Potrebbe essere necessario impostare l’impostazione di configurazione color.diff.whitespace, ad esempio con:

  git config color.diff.whitespace "red reverse" 

( color.diff che tu abbia già impostato color.diff o color.ui su auto dal momento che dici di vedere comunque le patch colorate da git diff .)

Se vuoi perfezionare il tipo di errori di spazi bianchi evidenziati in rosso, puoi cambiare core.whitespace , ma blank-at-eol è abilitato per impostazione predefinita, quindi probabilmente non dovrai cambiarlo per l’esempio che hai citato .

Una ansible fonte di confusione è che nell’output di git diff , gli errori di spazi bianchi sono solo evidenziati nelle righe che vengono introdotte, non quelle che vengono rimosse. ( Aggiornamento: come sottolinea Paul Whittaker nella sua risposta , che dovresti alzare in votazione :), puoi vederli invertendo il senso del diff con git diff -R .)

Puoi trovare più documentazione su queste opzioni di configurazione nella pagina man di git config

Se non si desidera utilizzare l’opzione -R kludge, è ansible utilizzare l’opzione Evidenzia errore WhiteSpace dalla pagina man di confronto .

–ws-error-highlight =

Evidenzia gli errori di spazi bianchi sulle righe specificate da nel colore specificato da color.diff.whitespace. è un elenco separato da virgole di vecchio, nuovo, contesto. Quando questa opzione non viene fornita, vengono evidenziati solo gli errori di spazi bianchi nelle nuove righe. Ad es. –Ws-error-highlight = new, old evidenzia gli errori di spaziatura su entrambe le righe cancellate e aggiunte. tutto può essere usato come una scorciatoia per vecchio, nuovo, contesto.

git diff --ws-error-highlight=new,old

o

git diff --ws-error-highlight=all

Non conosco un modo per accenderlo in modo permanente e memorizzarlo in config a parte l’uso di un alias:

git config alias.df 'diff --ws-error-highlight=all'

Ora puoi usare:

git df

Per vedere le modifiche in rosso.

Nota che con Git 2.11 (4 ° trim. 2016) , questo alias potrebbe essere sostituito con:

 git config diff.wsErrorHighlight all 

Vedi doc su git diff e su git config .

Usa git diff -R per trasformare le linee rimosse in linee aggiunte. Quindi lo spazio vuoto finale verrà evidenziato.

(Questo presuppone che tu abbia già triggersto hightlighting per lo spazio bianco, secondo le impostazioni del colore dalla risposta di Mark. Il credito per questo metodo va al post di Junio ​​all’indirizzo http://git.661346.n2.nabble.com/Highlighting-whitespace-on-removal- with-git-diff-td5653205.html ).

Ad esempio, quando converti un file da terminazioni di linea DOS a Unix, git diff -R mostra chiaramente i caratteri ^M (dis) che appaiono alle estremità delle linee. Senza -R (e anche senza -w ecc.) Mostra che l’intero file è cambiato, ma non mostra come.

Usa git diff --color | less -R git diff --color | less -R . L’ -R rende i codici di controllo del colore a misura d’uomo.

Quindi è ansible utilizzare la ricerca di espressioni regolari di less , ad es

 /[[:space:]]+$ 

La mia versione di git diff sembra già fare questo – ho git 1.7.4.1 e ho impostato color.ui = auto .