Come ottenere l'elenco dei file che sono attualmente in fase di diffed in vim
-
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
- Ottenere un elenco di tutti i tamponi elencati
- Per ciascuno di questo buffer determinare se
diff
è1
per che - Se
diff
è uso1
bufwinnr()
per lo ottiene numero finestra. - Dai numeri delle finestre determinare quale è a sinistra e che uno è giusto. sinistra si avrà più piccolo numero di finestra
- 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.
Soluzione
- Ciclo attraverso tutti i possibili numeri di tampone dal
0
abufnr('$')
e controllare se questo buffer esiste utilizzandobufexists(nr)
. - Salva attuale numero di buffer utilizzando
let curbuf=bufnr('%')
. - Per ogni buffer esistente fare
execute "buffer ".bufnumber
e controllare variabili&diff
. Ricordate due numeri, ma non selezionarebufwinnr()
. - Fare
execute "buffer ".curbuf
. - 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