Comment l'historique des commandes est-il résolu entre plusieurs instances de Vim?

15

Vim conserve un historique des commandes ex (accessible via : et q:), et cet historique persiste après avoir quitté.

Si j'exécute plusieurs instances de Vim (même utilisateur, même répertoire personnel), comment Vim arbitre-t-il entre les historiques de commandes? Il semble que le dernier processus de sortie l'emporte. Existe-t-il un moyen de conserver l'historique des commandes de toutes les instances?

200_success
la source
1
Vraiment? Cette histoire ne persiste pas après avoir quitté pour moi. (Vim 7.4.52, Ubuntu 14.04)
Poignée de porte
3
@ Doorknob Assurez-vous que votre ~/.viminfopropriété vous appartient. Une erreur courante consiste à exécuter des personnes sudo vim ...qui, si vous n'avez pas exécuté vim en tant que votre propre utilisateur auparavant, créeront en ~/.viminfotant que root. Si tel est le problème, je vous suggère d'apprendre à utiliser sudoeditou sudo -eà modifier des fichiers privilégiés.
jamessan
@jamessan Huh, il semble que c'était bien le problème; chown'en revenant à moi-même. (Je ne sais pas comment sa propriété a été changée en root, car j'ai toujours utilisé sudoedit, mais bon.)
Bouton de porte

Réponses:

10

La réponse à votre question de titre est ce que vous avez observé. Depuis le manuel d'utilisation de vim:help 21.3

Lorsque vous exécutez Vim plusieurs fois, la dernière sortie stockera ses informations. Cela peut entraîner la perte d'informations qui quittaient précédemment Vims stockées. Chaque élément ne peut être mémorisé qu'une seule fois.

Cependant, le nom de fichier du fichier viminfo (où l'historique des commandes est stocké, entre autres, comme les marques globales et le contenu du registre, s'il est ainsi configuré) est modifiable! Cela signifie que vous pouvez configurer différents «historiques» pour différents projets ou instances de vim. En supposant que vous n'exécutez pas plus d'une instance vim par projet, la gestion du nom de fichier viminfo via vimrc (ou un autre plugin de paramètres de projet) est un excellent moyen de gérer cela.

Configurer des fichiers viminfo alternatifs

Pour la gestion au niveau du projet, nous voulons configurer vim pour enregistrer votre viminfo dans un fichier différent. Cela peut être fait dans un vim en cours d'exécution avant de quitter, ou par votre vimrc, par exemple, vous pouvez avoir des lignes dans votre vimrc qui détectent un répertoire particulier comme appartenant à un projet.

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

Un exemple de configuration automatique de vimrc en fonction du répertoire:

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

Le résultat de ce qui précède est que l'historique spécifique au projet sera chargé au démarrage et enregistré à la sortie, si vim est lancé dans le répertoire / projects / projA.

Charger un autre viminfo au démarrage

C'est bon dans le cas où vous souhaitez enregistrer votre historique sur le côté et le charger plus tard, sans le gérer au niveau du projet.

Tout d'abord, pour enregistrer l'historique, vous ajoutez à l'option viminfo comme ci-dessus avant de quitter. Ensuite, pour charger l'historique, lancez vim avec l'option -i

vim -i Path/to/custom/viminfofile

Si vous ne souhaitez pas quitter vim pour enregistrer le fichier viminfo, vous pouvez utiliser :wv( :wviminfo). Cela enregistre le fichier viminfo sans quitter vim selon le paramètre n ci-dessus. Et vous pouvez aussi faire:wv SomeOtherFile pour enregistrer dans un emplacement différent du paramètre de l'option viminfo. Cela peut être plus pratique que de configurer le nom de fichier à utiliser à la sortie, mais n'empêche pas vim d'utiliser le fichier par défaut une fois qu'il quitte.

Par exemple, dans le premier vim:

:wv ~/customInfo

et dans le deuxième terminal:

vim -i ~/customInfo

Ou, si un deuxième vim est déjà en cours d'exécution et que vous souhaitez charger le viminfo:

:rv ~/customInfo

Notez que :wvet :rvne changez pas le nom du fichier vim enregistrera à la sortie ni le nom du fichier lu au démarrage.

Information additionnelle

Description de set viminfo+=nSomePath: Nous utilisons la commande set pour ajuster l'option nommée viminfo. Le +=indique que nous voulons ajouter à l'option, ne pas tout changer. Nous ajoutons l' noption qui spécifie le nom de fichier pour viminfo. Immédiatement après, nnous SomePathaurons le nom de fichier utilisé pour enregistrer viminfo.

La documentation de wv( :help wv) indique que cette commande lira d'abord le fichier viminfo, puis fusionnera entre les anciennes et les nouvelles informations. Jusqu'à présent, je n'ai aucune information sur le fonctionnement de la fusion dans ce cas, mais je suppose qu'il garde des marques pour les fichiers et registres inconnus qui ne sont pas définis dans la session en cours.

John O'M.
la source