标题问题的答案就是您所观察到的。从vim用户手册:help 21.3
多次运行Vim时,最后一个退出将存储其信息。这可能导致先前退出的Vims存储的信息丢失。每个项目只能记住一次。
但是,viminfo文件的文件名(如果已配置,则存储命令历史记录以及其他内容,例如全局标记和寄存器内容)是可以更改的!这意味着您可以为不同的项目或vim实例设置不同的“历史记录”。假设每个项目运行的vim实例不超过一个,通过vimrc(或其他项目设置插件)管理viminfo文件名是解决此问题的好方法。
设置替代的viminfo文件
对于项目级别的管理,我们想配置vim来将您的viminfo保存到另一个文件中。这可以在退出前运行的vim中完成,也可以通过vimrc完成,例如,您的vimrc中可能有几行检测到特定目录属于项目。
:set viminfo+=nPath/to/custom/viminfofile
让vimrc根据目录自动设置此示例:
if getcwd() == "/projects/projA"
set viminfo+=n~/.viminfo-projA
endif
上面的结果是,如果在/ projects / projA目录中启动了vim,则特定于项目的历史记录将在启动时加载并在退出时保存。
在启动期间加载备用viminfo
这对于需要将历史记录保存到一边并稍后加载而不在项目级别进行管理的情况很有用。
首先,要保存历史记录,请在退出之前按上述方法添加到viminfo选项。然后要加载历史记录,请使用-i选项启动vim
vim -i Path/to/custom/viminfofile
如果不想退出vim来保存viminfo文件,可以使用:wv
(:wviminfo
)。根据上面的n设置,这将保存viminfo文件而不退出vim。而且,您还:wv SomeOtherFile
可以保存到与viminfo选项中的设置不同的位置。这可能比设置退出时使用的文件名更方便,但是一旦退出,不会阻止vim使用默认文件。
例如,在第一个vim中:
:wv ~/customInfo
在第二个航站楼:
vim -i ~/customInfo
或者,如果第二个vim已经在运行,并且您想加载viminfo:
:rv ~/customInfo
请注意,:wv
并:rv
不会改变文件的vim的名称将保存在退出也不在启动时读取该文件的名称。
附加信息
说明set viminfo+=nSomePath
:我们使用set命令来调整名为的选项viminfo
。在+=
表明我们要追加到选择,而不是改变一切。我们附加了n
为viminfo指定文件名的选项。之后,n
我们SomePath
将立即获得用于保存viminfo的文件名。
wv
(:help wv
)的文档指示此命令将首先读取viminfo文件,然后在新旧信息之间合并。到目前为止,我还没有关于这种情况下如何进行合并的信息,但是我猜想它会为当前会话中未设置的未知文件和寄存器保留标记。