Ho contenuto memorizzato in una variabile (out
) che voglio sostituire con il buffer corrente. Attualmente sto facendo in questo modo (versione semplificata):Previene il salto del cursore verso il basso quando viene sostituito il buffer
let splitted = split(out, '\n')
if line('$') > len(splitted)
execute len(splitted) .',$delete'
endif
call setline(1, splitted)
(dettagliata: https://github.com/fatih/vim-go/blob/master/autoload/go/fmt.vim#L130)
Tuttavia setline()
qui provoca lentezza su alcune macchine e https://github.com/fatih/vim-go/issues/459. L'ho realizzato io stesso ma per me il setline non era un problema. Ad ogni modo, ho bisogno di una soluzione che sia più veloce. Quindi ho trovato diverse altre soluzioni.
primo è, che mette l'uscita di un registro, elimina tutte le righe e poi lo rimette:
let @a = out
% delete _
put! a
$ delete _
Seconda soluzione sarebbe utilizzando append()
(che è stato usato in precedenza in vim-go https://github.com/fatih/vim-go/commit/99a1732e40e3f064300d544eebd4153dbc3c60c7):
let splitted = split(out, '\n')
%delete _
call append(0, splitted)
$delete _
Essi sia lavoro! Tuttavia entrambi causano anche un effetto collaterale che non riesco ancora a risolvere ed è anche scritto nel titolo. Il problema è descritto come:
Se un buffer viene aperto in un'altra vista (per esempio vicino al seguente), e chiamiamo una delle due soluzioni sopra, rompe il cursore del l'altra vista e salta fondo
Qui è un GIF che mostra meglio (ogni volta chiamo :w
una delle procedure sopra è chiamato): http://d.pr/i/1buDZ
c'è un modo, per sostituire il contenuto di un buffer, che è veloce e non rompe il layout? O come posso prevenirlo con una delle procedure sopra?
Grazie.
Sì, li sto già utilizzando, ma non influiscono sulle due opzioni precedenti. Ecco come lo uso: https://github.com/fatih/vim-go/blob/master/autoload/go/fmt.vim#L58 Inoltre non c'è alcun problema con il buffer/vista attuale, il problema è che è influisce sull'altra posizione del cursore di Windows, in cui non ho alcun controllo. –
Oops, ho perso questo problema: "in * un'altra vista *", spiacente – yolenoyer
Sì, anche per favore guarda la GIF, l'ho mostrato anche in azione :) –