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

  1. Erhalten Sie eine Liste aller aufgeführten Puffer
  2. Für jeden dieser Puffer bestimmen, ob diff ist 1 dafür
  3. Wenn diff ist 1 verwenden bufwinnr() zu erhält es Fensternummer.
  4. Bestimmen Sie aus den Fensternummern, welches übrig ist und welcher richtig ist. Links hat eine kleinere Fensternummer
  5. 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.

War es hilfreich?

Lösung

  1. Fahrrad durch alle möglichen Pufferzahlen von 0 zu bufnr('$') und überprüfen Sie, ob dieser Puffer verwendet wird bufexists(nr).
  2. Speichern Sie die aktuelle Puffernummer mithilfe let curbuf=bufnr('%').
  3. Für jeden vorhandenen Puffer tun execute "buffer ".bufnumber und prüfe &diff Variable. Denken Sie an zwei Zahlen, aber nicht überprüfen bufwinnr().
  4. Tun execute "buffer ".curbuf.
  5. 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top