如何在多个Vim实例之间解析命令历史记录?


15

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

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


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

3
@Doorknob确保您的财产~/.viminfo归您所有。人们通常会犯一个错误sudo vim ...,如果您以前从未以自己的用户身份运行过vim,则会~/.viminfo以root 用户身份运行。如果那是问题,我建议您学习使用sudoeditsudo -e编辑特权文件。
jamessan

@jamessan Huh,看来确实是问题所在;chown我的.viminfo回复给我修复。(由于我一直都在使用sudoedit,所以不知道它的所有权如何变为root ,但是很好。)
Doorknob 2015年

Answers:


10

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.