Come ottenere l'elenco dei file che sono attualmente in fase di diffed in vim

StackOverflow https://stackoverflow.com/questions/2486420

  •  21-09-2019
  •  | 
  •  

Domanda

Sto scrivendo un plugin vim in cui ho bisogno di determinare tutti quei file che sono attualmente in fase di diffed. Cioè quelli per i quali è impostata diff. Vado attraverso il manuale, ma non sono riuscito a trovare molto.

E 'possibile fare questo.

Questa domanda è in realtà legata a mettere in discussione how-to rilevare-the-posizione-di-window-in-vim . In questa domanda ho cercato di ottenere la posizione della finestra, in modo da rilevare che una delle diff è quella giusta, e che è rimasto uno. La soluzione href="https://stackoverflow.com/questions/2473678/how-to-detect-the-position-of-window-in-vim/2474745#2474745"> ho ottenuto è stato quello di utilizzare winnr ()

Questa soluzione può funzionare solo se ci sono solo 2 finestre (quelli che sono diffed). Voglio rendere generico in modo che, anche se sono aperte più finestre in vim, posso determinare quale è a sinistra e che uno è giusto. Questo è quello che stavo pensando di risolvere il problema

  1. Ottenere un elenco di tutti i tamponi elencati
  2. Per ciascuno di questo buffer determinare se diff è 1 per che
  3. Se diff è uso 1 bufwinnr() per lo ottiene numero finestra.
  4. Dai numeri delle finestre determinare quale è a sinistra e che uno è giusto. sinistra si avrà più piccolo numero di finestra
  5. E quindi determinare se buffer corrente (in cui viene premuto alt-left`alt-right`) a sinistra oa destra utilizzando winnr del buffer corrente.

Ora i pezzi che mancano sono 1 e 2. Per 1 ls possono essere utilizzati, ma ho bisogno di analizzare la sua produzione. C'è un modo straightfwd ottenere l'elenco di tutti i buffer elencati. E poi c'è un modo per verificare se per quel buffer diff è 1 o meno.

Qualche suggerimento per una soluzione più semplice sono anche apprezzati.

È stato utile?

Soluzione

  1. Ciclo attraverso tutti i possibili numeri di tampone dal 0 a bufnr('$') e controllare se questo buffer esiste utilizzando bufexists(nr).
  2. Salva attuale numero di buffer utilizzando let curbuf=bufnr('%').
  3. Per ogni buffer esistente fare execute "buffer ".bufnumber e controllare variabili &diff. Ricordate due numeri, ma non selezionare bufwinnr().
  4. Fare execute "buffer ".curbuf.
  5. Infine chiamare bufwinnr(nr) per due numeri trovati al punto 3.

UPD: un'altra soluzione

let g:wlist={"0": [], "1":[]}
windo call add(g:wlist[&diff], bufnr('%'))
let g:diffbuffers=g:wlist.1
" here you have list of buffers with &diff option set in g:diffbuffers
scroll top