Ich habe Inhalt in einer Variablen (out
) gespeichert, die ich durch den aktuellen Puffer ersetzen möchte. Ich mache es zur Zeit so (vereinfachte Version):Verhindern, dass der Cursor nach unten springt, wenn der Puffer ersetzt wird
let splitted = split(out, '\n')
if line('$') > len(splitted)
execute len(splitted) .',$delete'
endif
call setline(1, splitted)
(Ausführlich: https://github.com/fatih/vim-go/blob/master/autoload/go/fmt.vim#L130)
jedoch setline()
hier verursacht Langsamkeit auf einigen Maschinen und https://github.com/fatih/vim-go/issues/459. Ich habe es selbst profiliert, aber für mich war Setline kein Problem. Wie auch immer, ich brauche eine Lösung, die schneller ist. Also habe ich mir mehrere andere Lösungen ausgedacht.
Erste ist, der den Ausgang in ein Register setzt, löscht alle Zeilen und legt sie dann zurück:
let @a = out
% delete _
put! a
$ delete _
Zweite Lösung wäre mit append()
(die zuvor in verwendet wurde vim-go https://github.com/fatih/vim-go/commit/99a1732e40e3f064300d544eebd4153dbc3c60c7):
let splitted = split(out, '\n')
%delete _
call append(0, splitted)
$delete _
Sie beide Arbeit! Beide verursachen aber auch einen Nebeneffekt, den ich immer noch nicht lösen konnte und der auch im Titel steht. Das Problem wird wie folgt beschrieben:
Wenn ein Puffer in einer anderen Ansicht (etwa neben nächsten) geöffnet ist, und wir eine der beiden oben genannten Lösungen nennen, es bricht den Cursor von die andere Ansicht und springt auf der Boden
ist hier ein GIF zeigt es besser (wenn ich :w
eines der Verfahren genannt oben nennen wird): http://d.pr/i/1buDZ
gibt es eine Möglichkeit, den Inhalt eines Puffers zu ersetzen, die schnell ist und bricht das Layout nicht? Oder wie kann ich es mit einem der oben genannten Verfahren verhindern?
Danke.
Ja, ich benutze sie bereits, aber sie haben keinen Einfluss auf die beiden oben genannten Optionen. Hier ist, wie ich es benutze: https://github.com/fatih/vim-go/blob/master/autoload/go/fmt.vim#L58 Auch gibt es kein Problem mit dem aktuellen Puffer/Sicht, das Problem ist, es ist Auswirkungen auf die andere Windows-Cursor-Position, wo ich keine Kontrolle habe. –
Hoppla, das habe ich über dein Thema vermisst: "in * einer anderen Ansicht *", sorry – yolenoyer
Yeah, schau auch mal auf das GIF, ich habe es auch in Aktion gezeigt :) –