C'è un modo per condividere la cronologia dei comandi di vim?


8

Posso condividere la cronologia dei comandi di Vim tra istanze in tempo reale?

Con questo intendo cosa fanno le persone in questo modo:

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

Cioè, quando eseguo un comando echo test1in una shell, e poi premo Upin un'altra, vedo echo test1. (Per essere precisi, si deve premere Enterprima Upche funzioni.)

Questo è possibile con Vim? All'inizio ho pensato che l'uso +clientserverdell'opzione avrebbe funzionato. Ma quello sembra essere qualcos'altro.


Risposte:


13

La cronologia dei comandi è memorizzata nel file viminfo ( :help viminfo). Di solito viene letto all'avvio e scritto all'uscita, ma è possibile persistere e sincronizzare esplicitamente tra le istanze di Vim con una combinazione di :wviminfoe :rviminfo. Nota che questo sincronizzerà l'intera informazione; cioè anche registrare contenuti, marchi, elenchi di buffer, ecc.



1

In Vim il più vicino che puoi ottenere è (come la risposta di Ingo e il commento di Christian menzionato) è:

augroup viminfo
    autocmd!
    autocmd FocusLost   * wviminfo
    autocmd FocusGained * rviminfo
augroup end

È importante rendersi conto che i Focus*comandi automatici non vengono sempre eseguiti quando si utilizza Vim da un terminale, soprattutto se si utilizza tmux o screen. Dovresti testarlo prima usando :au FocusLost :echoerr "Focus lost!".

Per quanto ne so, non esiste una buona soluzione se questi autocomandi non funzionano per te. L'uso di altri eventi (come CursorHold) mi sembra problematico a causa di problemi di tempistica che quasi sicuramente affioreranno.


Neovim viene fornito con "ShaDa", che sostituisce il sistema viminfo di Vim. Un aspetto in cui è meglio unire file di istanze diverse e sebbene non supporti direttamente la sincronizzazione tra più istanze ( ancora ), sembra funzionare bene per almeno uno sviluppatore Neovim :

augroup shada
  autocmd!
  autocmd CursorHold * rshada | wshada
augroup end

Vedere :help shada-mergingper i dettagli sul processo di fusione.


Nota: penso che Vim 8 introduca anche la funzionalità di fusione perché timestamp dei comandi immessi. Vedi:h viminfo-timestamp
Christian Brabandt,

L'ho provato sul mio sistema prima di pubblicare questa risposta @ChristianBrabandt, e non sembra funzionare molto bene. Forse ho fatto qualcosa di sbagliato.
Martin Tournoij,

forse un bug? avrebbe bisogno di un buon esempio riproducibile nella lista @ vim-dev
Christian Brabandt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.