Vim保留了ex命令的历史记录(可通过:↑和q:访问),并且退出后该历史记录仍然存在。

如果我运行多个Vim实例(同一用户,相同的主目录),怎么办Vim在命令历史之间进行仲裁?看来最后一个退出程序会获胜。有没有办法保留所有实例的命令历史记录?

评论

真?为我辞职后,这段历史不会持续。 (Vim 7.4.52,Ubuntu 14.04)

@Doorknob确保您的〜/ .viminfo归您所有。一个常见的错误是人们运行sudo vim ...如果您以前从未以自己的用户身份运行过vim,则会将〜/ .viminfo创建为root用户。如果那是问题,我建议您学习使用sudoedit或sudo -e编辑特权文件。

@jamessan Huh,看来确实是问题所在;将我的.viminfo重新整理回自己。 (由于我一直使用sudoedit,所以不知道它的所有权如何变为root,但是很好。)

#1 楼

标题问题的答案就是您观察到的内容。来自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的文件名。到目前为止,我还没有关于这种情况下如何进行合并的信息,但是我猜想它会为当前会话中未设置的未知文件和寄存器保留标记。