So erhalten Sie eine Liste von Dateien, die derzeit in VIM verbreitet werden
-
21-09-2019 - |
Frage
Ich schreibe ein VIM -Plugin, in dem ich alle Dateien bestimmen muss, die derzeit verbreitet werden. Das sind diejenigen, für die diff
ist eingestellt. Ich habe das Handbuch durchlaufen, konnte aber nicht viel finden.
Ist es möglich, dies zu tun?
Diese Frage bezieht sich tatsächlich mit Frage How-to-the-the-Position-of-Window-in-VIM. In dieser Frage versuchte ich, die Position des Fensters zu erhalten, um festzustellen, welcher der Diffs der rechte ist und welches eine übrig ist. Das Lösung Ich bekam Winnr ()
Diese Lösung kann nur funktionieren, wenn nur 2 Fenster (die differenziert werden). Ich möchte es generisch machen, damit ich auch dann feststellen kann, welches links und welches richtig ist. Das habe ich gedacht, um das Problem zu lösen
- Erhalten Sie eine Liste aller aufgeführten Puffer
- Für jeden dieser Puffer bestimmen, ob
diff
ist1
dafür - Wenn
diff
ist1
verwendenbufwinnr()
zu erhält es Fensternummer. - Bestimmen Sie aus den Fensternummern, welches übrig ist und welcher richtig ist. Links hat eine kleinere Fensternummer
- Und dann bestimmen, ob Strompuffer (in welch
alt-left
`Alt-right` wird gedrückt) wird unter Verwendung von Winnr des aktuellen Puffer links oder rechts.
Jetzt sind die fehlenden Teile 1 und 2 für 1 Ls verwendet, aber ich muss seine Ausgabe analysieren. Gibt es eine geradlinige Möglichkeit, eine Liste aller aufgeführten Puffer zu erhalten? Und dann gibt es eine Möglichkeit, nach diesem Puffer zu überprüfen diff
ist 1 oder nicht.
Alle Vorschläge für eine einfachere Lösung werden ebenfalls geschätzt.
Lösung
- Fahrrad durch alle möglichen Pufferzahlen von
0
zubufnr('$')
und überprüfen Sie, ob dieser Puffer verwendet wirdbufexists(nr)
. - Speichern Sie die aktuelle Puffernummer mithilfe
let curbuf=bufnr('%')
. - Für jeden vorhandenen Puffer tun
execute "buffer ".bufnumber
und prüfe&diff
Variable. Denken Sie an zwei Zahlen, aber nicht überprüfenbufwinnr()
. - Tun
execute "buffer ".curbuf
. - Endlich anrufen
bufwinnr(nr)
Für zwei in Schritt 3 gefundene Zahlen.
UPD: Eine andere Lösung
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