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.