如果我运行多个Vim实例(同一用户,相同的主目录),怎么办Vim在命令历史之间进行仲裁?看来最后一个退出程序会获胜。有没有办法保留所有实例的命令历史记录?
#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的文件名。到目前为止,我还没有关于这种情况下如何进行合并的信息,但是我猜想它会为当前会话中未设置的未知文件和寄存器保留标记。
评论
真?为我辞职后,这段历史不会持续。 (Vim 7.4.52,Ubuntu 14.04)@Doorknob确保您的〜/ .viminfo归您所有。一个常见的错误是人们运行sudo vim ...如果您以前从未以自己的用户身份运行过vim,则会将〜/ .viminfo创建为root用户。如果那是问题,我建议您学习使用sudoedit或sudo -e编辑特权文件。
@jamessan Huh,看来确实是问题所在;将我的.viminfo重新整理回自己。 (由于我一直使用sudoedit,所以不知道它的所有权如何变为root,但是很好。)