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?
command-line
command-history
persistent-state
200_success
la source
la source
~/.viminfo
propriété vous appartient. Une erreur courante consiste à exécuter des personnessudo vim ...
qui, si vous n'avez pas exécuté vim en tant que votre propre utilisateur auparavant, créeront en~/.viminfo
tant que root. Si tel est le problème, je vous suggère d'apprendre à utilisersudoedit
ousudo -e
à modifier des fichiers privilégiés.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.)Réponses:
La réponse à votre question de titre est ce que vous avez observé. Depuis le manuel d'utilisation de vim
:help 21.3
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.
Un exemple de configuration automatique de vimrc en fonction du répertoire:
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
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:
et dans le deuxième terminal:
Ou, si un deuxième vim est déjà en cours d'exécution et que vous souhaitez charger le viminfo:
Notez que
:wv
et:rv
ne 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éeviminfo
. Le+=
indique que nous voulons ajouter à l'option, ne pas tout changer. Nous ajoutons l'n
option qui spécifie le nom de fichier pour viminfo. Immédiatement après,n
nousSomePath
aurons 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.la source