Confronto più dettagliato all'interno di una riga


17

Uso vimdiffper controllare le differenze tra i file e alcune volte manca un po '. ad esempio, se ho i seguenti due file:

//a.c
printf("Hello\n");

e:

//b.c
int i = printf("hello\n") + 3;

mostrandoli in vimdiffdà:

inserisci qui la descrizione dell'immagine

Quello che vorrò vedere è che in BC hnon è maiuscola.

C'è un modo per dire a Vimdiff di confrontare (in quella riga) solo una parte di esso (voglio dire, ignorare il int i =e il + 3)?


4
Il plugin diffchar è probabilmente quello di cui hai bisogno ma non ho esperienza con esso. Forse qualcuno con esperienza nell'usarlo può dare una risposta buona e dettagliata (o forse un'alternativa).
— Tokoyami,

Risposte:


15

Non penso che questo possa essere fatto dallo stesso Vim. Da :h view-diffs(enfasi mia):

hl-DiffText DiffText Testo modificato all'interno di una linea modificata.  Vim
                                trova il primo personaggio che è diverso,
                                e l'ultimo personaggio che è diverso
                                (ricerca dalla fine della riga).   Il
                                il testo in mezzo è evidenziato.  Questo significa
                                quelle parti nel mezzo che sono ancora le
                                lo stesso è evidenziato comunque.   Solo "iwhite" di
                                'diffopt' è usato qui.

Il suggerimento di Tokoyami ci avvicina di un passo. Installa diffchar( collegamento Github per coloro che utilizzano un caricatore automatico di plug-in). Dalla v4.7, con il plugin abilitato, Vim mostra automaticamente differenze più esatte:

inserisci qui la descrizione dell'immagine

  • Puoi premere F7(la mappa di tasti predefinita) per alternare tra il solito e il plugin. Riassegna con:

    nmap <silent> <key> <Plug>ToggleDiffCharAllLines
    

    sostituendo <key>con un codice chiave appropriato.

  • Puoi usare più colori:

    let g:DiffColors=100
    

+1 ma "un passo avanti" mi sembra eccessivamente conservatore. Diffchar risolve totalmente questo problema IMO.
— Sparhawk,

@Sparhawk bene, non ignora gli elementi comuni in una riga (OP vuole solo evidenziare le modifiche)
— muru

Non sono sicuro di aver capito. Gli elementi comuni non sono ignorati in questo esempio (es. printfE ello)?
— Sparhawk,

1
@Sparhawk in questo esempio, sì. Ma con modifiche più complesse, diventa rapidamente disordinato.
— Muru,

Ah va bene, quindi è un po 'buggy quindi ... grazie per l'informazione.
— Sparhawk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.