Come viene risolta la cronologia dei comandi tra più istanze di Vim?


15

Vim conserva una cronologia degli ex comandi (accessibile tramite :e q:) e tale cronologia persiste dopo essere stata chiusa.

Se eseguo più istanze di Vim (stesso utente, stessa directory home), in che modo Vim arbitra tra le cronologie dei comandi? Sembra che l'ultimo processo per uscire vince. C'è un modo per mantenere la cronologia dei comandi di tutte le istanze?


1
Veramente? Questa storia non persiste dopo aver smesso per me. (Vim 7.4.52, Ubuntu 14.04)
Doorknob,

3
@Doorknob Assicurati di essere di tua ~/.viminfoproprietà. Un errore comune è quello di eseguire le persone sudo vim ...che, se non hai mai eseguito vim come tuo utente prima, creeranno ~/.viminfocome root. Se questo è il problema, suggerirei di imparare a usare sudoedito sudo -emodificare i file privilegiati.
Jamessan,

@jamessan Huh, sembra che fosse proprio questo il problema; chown'ing il mio .viminfo di nuovo a me stesso risolto. (Non sono sicuro di come la sua proprietà sia stata cambiata in root, dato che l'ho sempre usata sudoedit, ma vabbè.)
Doorknob

Risposte:


10

La risposta alla domanda sul titolo è ciò che hai osservato. Dal manuale utente di vim:help 21.3

Quando esegui Vim più volte, l'ultimo che esce memorizzerà le sue informazioni. Ciò può causare la perdita delle informazioni che sono state precedentemente archiviate da Vims. Ogni oggetto può essere ricordato una sola volta.

Tuttavia, il nome file del file viminfo (dove è memorizzata la cronologia dei comandi, tra l'altro come marchi globali e contenuti del registro, se così configurato) è modificabile! Ciò significa che è possibile impostare diverse "storie" per diversi progetti o istanze di vim. Supponendo che non si esegua più di un'istanza di vim per progetto, la gestione del nome del file viminfo tramite vimrc (o altro plug-in delle impostazioni del progetto) è un ottimo modo per gestirlo.

Imposta file viminfo alternativi

Per la gestione a livello di progetto, vogliamo configurare vim per salvare il tuo viminfo in un altro file. Questo può essere fatto all'interno di un vim in esecuzione prima di uscire o dal tuo vimrc, ad esempio potresti avere delle linee nel tuo vimrc che rilevano una particolare directory come appartenente a un progetto.

:set viminfo+=nPath/to/custom/viminfofile

Un esempio di avere vimrc impostare automaticamente questo in base alla directory:

 if getcwd() == "/projects/projA"
     set viminfo+=n~/.viminfo-projA
 endif

Il risultato di cui sopra è che la cronologia specifica del progetto verrà caricata all'avvio e salvata all'uscita, se vim viene lanciato nella directory / projects / projA.

Carica un viminfo alternativo durante l'avvio

Questo è utile nel caso in cui si desideri salvare la cronologia sul lato e caricarla in un secondo momento, senza gestirla a livello di progetto.

Innanzitutto, per salvare la cronologia, aggiungi l'opzione viminfo come sopra prima di uscire. Quindi per caricare la cronologia, avvia vim con l'opzione -i

vim -i Path/to/custom/viminfofile

Se non vuoi uscire da vim per salvare il file viminfo, puoi usare :wv( :wviminfo). Questo salva il file viminfo senza uscire da vim secondo l'impostazione n sopra. E puoi anche fare :wv SomeOtherFileper salvare in una posizione che non è la stessa impostazione nell'opzione viminfo. Questo può essere più conveniente che impostare il nome file da usare all'uscita, ma non impedisce a vim di usare il file predefinito una volta che esce.

Ad esempio, in prima vim:

:wv ~/customInfo

e nel secondo terminale:

vim -i ~/customInfo

Oppure, se un secondo vim è già in esecuzione e si desidera caricare il viminfo:

:rv ~/customInfo

Si noti che :wve :rvnon modificare il nome del file vim salverà all'uscita né il nome del file letto durante l'avvio.

Informazioni aggiuntive

Descrizione di set viminfo+=nSomePath: Utilizziamo il comando set per regolare l'opzione denominata viminfo. La +=indica che vogliamo aggiungere alla possibilità, non cambiare tutto. Aggiungiamo l' nopzione che specifica il nome file per viminfo. Immediatamente dopo nabbiamo SomePathquale sarà il nome file usato per salvare viminfo.

La documentazione per wv( :help wv) indica che questo comando prima legge il file viminfo, quindi si fonde tra informazioni vecchie e nuove. Finora non ho informazioni su come funziona l'unione in questo caso, ma immagino che mantenga i segni per i file e i registri sconosciuti che non sono impostati nella sessione corrente.

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.